diff options
-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(); |