Skip to content

Commit

Permalink
Bulk send recieved blocks reply
Browse files Browse the repository at this point in the history
  • Loading branch information
proller committed Dec 14, 2013
1 parent f86ef3a commit 123afc3
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions src/client.cpp
Expand Up @@ -699,6 +699,7 @@ void Client::step(float dtime)
<<std::endl;*/

int num_processed_meshes = 0;
UniqueQueue<v3s16> got_blocks;
while(!m_mesh_update_thread.m_queue_out.empty())
{
num_processed_meshes++;
Expand All @@ -722,6 +723,13 @@ void Client::step(float dtime)
}
if(r.ack_block_to_server)
{
got_blocks.push_back(r.p);
if (got_blocks.size() >= 255)
break;
}
}
u32 got_blocks_size = got_blocks.size();
if (got_blocks_size) {
/*infostream<<"Client: ACK block ("<<r.p.X<<","<<r.p.Y
<<","<<r.p.Z<<")"<<std::endl;*/
/*
Expand All @@ -735,15 +743,17 @@ void Client::step(float dtime)
[3+6*i] u16 vrange
...
*/
u32 replysize = 2+1+6+2;
u32 replysize = 2+1+(6*got_blocks_size)+2;
SharedBuffer<u8> reply(replysize);
writeU16(&reply[0], TOSERVER_GOTBLOCKS);
reply[2] = 1;
writeV3S16(&reply[3], r.p);
writeU16(&reply[2+1+(6*reply[2])], (int)m_env.getClientMap().getControl().wanted_range);
reply[2] = got_blocks_size;
u32 i=0;
while (got_blocks.size())
writeV3S16(&reply[3+(6*i++)], got_blocks.pop_front());
writeU16(&reply[2+1+(6*got_blocks_size)], (int)m_env.getClientMap().getControl().wanted_range);
// Send as reliable
m_con.Send(PEER_ID_SERVER, 1, reply, true);
}

}
if(num_processed_meshes > 0)
g_profiler->graphAdd("num_processed_meshes", num_processed_meshes);
Expand Down

0 comments on commit 123afc3

Please sign in to comment.