#pragma once
#include <QUdpSocket>
#include <QDataStream>
#include <QNetworkDatagram>
#include "Listener/LkMessageEvent.h"
#include "Listener/LkListener.h"
class LkUdpSocket : public QUdpSocket
{
Q_OBJECT
public:
LkUdpSocket(QObject *parent = 0);
~LkUdpSocket();
virtual void init(QString ip, int port);
int write(QByteArray &data, QString ip, int port);
int broadcast(QByteArray &data, int port);
void setType(int type);
public slots:
virtual void readPendingDatagrams();
protected:
int mType;
};
#include "LkUdpSocket.h"
LkUdpSocket::LkUdpSocket(QObject *parent)
: QUdpSocket(parent)
{
}
LkUdpSocket::~LkUdpSocket()
{
}
void LkUdpSocket::init(QString ip, int port)
{
bool b = bind(QHostAddress::Any, port);
}
void LkUdpSocket::readPendingDatagrams()
{
while (hasPendingDatagrams())
{
QByteArray datagram;
datagram.resize(pendingDatagramSize());
QNetworkDatagram netDgm = receiveDatagram();
QString senderIP = netDgm.senderAddress().toString();
datagram = netDgm.data();
QDataStream in(datagram);
LkMessageEvent me(QString::number(mType));
me.setData(datagram.size() - sizeof(int), datagram.data() + sizeof(int));
gNetListener->dispatch(me);
}
}
int LkUdpSocket::write(QByteArray &data, QString ip, int port)
{
int size = writeDatagram(data.data(), data.size(), QHostAddress(ip), port);
return size;
}
int LkUdpSocket::broadcast(QByteArray &data, int port)
{
int size = writeDatagram(data.data(), data.size(), QHostAddress::Broadcast, port);
return size;
}
void LkUdpSocket::setType(int type)
{
mType = type;
}