summaryrefslogtreecommitdiff
path: root/src/net/eathena
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/eathena')
-rw-r--r--src/net/eathena/messageout.cpp1
-rw-r--r--src/net/eathena/network.cpp11
-rw-r--r--src/net/eathena/network.h2
3 files changed, 14 insertions, 0 deletions
diff --git a/src/net/eathena/messageout.cpp b/src/net/eathena/messageout.cpp
index 795807a3f..a486a02f5 100644
--- a/src/net/eathena/messageout.cpp
+++ b/src/net/eathena/messageout.cpp
@@ -45,6 +45,7 @@ MessageOut::MessageOut(short id):
Net::MessageOut(id)
{
mNetwork = EAthena::Network::instance();
+ mNetwork->fixSendBuffer();
mData = mNetwork->mOutBuffer + mNetwork->mOutSize;
writeInt16(id);
diff --git a/src/net/eathena/network.cpp b/src/net/eathena/network.cpp
index e7e15d8e4..d01613075 100644
--- a/src/net/eathena/network.cpp
+++ b/src/net/eathena/network.cpp
@@ -525,4 +525,15 @@ uint16_t Network::readWord(int pos)
#endif
}
+void Network::fixSendBuffer()
+{
+ if (mOutSize > BUFFER_LIMIT)
+ {
+ if (mState != CONNECTED)
+ mOutSize = 0;
+ else
+ flush();
+ }
+}
+
} // namespace EAthena
diff --git a/src/net/eathena/network.h b/src/net/eathena/network.h
index 4a7f41c09..1fdcf7c6e 100644
--- a/src/net/eathena/network.h
+++ b/src/net/eathena/network.h
@@ -86,6 +86,8 @@ class Network
void flush();
+ void fixSendBuffer();
+
// ERROR replaced by NET_ERROR because already defined in Windows
enum
{