summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2012-08-19 15:44:41 +0300
committerAndrei Karas <akaras@inbox.ru>2012-08-19 15:44:41 +0300
commit94d65b487d458341e3626bcfa41fa09c1c240d89 (patch)
treedebf415d1ee3314a6a746fc4fe8f296f4f8f5472
parent1768a3c449f0bb9ac1533781f5134eebe0f9c458 (diff)
downloadmanaverse-94d65b487d458341e3626bcfa41fa09c1c240d89.tar.gz
manaverse-94d65b487d458341e3626bcfa41fa09c1c240d89.tar.bz2
manaverse-94d65b487d458341e3626bcfa41fa09c1c240d89.tar.xz
manaverse-94d65b487d458341e3626bcfa41fa09c1c240d89.zip
Flush send buffer if it too big.
-rw-r--r--src/net/eathena/messageout.cpp1
-rw-r--r--src/net/eathena/network.cpp11
-rw-r--r--src/net/eathena/network.h2
-rw-r--r--src/net/tmwa/messageout.cpp1
-rw-r--r--src/net/tmwa/network.cpp11
-rw-r--r--src/net/tmwa/network.h2
6 files changed, 28 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
{
diff --git a/src/net/tmwa/messageout.cpp b/src/net/tmwa/messageout.cpp
index 57cbceca3..1ceb806be 100644
--- a/src/net/tmwa/messageout.cpp
+++ b/src/net/tmwa/messageout.cpp
@@ -45,6 +45,7 @@ MessageOut::MessageOut(short id):
Net::MessageOut(id)
{
mNetwork = TmwAthena::Network::instance();
+ mNetwork->fixSendBuffer();
mData = mNetwork->mOutBuffer + mNetwork->mOutSize;
writeInt16(id);
diff --git a/src/net/tmwa/network.cpp b/src/net/tmwa/network.cpp
index 32b1174c1..4f2f85a51 100644
--- a/src/net/tmwa/network.cpp
+++ b/src/net/tmwa/network.cpp
@@ -503,4 +503,15 @@ uint16_t Network::readWord(int pos)
#endif
}
+void Network::fixSendBuffer()
+{
+ if (mOutSize > BUFFER_LIMIT)
+ {
+ if (mState != CONNECTED)
+ mOutSize = 0;
+ else
+ flush();
+ }
+}
+
} // namespace TmwAthena
diff --git a/src/net/tmwa/network.h b/src/net/tmwa/network.h
index 2c9e0de0d..cc7ae129b 100644
--- a/src/net/tmwa/network.h
+++ b/src/net/tmwa/network.h
@@ -87,6 +87,8 @@ class Network
void flush();
+ void fixSendBuffer();
+
// ERROR replaced by NET_ERROR because already defined in Windows
enum
{