diff options
author | Loïc Blot <nerzhul@users.noreply.github.com> | 2017-08-18 12:17:30 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-18 12:17:30 +0200 |
commit | fb196be8cf8606cfab144e2fe62d9c9d1f50932f (patch) | |
tree | 25bdcb180dfec00f8b10f09a687147ce1944088c /src | |
parent | 1d055aad0ff140968b9617b4ebf7c748f8dc20a8 (diff) | |
download | minetest-fb196be8cf8606cfab144e2fe62d9c9d1f50932f.tar.gz minetest-fb196be8cf8606cfab144e2fe62d9c9d1f50932f.tar.bz2 minetest-fb196be8cf8606cfab144e2fe62d9c9d1f50932f.zip |
server.cpp: unroll setting when sending mapblocks (#6265)
* server.cpp: unroll setting when sending mapblocks
* Improve a little bit performance when sending mapblocks massively
* Use a range based for
* Code style fixes
Diffstat (limited to 'src')
-rw-r--r-- | src/server.cpp | 47 |
1 files changed, 20 insertions, 27 deletions
diff --git a/src/server.cpp b/src/server.cpp index 41493a862..685f1f667 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -95,8 +95,6 @@ void *ServerThread::run() while (!stopRequested()) { try { - //TimeTaker timer("AsyncRunStep() + Receive()"); - m_server->AsyncRunStep(); m_server->Receive(); @@ -989,23 +987,17 @@ void Server::Receive() m_con.Receive(&pkt); peer_id = pkt.getPeerId(); ProcessData(&pkt); - } - catch(con::InvalidIncomingDataException &e) { - infostream<<"Server::Receive(): " - "InvalidIncomingDataException: what()=" - <<e.what()<<std::endl; - } - catch(SerializationError &e) { - infostream<<"Server::Receive(): " - "SerializationError: what()=" - <<e.what()<<std::endl; - } - catch(ClientStateError &e) { + } catch (const con::InvalidIncomingDataException &e) { + infostream << "Server::Receive(): InvalidIncomingDataException: what()=" + << e.what() << std::endl; + } catch (const SerializationError &e) { + infostream << "Server::Receive(): SerializationError: what()=" + << e.what() << std::endl; + } catch (const ClientStateError &e) { errorstream << "ProcessData: peer=" << peer_id << e.what() << std::endl; DenyAccess_Legacy(peer_id, L"Your client sent something server didn't expect." L"Try reconnecting or updating your client"); - } - catch(con::PeerNotFoundException &e) { + } catch (const con::PeerNotFoundException &e) { // Do nothing } } @@ -2259,29 +2251,30 @@ void Server::SendBlocks(float dtime) std::sort(queue.begin(), queue.end()); m_clients.lock(); - for(u32 i=0; i<queue.size(); i++) - { + s32 max_blocks_to_send = + g_settings->getS32("max_simultaneous_block_sends_server_total"); + + for (const PrioritySortedBlockTransfer &block_to_send : queue) { //TODO: Calculate limit dynamically - if(total_sending >= g_settings->getS32 - ("max_simultaneous_block_sends_server_total")) + if (total_sending >= max_blocks_to_send) break; - PrioritySortedBlockTransfer q = queue[i]; - MapBlock *block = nullptr; try { - block = m_env->getMap().getBlockNoCreate(q.pos); - } catch(const InvalidPositionException &e) { + block = m_env->getMap().getBlockNoCreate(block_to_send.pos); + } catch (const InvalidPositionException &e) { continue; } - RemoteClient *client = m_clients.lockedGetClientNoEx(q.peer_id, CS_Active); + RemoteClient *client = m_clients.lockedGetClientNoEx(block_to_send.peer_id, + CS_Active); if (!client) continue; - SendBlockNoLock(q.peer_id, block, client->serialization_version, client->net_proto_version); + SendBlockNoLock(block_to_send.peer_id, block, client->serialization_version, + client->net_proto_version); - client->SentBlock(q.pos); + client->SentBlock(block_to_send.pos); total_sending++; } m_clients.unlock(); |