network.cpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include "network.h"
  2. #include "logger.h"
  3. #include <QJsonObject>
  4. #include <QJsonArray>
  5. #include <QJsonDocument>
  6. Network::Network(QObject *parent)
  7. : QObject{parent}
  8. {
  9. bool ok = m_udpSocket.bind(QHostAddress::AnyIPv4, 18000);
  10. if (!ok) {
  11. LOG_ERROR("udp bind failed: {}", m_udpSocket.errorString().toUtf8().data());
  12. return;
  13. }
  14. connect(&m_udpSocket, &QUdpSocket::readyRead, this, &Network::onUdpReadyRead);
  15. }
  16. Network::~Network()
  17. {
  18. }
  19. void Network::onUdpReadyRead()
  20. {
  21. QByteArray datagram;
  22. QHostAddress addr;
  23. quint16 port;
  24. QJsonDocument doc;
  25. QJsonParseError jsonError;
  26. while (m_udpSocket.hasPendingDatagrams())
  27. {
  28. datagram.resize(int(m_udpSocket.pendingDatagramSize()));
  29. m_udpSocket.readDatagram(datagram.data(), datagram.size(), &addr, &port);
  30. LOG_DEBUG("receive from {}:{}", addr.toString().toUtf8().data(), port);
  31. doc = QJsonDocument::fromJson(datagram, &jsonError);
  32. if(jsonError.error == QJsonParseError::NoError && doc.isObject())
  33. {
  34. LOG_INFO("{}", doc.toJson().data());
  35. emit updateScreen(doc.object());
  36. }
  37. }
  38. }