diff options
author | Aaron Marks <nymacro@gmail.com> | 2005-07-13 02:59:19 +0000 |
---|---|---|
committer | Aaron Marks <nymacro@gmail.com> | 2005-07-13 02:59:19 +0000 |
commit | b426d3e5d269007f95360e40f906c5568a5abc99 (patch) | |
tree | 0dd6a4ad8ed1db374b74b6ea01d0eacb7dd50abb /src/messageout.cpp | |
parent | 960f631a2be601357424f9e6c5cdc64b68bff856 (diff) | |
download | manaserv-b426d3e5d269007f95360e40f906c5568a5abc99.tar.gz manaserv-b426d3e5d269007f95360e40f906c5568a5abc99.tar.bz2 manaserv-b426d3e5d269007f95360e40f906c5568a5abc99.tar.xz manaserv-b426d3e5d269007f95360e40f906c5568a5abc99.zip |
Implemented MessageOut.
Rewrote MessageIn::readString - it was overly complex and didn't operate
correctly.
Update test client so it sends a login message.
Diffstat (limited to 'src/messageout.cpp')
-rw-r--r-- | src/messageout.cpp | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/src/messageout.cpp b/src/messageout.cpp index d9393667..2bdc52ec 100644 --- a/src/messageout.cpp +++ b/src/messageout.cpp @@ -22,10 +22,14 @@ */ #include "messageout.h" +#include <iostream> +#include <cstdlib> MessageOut::MessageOut(): - packet(0) + packet(0), + pos(0) { + packet = new Packet(NULL, 0); } MessageOut::~MessageOut() @@ -34,3 +38,44 @@ MessageOut::~MessageOut() delete packet; } } + +void MessageOut::writeByte(char value) +{ + packet->expand(sizeof(char)); + packet->data[packet->length] = value; + packet->length += sizeof(char); +} + +void MessageOut::writeShort(unsigned short value) +{ + packet->expand(sizeof(unsigned short)); + memcpy(&packet->data[packet->length], (void*)&value, sizeof(unsigned short)); + packet->length += sizeof(unsigned short); +} + +void MessageOut::writeLong(unsigned long value) +{ + packet->expand(sizeof(unsigned long)); + memcpy(&packet->data[packet->length], (void*)&value, sizeof(unsigned long)); + packet->length += sizeof(unsigned long); +} + +void MessageOut::writeString(const std::string &string, int length) +{ + if (length < 0) + length = string.length(); + + packet->expand(length + sizeof(unsigned short)); + + // length prefix + memcpy(&packet->data[packet->length], (void*)&length, sizeof(unsigned short)); + // actual string + memcpy(&packet->data[packet->length + sizeof(unsigned short)], + (void*)string.c_str(), length); + packet->length += length + sizeof(unsigned short); +} + +const Packet *MessageOut::getPacket() +{ + return packet; +} |