62 lines
1.6 KiB
C++
62 lines
1.6 KiB
C++
#include "idserver.h"
|
|
|
|
idServer::idServer(uint16_t sn, QObject *parent)
|
|
: QObject{parent},
|
|
_socket(new QUdpSocket()),
|
|
_addresses(new QList<QHostAddress>()),
|
|
_sn(sn)
|
|
{
|
|
_socket = new QUdpSocket();
|
|
|
|
QObject::connect(_socket, &QUdpSocket::readyRead, [=] {
|
|
_processData(_socket->receiveDatagram());
|
|
});
|
|
|
|
foreach(auto __if, QNetworkInterface::allInterfaces()) {
|
|
foreach(auto __addressEntry, __if.addressEntries()) {
|
|
bool __isIPv4 = false;
|
|
__addressEntry.ip().toIPv4Address(&__isIPv4);
|
|
if (__isIPv4) {
|
|
_addresses->append(__addressEntry.broadcast());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void idServer::sendIdRequest()
|
|
{
|
|
foreach(auto __address, *_addresses) {
|
|
_socket->writeDatagram(stpClient::packIdSnRequest(_sn), __address, 7000);
|
|
}
|
|
}
|
|
|
|
void idServer::_processData(QNetworkDatagram dg)
|
|
{
|
|
QByteArray __data = dg.data();
|
|
|
|
if (__data.size() < CONST_HEADER_SIZE) return;
|
|
|
|
trans_ns::bytes2word __size;
|
|
|
|
__size.bytes.L = __data[1];
|
|
__size.bytes.H = __data[2];
|
|
|
|
if (__data[0] == stpProtocol_ns::packetType::DATA) {
|
|
if (uint8_t(__data[3]) == uint8_t(stpProtocol_ns::stpCommand::ID)
|
|
&& (__size.word == 5)) {
|
|
{
|
|
trans_ns::bytes2word __model;
|
|
__model.bytes.L = __data[4];
|
|
__model.bytes.H = __data[5];
|
|
|
|
trans_ns::bytes2word __sn;
|
|
__sn.bytes.L = __data[6];
|
|
__sn.bytes.H = __data[7];
|
|
|
|
emit newIdMessage(__model.word, __sn.word, dg.senderAddress());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|