From 135fa01ee301fd878c93444999a625f64ccf76c1 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 5 Mar 2018 22:31:07 +0300 Subject: Moved same methods from messageout into one file. --- src/net/eathena/messageout.cpp | 91 --------------------------------------- src/net/eathena/messageout.h | 25 ----------- src/net/messageout.cpp | 98 ++++++++++++++++++++++++++++++++++++++++-- src/net/messageout.h | 39 +++++++++++------ src/net/tmwa/messageout.cpp | 74 ------------------------------- src/net/tmwa/messageout.h | 22 ---------- 6 files changed, 120 insertions(+), 229 deletions(-) diff --git a/src/net/eathena/messageout.cpp b/src/net/eathena/messageout.cpp index 58792b0ef..065471355 100644 --- a/src/net/eathena/messageout.cpp +++ b/src/net/eathena/messageout.cpp @@ -30,10 +30,6 @@ #include "debug.h" -#ifndef SDL_BIG_ENDIAN -#error missing SDL_endian.h -#endif // SDL_BYTEORDER - namespace EAthena { @@ -56,91 +52,4 @@ void MessageOut::expand(const size_t bytes) const PacketCounters::incOutBytes(CAST_S32(bytes)); } -void MessageOut::writeInt16(const int16_t value, const char *const str) -{ - expand(2); -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - int16_t swap = SDL_Swap16(value); - memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int16_t)); -#else // SDL_BYTEORDER == SDL_BIG_ENDIAN - - memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int16_t)); -#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN - - DEBUGLOG2("writeInt16: " + toStringPrint(CAST_U32( - CAST_U16(value))), - mPos, str); - mPos += 2; -} - -void MessageOut::writeInt32(const int32_t value, const char *const str) -{ - DEBUGLOG2("writeInt32: " + toStringPrint(CAST_U32(value)), - mPos, str); - expand(4); -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - int32_t swap = SDL_Swap32(value); - memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int32_t)); -#else // SDL_BYTEORDER == SDL_BIG_ENDIAN - - memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int32_t)); -#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN - - mPos += 4; -} - -void MessageOut::writeInt64(const int64_t value, const char *const str) -{ - DEBUGLOG2("writeInt64: " + toStringPrint(CAST_U32(value)), - mPos, str); - expand(8); -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - int32_t swap = SDL_Swap64(value); - memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int64_t)); -#else // SDL_BYTEORDER == SDL_BIG_ENDIAN - - memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int64_t)); -#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN - - mPos += 8; -} - -void MessageOut::writeBeingId(const BeingId value, const char *const str) -{ - writeInt32(toInt(value, int32_t), str); -} - -#define LOBYTE(w) (CAST_U8(w)) -#define HIBYTE(w) (CAST_U8(( \ -CAST_U16(w)) >> 8)) - -void MessageOut::writeCoordinates(const uint16_t x, - const uint16_t y, - unsigned char direction, - const char *const str) -{ - DEBUGLOG2(strprintf("writeCoordinates: %u,%u %u", - CAST_U32(x), - CAST_U32(y), - CAST_U32(direction)), mPos, str); - unsigned char *const data = reinterpret_cast(mData) - + CAST_SIZE(mPos); - expand(3); - mPos += 3; - - uint16_t temp = x; - temp <<= 6; - data[0] = 0; - data[1] = 1; - data[2] = 2; - data[0] = HIBYTE(temp); - data[1] = CAST_U8(temp); - temp = y; - temp <<= 4; - data[1] |= HIBYTE(temp); - data[2] = LOBYTE(temp); - direction = toServerDirection(direction); - data[2] |= direction; -} - } // namespace EAthena diff --git a/src/net/eathena/messageout.h b/src/net/eathena/messageout.h index 2f2718e23..b86c10d4f 100644 --- a/src/net/eathena/messageout.h +++ b/src/net/eathena/messageout.h @@ -49,31 +49,6 @@ class MessageOut final : public Net::MessageOut ~MessageOut() override final; - /**< Writes a short. */ - void writeInt16(const int16_t value, - const char *const str) override final; - - /**< Writes a long. */ - void writeInt32(const int32_t value, - const char *const str) override final; - - void writeInt64(const int64_t value, - const char *const str); - - void writeBeingId(const BeingId value, - const char *const str) override final; - - /** - * Encodes coordinates and direction in 3 bytes. - */ - void writeCoordinates(const uint16_t x, - const uint16_t y, - unsigned char direction, - const char *const str); - - void resetPos() - { mPos = 0; } - private: void expand(const size_t size) const override final; diff --git a/src/net/messageout.cpp b/src/net/messageout.cpp index 50bea460a..69993e4d8 100644 --- a/src/net/messageout.cpp +++ b/src/net/messageout.cpp @@ -29,8 +29,17 @@ #include "utils/stringutils.h" +PRAGMA48(GCC diagnostic push) +PRAGMA48(GCC diagnostic ignored "-Wshadow") +#include +PRAGMA48(GCC diagnostic pop) + #include "debug.h" +#ifndef SDL_BIG_ENDIAN +#error missing SDL_endian.h +#endif // SDL_BYTEORDER + namespace Net { @@ -54,7 +63,92 @@ void MessageOut::writeInt8(const int8_t value, const char *const str) CAST_U8(value))), mPos, str); mPos += 1; - PacketCounters::incOutBytes(1); +} + +void MessageOut::writeInt16(const int16_t value, const char *const str) +{ + expand(2); +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + int16_t swap = SDL_Swap16(value); + memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int16_t)); +#else // SDL_BYTEORDER == SDL_BIG_ENDIAN + + memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int16_t)); +#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN + + DEBUGLOG2("writeInt16: " + toStringPrint(CAST_U32( + CAST_U16(value))), + mPos, str); + mPos += 2; +} + +void MessageOut::writeInt32(const int32_t value, const char *const str) +{ + DEBUGLOG2("writeInt32: " + toStringPrint(CAST_U32(value)), + mPos, str); + expand(4); +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + int32_t swap = SDL_Swap32(value); + memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int32_t)); +#else // SDL_BYTEORDER == SDL_BIG_ENDIAN + + memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int32_t)); +#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN + + mPos += 4; +} + +void MessageOut::writeInt64(const int64_t value, const char *const str) +{ + DEBUGLOG2("writeInt64: " + toStringPrint(CAST_U32(value)), + mPos, str); + expand(8); +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + int32_t swap = SDL_Swap64(value); + memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int64_t)); +#else // SDL_BYTEORDER == SDL_BIG_ENDIAN + + memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int64_t)); +#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN + + mPos += 8; +} + +void MessageOut::writeBeingId(const BeingId value, const char *const str) +{ + writeInt32(toInt(value, int32_t), str); +} + +#define LOBYTE(w) (CAST_U8(w)) +#define HIBYTE(w) (CAST_U8((CAST_U16(w)) >> 8)) + +void MessageOut::writeCoordinates(const uint16_t x, + const uint16_t y, + unsigned char direction, + const char *const str) +{ + DEBUGLOG2(strprintf("writeCoordinates: %u,%u %u", + CAST_U32(x), + CAST_U32(y), + CAST_U32(direction)), mPos, str); + unsigned char *const data = reinterpret_cast(mData) + + CAST_SIZE(mPos); + expand(3); + mPos += 3; + + uint16_t temp = x; + temp <<= 6; + data[0] = 0; + data[1] = 1; + data[2] = 2; + data[0] = HIBYTE(temp); + data[1] = CAST_U8(temp); + temp = y; + temp <<= 4; + data[1] |= HIBYTE(temp); + data[2] = LOBYTE(temp); + direction = toServerDirection(direction); + data[2] |= direction; } void MessageOut::writeString(const std::string &string, @@ -88,7 +182,6 @@ void MessageOut::writeString(const std::string &string, DEBUGLOG2("writeString: " + string, mPos, str); mPos += length; - PacketCounters::incOutBytes(length); } void MessageOut::writeStringNoLog(const std::string &string, @@ -122,7 +215,6 @@ void MessageOut::writeStringNoLog(const std::string &string, DEBUGLOG2("writeString: ***", mPos, str); mPos += length; - PacketCounters::incOutBytes(length); } const char *MessageOut::getData() const diff --git a/src/net/messageout.h b/src/net/messageout.h index 3c171e077..9cf9b7e3e 100644 --- a/src/net/messageout.h +++ b/src/net/messageout.h @@ -54,45 +54,56 @@ class MessageOut notfinal const char *const str); /**< Writes a short. */ - virtual void writeInt16(const int16_t value, - const char *const str) = 0; + void writeInt16(const int16_t value, + const char *const str); /**< Writes a long. */ - virtual void writeInt32(const int32_t value, - const char *const str) = 0; + void writeInt32(const int32_t value, + const char *const str); - virtual void writeBeingId(const BeingId value, - const char *const str) = 0; + void writeInt64(const int64_t value, + const char *const str); + + void writeBeingId(const BeingId value, + const char *const str); + + void writeCoordinates(const uint16_t x, + const uint16_t y, + unsigned char direction, + const char *const str); /** * Writes a string. If a fixed length is not given (-1), it is stored * as a short at the start of the string. */ - virtual void writeString(const std::string &string, - int length, - const char *const str); + void writeString(const std::string &string, + int length, + const char *const str); /** * Writes a string. If a fixed length is not given (-1), it is stored * as a short at the start of the string. */ - virtual void writeStringNoLog(const std::string &string, - int length, - const char *const str); + void writeStringNoLog(const std::string &string, + int length, + const char *const str); /** * Returns the content of the message. */ - virtual const char *getData() const A_WARN_UNUSED; + const char *getData() const A_WARN_UNUSED; /** * Returns the length of the data. */ - virtual unsigned int getDataSize() const A_WARN_UNUSED; + unsigned int getDataSize() const A_WARN_UNUSED; virtual ~MessageOut() { } + void resetPos() + { mPos = 0; } + static unsigned char toServerDirection(unsigned char direction) A_CONST; diff --git a/src/net/tmwa/messageout.cpp b/src/net/tmwa/messageout.cpp index 6379b3b1b..0d6677936 100644 --- a/src/net/tmwa/messageout.cpp +++ b/src/net/tmwa/messageout.cpp @@ -30,10 +30,6 @@ #include "debug.h" -#ifndef SDL_BIG_ENDIAN -#error missing SDL_endian.h -#endif // SDL_BYTEORDER - namespace TmwAthena { @@ -56,74 +52,4 @@ void MessageOut::expand(const size_t bytes) const PacketCounters::incOutBytes(CAST_S32(bytes)); } -void MessageOut::writeInt16(const int16_t value, const char *const str) -{ - DEBUGLOG2("writeInt16: " + toStringPrint(CAST_U32( - CAST_U16(value))), - mPos, str); - expand(2); -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - int16_t swap = SDL_Swap16(value); - memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int16_t)); -#else // SDL_BYTEORDER == SDL_BIG_ENDIAN - - memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int16_t)); -#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN - - mPos += 2; -} - -void MessageOut::writeInt32(const int32_t value, const char *const str) -{ - DEBUGLOG2("writeInt32: " + toStringPrint(CAST_U32(value)), - mPos, str); - expand(4); -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - int32_t swap = SDL_Swap32(value); - memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int32_t)); -#else // SDL_BYTEORDER == SDL_BIG_ENDIAN - - memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int32_t)); -#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN - - mPos += 4; -} - -void MessageOut::writeBeingId(const BeingId value, const char *const str) -{ - writeInt32(toInt(value, int32_t), str); -} - -#define LOBYTE(w) (CAST_U8(w)) -#define HIBYTE(w) (CAST_U8(( \ -CAST_U16(w)) >> 8U)) - -void MessageOut::writeCoordinates(const uint16_t x, - const uint16_t y, - unsigned char direction, - const char *const str) -{ - DEBUGLOG2(strprintf("writeCoordinates: %u,%u %u", - CAST_U32(x), static_cast(y), - CAST_U32(direction)), mPos, str); - unsigned char *const data = reinterpret_cast(mData) - + CAST_SIZE(mPos); - expand(3); - mPos += 3; - - uint16_t temp = x; - temp <<= 6; - data[0] = 0; - data[1] = 1; - data[2] = 2; - data[0] = HIBYTE(temp); - data[1] = CAST_U8(temp); - temp = y; - temp <<= 4; - data[1] |= HIBYTE(temp); - data[2] = LOBYTE(temp); - direction = toServerDirection(direction); - data[2] |= direction; -} - } // namespace TmwAthena diff --git a/src/net/tmwa/messageout.h b/src/net/tmwa/messageout.h index 35e462693..3c0aaa92c 100644 --- a/src/net/tmwa/messageout.h +++ b/src/net/tmwa/messageout.h @@ -49,28 +49,6 @@ class MessageOut final : public Net::MessageOut ~MessageOut() override final; - /**< Writes a short. */ - void writeInt16(const int16_t value, - const char *const str) override final; - - /**< Writes a long. */ - void writeInt32(const int32_t value, - const char *const str) override final; - - void writeBeingId(const BeingId value, - const char *const str) override final; - - /** - * Encodes coordinates and direction in 3 bytes. - */ - void writeCoordinates(const uint16_t x, - const uint16_t y, - unsigned char direction, - const char *const str); - - void resetPos() - { mPos = 0; } - private: void expand(const size_t size) const override final; -- cgit v1.2.3-60-g2f50