Newer
Older
MuebReceiver::MuebReceiver(QObject *parent)
: QObject(parent), d_ptr_(new MuebReceiverPrivate(this)) {}
MuebReceiver::~MuebReceiver() { delete d_ptr_; }
MuebReceiver &MuebReceiver::Instance() {
static MuebReceiver instance;
return instance;
}
inline void datagram_uncompress_error() {
qWarning() << "[MuebReceiver] Processed packet is invalid! Check the header "
"or packet contents(size)";
}
Q_D(MuebReceiver);
while (d->socket.hasPendingDatagrams()) {
if (d->socket.pendingDatagramSize() == d->configuration.packet_size()) {
const QNetworkDatagram &datagram = d->socket.receiveDatagram();
QByteArray data = datagram.data();
// Process datagram
// Packet header check
// Check protocol
datagram_uncompress_error();
return;
}
packet_number < 0) {
datagram_uncompress_error();
return;
}
data.remove(0, d->configuration.packet_header_size());
auto frame_begin = d->frame.bits() +
packet_number * d->configuration.frame_fragment_size();
// Uncompress 1 byte into 2 color components
for (auto i : data) {
*frame_begin = i & 0xf0;
frame_begin++;
frame_begin++;
}
// No compression
} else {
emit(FrameChanged(QPixmap::fromImage(d->frame)));
}
// Drop invalid packet
else {
qWarning() << "[MuebReceiver] Packet has invalid size!"