summaryrefslogtreecommitdiff
path: root/src/net/messageout.cpp
diff options
context:
space:
mode:
authorEugenio Favalli <elvenprogrammer@gmail.com>2006-07-25 18:04:38 +0000
committerEugenio Favalli <elvenprogrammer@gmail.com>2006-07-25 18:04:38 +0000
commitc7e7b62aa94bf295ca1dc556762ad6070221e0cd (patch)
tree04f827df0df64a80e04a4115986609486d715237 /src/net/messageout.cpp
parentc0c8775271679ac4904bc0bc02a74d28fc75efd0 (diff)
downloadmana-client-c7e7b62aa94bf295ca1dc556762ad6070221e0cd.tar.gz
mana-client-c7e7b62aa94bf295ca1dc556762ad6070221e0cd.tar.bz2
mana-client-c7e7b62aa94bf295ca1dc556762ad6070221e0cd.tar.xz
mana-client-c7e7b62aa94bf295ca1dc556762ad6070221e0cd.zip
Switched client to use enet and modified login sequence to work with the new protocol from tmwserv.
Diffstat (limited to 'src/net/messageout.cpp')
-rw-r--r--src/net/messageout.cpp102
1 files changed, 51 insertions, 51 deletions
diff --git a/src/net/messageout.cpp b/src/net/messageout.cpp
index f6ed5de6..5e8a5d72 100644
--- a/src/net/messageout.cpp
+++ b/src/net/messageout.cpp
@@ -1,5 +1,5 @@
/*
- * The Mana World
+ * The Mana World Server
* Copyright 2004 The Mana World Development Team
*
* This file is part of The Mana World.
@@ -24,93 +24,93 @@
#include "messageout.h"
#include <string>
-#include <SDL.h>
-#include <SDL_endian.h>
-#include "network.h"
+#include <enet/enet.h>
+
#include "packet.h"
-MessageOut::MessageOut(Network *network):
- mNetwork(network),
+MessageOut::MessageOut():
mData(0),
mDataSize(0),
mPos(0)
{
- mData = mNetwork->mOutBuffer + mNetwork->mOutSize;
}
-void MessageOut::writeInt8(Sint8 value)
+MessageOut::~MessageOut()
{
- mData[mPos] = value;
- mPos += sizeof(Sint8);
- mNetwork->mOutSize+= sizeof(Sint8);
+ if (mData) {
+ free(mData);
+ }
+}
+
+void
+MessageOut::expand(size_t bytes)
+{
+ mData = (char*)realloc(mData, bytes);
+ mDataSize = bytes;
}
-void MessageOut::writeInt16(Sint16 value)
+void
+MessageOut::writeByte(char value)
{
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- (*(Sint16 *)(mData + mPos)) = SDL_Swap16(value);
-#else
- (*(Sint16 *)(mData + mPos)) = value;
-#endif
- mPos += sizeof(Sint16);
- mNetwork->mOutSize += sizeof(Sint16);
+ expand(mPos + 1);
+ mData[mPos] = value;
+ mPos += 1;
}
-void MessageOut::writeInt32(Sint32 value)
+void MessageOut::writeShort(short value)
{
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- (*(Sint32 *)(mData + mPos)) = SDL_Swap32(value);
-#else
- (*(Sint32 *)(mData + mPos)) = value;
-#endif
- mPos += sizeof(Sint32);
- mNetwork->mOutSize += sizeof(Sint32);
+ expand(mPos + 2);
+ uint16_t t = ENET_HOST_TO_NET_16(value);
+ memcpy(mData + mPos, &t, 2);
+ mPos += 2;
}
-void MessageOut::writeString(const std::string &string, int length)
+void
+MessageOut::writeLong(long value)
{
- std::string toWrite = string;
+ expand(mPos + 4);
+ uint32_t t = ENET_HOST_TO_NET_32(value);
+ memcpy(mData + mPos, &t, 4);
+ mPos += 4;
+}
+void
+MessageOut::writeString(const std::string &string, int length)
+{
+ int stringLength = string.length();
if (length < 0)
{
// Write the length at the start if not fixed
- writeInt16(string.length());
+ writeShort(stringLength);
+ length = stringLength;
}
- else
+ else if (length < stringLength)
{
// Make sure the length of the string is no longer than specified
- toWrite = string.substr(0, length);
+ stringLength = length;
}
+ expand(mPos + length);
// Write the actual string
- memcpy(&mData[mPos], (void*)toWrite.c_str(), toWrite.length());
- mPos += toWrite.length();
- mNetwork->mOutSize += toWrite.length();
+ memcpy(mData + mPos, string.c_str(), stringLength);
// Pad remaining space with zeros
- if (length > (int)toWrite.length())
+ if (length > stringLength)
{
- memset(&mData[mPos], '\0', length - toWrite.length());
- mPos += length - toWrite.length();
- mNetwork->mOutSize += length - toWrite.length();
+ memset(mData + mPos + stringLength, '\0', length - stringLength);
}
+ mPos += length;
}
-MessageOut& operator<<(MessageOut &msg, const Sint8 &rhs)
-{
- msg.writeInt8(rhs);
- return msg;
-}
-
-MessageOut& operator<<(MessageOut &msg, const Sint16 &rhs)
+char*
+MessageOut::getData()
{
- msg.writeInt16(rhs);
- return msg;
+ return mData;
}
-MessageOut& operator<<(MessageOut &msg, const Sint32 &rhs)
+unsigned int
+MessageOut::getDataSize()
{
- msg.writeInt32(rhs);
- return msg;
+ return mDataSize;
}