summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-09-01 01:40:45 +0300
committerAndrei Karas <akaras@inbox.ru>2014-09-06 01:18:54 +0300
commit7794e6271fea1e0c0af9eacc99603f15a2f8ef79 (patch)
tree084996965982a65bbac403bc13c874cb98855b99
parent18ff3c4430f6dfad38cf2da7c417315eba53a0fc (diff)
downloadmv-7794e6271fea1e0c0af9eacc99603f15a2f8ef79.tar.gz
mv-7794e6271fea1e0c0af9eacc99603f15a2f8ef79.tar.bz2
mv-7794e6271fea1e0c0af9eacc99603f15a2f8ef79.tar.xz
mv-7794e6271fea1e0c0af9eacc99603f15a2f8ef79.zip
add ability to delay network messages dispatch.
-rw-r--r--src/net/ea/network.cpp3
-rw-r--r--src/net/ea/network.h4
-rw-r--r--src/net/eathena/network.cpp3
-rw-r--r--src/net/tmwa/network.cpp6
4 files changed, 15 insertions, 1 deletions
diff --git a/src/net/ea/network.cpp b/src/net/ea/network.cpp
index c9360e9c9..c080e35ec 100644
--- a/src/net/ea/network.cpp
+++ b/src/net/ea/network.cpp
@@ -65,7 +65,8 @@ Network::Network() :
mWorkerThread(nullptr),
mMutexIn(SDL_CreateMutex()),
mMutexOut(SDL_CreateMutex()),
- mSleep(config.getIntValue("networksleep"))
+ mSleep(config.getIntValue("networksleep")),
+ mPauseDispatch(false)
{
TcpNet::init();
}
diff --git a/src/net/ea/network.h b/src/net/ea/network.h
index 84a4b0635..d9847d55d 100644
--- a/src/net/ea/network.h
+++ b/src/net/ea/network.h
@@ -67,6 +67,9 @@ class Network notfinal
void fixSendBuffer();
+ void pauseDispatch()
+ { mPauseDispatch = true; }
+
// ERROR replaced by NET_ERROR because already defined in Windows
enum
{
@@ -106,6 +109,7 @@ class Network notfinal
SDL_mutex *mMutexIn;
SDL_mutex *mMutexOut;
int mSleep;
+ bool mPauseDispatch;
};
} // namespace Ea
diff --git a/src/net/eathena/network.cpp b/src/net/eathena/network.cpp
index fe13b2f86..2b716c2f8 100644
--- a/src/net/eathena/network.cpp
+++ b/src/net/eathena/network.cpp
@@ -92,6 +92,7 @@ void Network::clearHandlers()
void Network::dispatchMessages()
{
+ mPauseDispatch = false;
while (messageReady())
{
SDL_mutexP(mMutexIn);
@@ -132,6 +133,8 @@ void Network::dispatchMessages()
}
skip(len);
+ if (mPauseDispatch)
+ break;
}
}
diff --git a/src/net/tmwa/network.cpp b/src/net/tmwa/network.cpp
index 5338a6f5b..fa7565e46 100644
--- a/src/net/tmwa/network.cpp
+++ b/src/net/tmwa/network.cpp
@@ -93,6 +93,7 @@ void Network::clearHandlers()
void Network::dispatchMessages()
{
BLOCK_START("Network::dispatchMessages 1")
+ mPauseDispatch = false;
while (messageReady())
{
SDL_mutexP(mMutexIn);
@@ -133,6 +134,11 @@ void Network::dispatchMessages()
}
skip(len);
+ if (mPauseDispatch)
+ {
+ BLOCK_END("Network::dispatchMessages 3")
+ break;
+ }
BLOCK_END("Network::dispatchMessages 3")
}
BLOCK_END("Network::dispatchMessages 1")