From aaf9850c8350e3d7d20a91d3fe4e026576a7a032 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Sun, 2 Nov 2008 20:45:59 +0000 Subject: [FIX] Defined the *_IMPORT defines for libraries [FIX] Added more packet types [FIX] Sectioned off packet types [FIX] ConnectionHandler is now ClientHandler [ADD] Added a ProgressMeter class for allowing display of progress of packets git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@296 6ecfd1a5-f3ed-3746-8530-beee90d26b22 --- signet/protocol/PacketMaker.cpp | 54 +++++++++++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 13 deletions(-) (limited to 'signet/protocol/PacketMaker.cpp') diff --git a/signet/protocol/PacketMaker.cpp b/signet/protocol/PacketMaker.cpp index 3c398ffe..5ede3996 100644 --- a/signet/protocol/PacketMaker.cpp +++ b/signet/protocol/PacketMaker.cpp @@ -18,55 +18,82 @@ // Header include #include "PacketMaker.h" +// Protocol includes +#include "ProgressMeter.h" + // Qt includes #include #include #include -bool readFromBuffer(char* dest, QIODevice* src, const int size) +bool readFromBuffer(char* dest, QIODevice* src, const int size, Signet::Protocol::ProgressMeter* progressMeter = 0) { int totalRead = 0; + if (progressMeter) + progressMeter->setExpectedSize(size); while ((totalRead < size) && src->waitForReadyRead(30000)) { int read = src->read(dest + totalRead, size - totalRead); if (read < 0) + { + if (progressMeter) + progressMeter->failure(); return false; + } totalRead += read; + if (progressMeter) + progressMeter->setValue(totalRead); } + if (progressMeter) + progressMeter->success(); return true; } void Signet::Protocol::PacketMaker::rawData(QIODevice* device, const QByteArray& data, const QStringList& receivers) { - Packet packet(Packet::RawData); - packet.addReceivers(receivers); + Packet packet(Packet::RawData, receivers); packet.write(data); packet.dump(device); } void Signet::Protocol::PacketMaker::deny(QIODevice* device, const QStringList& receivers) { - Packet packet(Packet::Denial); - packet.addReceivers(receivers); + Packet packet(Packet::Denial, receivers); packet.dump(device); } void Signet::Protocol::PacketMaker::accept(QIODevice* device, const QStringList& receivers) { - Packet packet(Packet::Acceptance); - packet.addReceivers(receivers); + Packet packet(Packet::Acceptance, receivers); packet.dump(device); } void Signet::Protocol::PacketMaker::challenge(QIODevice* device, const QByteArray& id, const QStringList& receivers) { - Packet packet(Packet::Challenge); - packet.addReceivers(receivers); + Packet packet(Packet::ChallengeRequest, receivers); packet.write(id); packet.dump(device); } -Signet::Protocol::Packet Signet::Protocol::PacketMaker::unwrap(QIODevice* device) +void Signet::Protocol::PacketMaker::makeConnection(QIODevice* device, const QStringList& receivers) +{ + Packet packet(Packet::ConnectRequest, receivers); + packet.dump(device); +} + +void Signet::Protocol::PacketMaker::dropConnection(QIODevice* device, const QStringList& receivers) +{ + Packet packet(Packet::DisconnectRequest, receivers); + packet.dump(device); +} + +void Signet::Protocol::PacketMaker::unknownReceiver(QIODevice* device) +{ + Packet packet(Packet::UnknownReceiver); + packet.dump(device); +} + +Signet::Protocol::Packet Signet::Protocol::PacketMaker::unwrap(QIODevice* device, ProgressMeter* progressMeter) { union { @@ -75,10 +102,10 @@ Signet::Protocol::Packet Signet::Protocol::PacketMaker::unwrap(QIODevice* device qint16 packetType; qint8 sectionType; }; + QStringList receivers; if (!readFromBuffer(raw, device, 2)) return Packet(); packetType = qFromBigEndian(packetType); - Packet packet(packetType); if (!readFromBuffer(raw, device, 1)) return Packet(); while (sectionType == Packet::Receiver) @@ -93,7 +120,7 @@ Signet::Protocol::Packet Signet::Protocol::PacketMaker::unwrap(QIODevice* device delete [] buffer; return Packet(); } - packet.addReceiver(QString::fromUtf8(buffer)); + receivers << QString::fromUtf8(buffer); delete [] buffer; if (!readFromBuffer(raw, device, 1)) return Packet(); @@ -102,11 +129,12 @@ Signet::Protocol::Packet Signet::Protocol::PacketMaker::unwrap(QIODevice* device return Packet(); char* buffer = new char[sectionSize]; sectionSize = qFromBigEndian(sectionSize); - if (!readFromBuffer(buffer, device, sectionSize)) + if (!readFromBuffer(buffer, device, sectionSize, progressMeter)) { delete [] buffer; return Packet(); } + Packet packet(packetType, receivers); packet.write(QByteArray(buffer, sectionSize)); delete [] buffer; return packet; -- cgit