HxUtils/HxBroadcast.cpp
2024-01-25 18:37:25 +08:00

54 lines
1.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "HxBroadcast.h"
#include <QHostAddress>
#include <QJsonDocument>
#include <QJsonObject>
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_json(int action_type, std::initializer_list<QPair<QString, QJsonValue>> args)
{
QJsonObject root, msginfo;
for (std::initializer_list<QPair<QString, QJsonValue>>::const_iterator i = args.begin(); i != args.end(); ++i)
msginfo.insert(i->first, i->second);
root.insert("action_type", action_type);
root.insert("msgInfo", msginfo);
publish(QJsonDocument(root).toJson(QJsonDocument::Compact));
}
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(datagram);
}
}