diff options
author | rubidium <rubidium@openttd.org> | 2013-07-07 10:37:16 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2013-07-07 10:37:16 +0000 |
commit | 51f0d11ee3a5cd7b31fcf575424e228d4e69eaa5 (patch) | |
tree | c8968cb6aa040f35f49806bc00f2c61102b976ee /src/network | |
parent | d0eff986be39ba24cf83caf6e96de99416cb02a2 (diff) | |
download | openttd-51f0d11ee3a5cd7b31fcf575424e228d4e69eaa5.tar.xz |
(svn r25573) -Change: make content list appear faster by allowing some window redraws in between
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/core/tcp_content.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/network/core/tcp_content.cpp b/src/network/core/tcp_content.cpp index 95b31fc9d..164f8de3c 100644 --- a/src/network/core/tcp_content.cpp +++ b/src/network/core/tcp_content.cpp @@ -192,8 +192,28 @@ bool NetworkContentSocketHandler::HandlePacket(Packet *p) */ void NetworkContentSocketHandler::ReceivePackets() { + /* + * We read only a few of the packets. This as receiving packets can be expensive + * due to the re-resolving of the parent/child relations and checking the toggle + * state of all bits. We cannot do this all in one go, as we want to show the + * user what we already received. Otherwise, it can take very long before any + * progress is shown to the end user that something has been received. + * It is also the case that we request extra content from the content server in + * case there is an unknown (in the content list) piece of content. These will + * come in after the main lists have been requested. As a result, we won't be + * getting everything reliably in one batch. Thus, we need to make subsequent + * updates in that case as well. + * + * As a result, we simple handle an arbitrary number of packets in one cycle, + * and let the rest be handled in subsequent cycles. These are ran, almost, + * immediately after this cycle so in speed it does not matter much, except + * that the user inferface will appear better responding. + * + * What arbitrary number to choose is the ultimate question though. + */ Packet *p; - while ((p = this->ReceivePacket()) != NULL) { + int i = 42; + while (--i != 0 && (p = this->ReceivePacket()) != NULL) { bool cont = this->HandlePacket(p); delete p; if (!cont) return; |