summaryrefslogtreecommitdiff
path: root/src/net/tmwa
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 /src/net/tmwa
parent1768a3c449f0bb9ac1533781f5134eebe0f9c458 (diff)
downloadplus-94d65b487d458341e3626bcfa41fa09c1c240d89.tar.gz
plus-94d65b487d458341e3626bcfa41fa09c1c240d89.tar.bz2
plus-94d65b487d458341e3626bcfa41fa09c1c240d89.tar.xz
plus-94d65b487d458341e3626bcfa41fa09c1c240d89.zip
Flush send buffer if it too big.
Diffstat (limited to 'src/net/tmwa')
-rw-r--r--src/net/tmwa/messageout.cpp1
-rw-r--r--src/net/tmwa/network.cpp11
-rw-r--r--src/net/tmwa/network.h2
3 files changed, 14 insertions, 0 deletions
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
{