HxUtils/HxBroadcast.cpp
hehaoyang b8cd983825 1, 删除 HxSql HxLog 扩展库
2. HxBroadcase 扩展库增加发送广播JSON消息扩展方法
3. HxTask扩展库任务ID修改为字符串
4. HxTrace扩展库修改输出格式
5. 取消再linux下生成 debug和release模式的选择
2024-02-01 01:03:55 +08:00

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