45 lines
1.3 KiB
C++
45 lines
1.3 KiB
C++
#include "HxBroadcast.h"
|
||
|
||
#include <QHostAddress>
|
||
|
||
HxBroadcast *broadcast = nullptr;
|
||
|
||
HxBroadcast* HxBroadcast::context() { return broadcast; }
|
||
|
||
void HxBroadcast::initialization(int port)
|
||
{
|
||
broadcast = new HxBroadcast();
|
||
|
||
broadcast->port = port;
|
||
broadcast->socket = new QUdpSocket();
|
||
connect(broadcast->socket, &QUdpSocket::readyRead, broadcast, &HxBroadcast::receive_ready_read);
|
||
connect(broadcast, &HxBroadcast::publish_event, broadcast, &HxBroadcast::publish_achieve);
|
||
}
|
||
|
||
void HxBroadcast::publish(QString message)
|
||
{
|
||
emit broadcast->publish_event(message);
|
||
}
|
||
|
||
void HxBroadcast::publish_achieve(QString message)
|
||
{
|
||
socket->writeDatagram(message.toUtf8(), QHostAddress::Broadcast, broadcast->port);
|
||
}
|
||
|
||
void HxBroadcast::receive_ready_read()
|
||
{
|
||
/* 拥有等待的数据报 */
|
||
while (socket->hasPendingDatagrams())
|
||
{
|
||
QByteArray datagram;
|
||
|
||
/* 让datagram的大小为等待处理的数据报的大小,这样才能接收到完整的数据 */
|
||
datagram.resize(socket->pendingDatagramSize());
|
||
|
||
/* 接收数据报,将其存放到datagram中*/
|
||
socket->readDatagram(datagram.data(), datagram.size());
|
||
|
||
emit broadcast->receive_event(QString::fromLocal8Bit(datagram));
|
||
}
|
||
}
|