summaryrefslogtreecommitdiff
path: root/src/net/messageout.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/messageout.cpp')
-rw-r--r--src/net/messageout.cpp49
1 files changed, 8 insertions, 41 deletions
diff --git a/src/net/messageout.cpp b/src/net/messageout.cpp
index 9b27a6a5..f6ed5de6 100644
--- a/src/net/messageout.cpp
+++ b/src/net/messageout.cpp
@@ -30,63 +30,42 @@
#include "network.h"
#include "packet.h"
-MessageOut::MessageOut():
- mPacket(0),
+MessageOut::MessageOut(Network *network):
+ mNetwork(network),
mData(0),
mDataSize(0),
mPos(0)
{
- mData = out + out_size;
-}
-
-MessageOut::~MessageOut()
-{
- if (mPacket) {
- delete mPacket;
- }
-
- // Don't free this data for now, see above.
- //if (mData) {
- // free(mData);
- //}
-}
-
-void MessageOut::expand(size_t bytes)
-{
- /*mData = (char*)realloc(mData, bytes);
- mDataSize = bytes;*/
+ mData = mNetwork->mOutBuffer + mNetwork->mOutSize;
}
void MessageOut::writeInt8(Sint8 value)
{
- expand(mPos + sizeof(Sint8));
mData[mPos] = value;
mPos += sizeof(Sint8);
- out_size += sizeof(Sint8);
+ mNetwork->mOutSize+= sizeof(Sint8);
}
void MessageOut::writeInt16(Sint16 value)
{
- expand(mPos + sizeof(Sint16));
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
(*(Sint16 *)(mData + mPos)) = SDL_Swap16(value);
#else
(*(Sint16 *)(mData + mPos)) = value;
#endif
mPos += sizeof(Sint16);
- out_size += sizeof(Sint16);
+ mNetwork->mOutSize += sizeof(Sint16);
}
void MessageOut::writeInt32(Sint32 value)
{
- expand(mPos + sizeof(Sint32));
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
(*(Sint32 *)(mData + mPos)) = SDL_Swap32(value);
#else
(*(Sint32 *)(mData + mPos)) = value;
#endif
mPos += sizeof(Sint32);
- out_size += sizeof(Sint32);
+ mNetwork->mOutSize += sizeof(Sint32);
}
void MessageOut::writeString(const std::string &string, int length)
@@ -97,39 +76,27 @@ void MessageOut::writeString(const std::string &string, int length)
{
// Write the length at the start if not fixed
writeInt16(string.length());
- expand(mPos + string.length());
}
else
{
// Make sure the length of the string is no longer than specified
toWrite = string.substr(0, length);
- expand(mPos + length);
}
// Write the actual string
memcpy(&mData[mPos], (void*)toWrite.c_str(), toWrite.length());
mPos += toWrite.length();
- out_size += toWrite.length();
+ mNetwork->mOutSize += toWrite.length();
// Pad remaining space with zeros
if (length > (int)toWrite.length())
{
memset(&mData[mPos], '\0', length - toWrite.length());
mPos += length - toWrite.length();
- out_size += length - toWrite.length();
+ mNetwork->mOutSize += length - toWrite.length();
}
}
-const Packet *MessageOut::getPacket()
-{
- if (!mPacket)
- {
- mPacket = new Packet(mData, mDataSize);
- }
-
- return mPacket;
-}
-
MessageOut& operator<<(MessageOut &msg, const Sint8 &rhs)
{
msg.writeInt8(rhs);