PacketSerializer.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "Qt.h"
00024 #include "PacketSerializer.h"
00025 #include "Imports.cpp"
00026
00028
00032 PacketSerializer::PacketSerializer (PacketProtocol *pp)
00033 : packetProtocol (pp)
00034 {
00035 }
00036
00038 PacketSerializer::~PacketSerializer()
00039 {
00040 }
00041
00043
00053 bool PacketSerializer::read (Data &data, Transport *transport)
00054 {
00055 int headerLength = packetProtocol->headerLength();
00056 Q_ASSERT (headerLength != 0);
00057 QByteArray peekedHeader = transport->peek (headerLength);
00058 if (peekedHeader.length() == headerLength) {
00059 int payloadLength = packetProtocol->payloadLength (peekedHeader);
00060 if (transport->canRead (headerLength + payloadLength)) {
00061 QByteArray header = transport->read (headerLength);
00062 Q_ASSERT (header.length() == headerLength);
00063 QByteArray payload = transport->read (payloadLength);
00064 Q_ASSERT (payload.length() == payloadLength);
00065 data = packetProtocol->createPacket (header, payload);
00066 return true;
00067 }
00068 }
00069 return false;
00070 }
00071
00073
00081 bool PacketSerializer::write (const Data &data, Transport *transport)
00082 {
00083 Packet packet = data;
00084 if (transport->canWrite (packet->packetLength())) {
00085 bool ok = transport->write (packet->rawHeader(), false);
00086 Q_ASSERT (ok == true);
00087 ok = transport->write (packet->rawPayload(), true);
00088 Q_ASSERT (ok == true);
00089 return true;
00090 } else
00091 return false;
00092 }