summaryrefslogtreecommitdiff
path: root/src/messageout.cpp
diff options
context:
space:
mode:
authorAaron Marks <nymacro@gmail.com>2005-07-13 02:59:19 +0000
committerAaron Marks <nymacro@gmail.com>2005-07-13 02:59:19 +0000
commitb426d3e5d269007f95360e40f906c5568a5abc99 (patch)
tree0dd6a4ad8ed1db374b74b6ea01d0eacb7dd50abb /src/messageout.cpp
parent960f631a2be601357424f9e6c5cdc64b68bff856 (diff)
downloadmanaserv-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.cpp47
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;
+}