queued_commands must be a std::deque. RunCommandQueues needs to push packet on front, not back

This commit is contained in:
Loic Blot 2015-03-29 10:49:43 +02:00
parent 3444dec2db
commit dfe00abc5a
2 changed files with 9 additions and 13 deletions

@ -1063,14 +1063,14 @@ void UDPPeer::PutReliableSendCommand(ConnectionCommand &c,
<<" processing reliable command for peer id: " << c.peer_id <<" processing reliable command for peer id: " << c.peer_id
<<" data size: " << c.data.getSize() << std::endl); <<" data size: " << c.data.getSize() << std::endl);
if (!processReliableSendCommand(c,max_packet_size)) { if (!processReliableSendCommand(c,max_packet_size)) {
channels[c.channelnum].queued_commands.push(c); channels[c.channelnum].queued_commands.push_back(c);
} }
} }
else { else {
LOG(dout_con<<m_connection->getDesc() LOG(dout_con<<m_connection->getDesc()
<<" Queueing reliable command for peer id: " << c.peer_id <<" Queueing reliable command for peer id: " << c.peer_id
<<" data size: " << c.data.getSize() <<std::endl); <<" data size: " << c.data.getSize() <<std::endl);
channels[c.channelnum].queued_commands.push(c); channels[c.channelnum].queued_commands.push_back(c);
} }
} }
@ -1182,17 +1182,15 @@ void UDPPeer::RunCommandQueues(
unsigned int maxtransfer) unsigned int maxtransfer)
{ {
for (unsigned int i = 0; i < CHANNEL_COUNT; i++) for (unsigned int i = 0; i < CHANNEL_COUNT; i++) {
{
unsigned int commands_processed = 0; unsigned int commands_processed = 0;
if ((channels[i].queued_commands.size() > 0) && if ((channels[i].queued_commands.size() > 0) &&
(channels[i].queued_reliables.size() < maxtransfer) && (channels[i].queued_reliables.size() < maxtransfer) &&
(commands_processed < maxcommands)) (commands_processed < maxcommands)) {
{
try { try {
ConnectionCommand c = channels[i].queued_commands.front(); ConnectionCommand c = channels[i].queued_commands.front();
channels[i].queued_commands.pop(); channels[i].queued_commands.pop_front();
LOG(dout_con<<m_connection->getDesc() LOG(dout_con<<m_connection->getDesc()
<<" processing queued reliable command "<<std::endl); <<" processing queued reliable command "<<std::endl);
if (!processReliableSendCommand(c,max_packet_size)) { if (!processReliableSendCommand(c,max_packet_size)) {
@ -1200,7 +1198,7 @@ void UDPPeer::RunCommandQueues(
<< " Failed to queue packets for peer_id: " << c.peer_id << " Failed to queue packets for peer_id: " << c.peer_id
<< ", delaying sending of " << c.data.getSize() << ", delaying sending of " << c.data.getSize()
<< " bytes" << std::endl); << " bytes" << std::endl);
channels[i].queued_commands.push(c); channels[i].queued_commands.push_front(c);
} }
} }
catch (ItemNotFoundException &e) { catch (ItemNotFoundException &e) {
@ -1328,12 +1326,10 @@ bool ConnectionSendThread::packetsQueued()
if (dynamic_cast<UDPPeer*>(&peer) == 0) if (dynamic_cast<UDPPeer*>(&peer) == 0)
continue; continue;
for(u16 i=0; i<CHANNEL_COUNT; i++) for(u16 i=0; i < CHANNEL_COUNT; i++) {
{
Channel *channel = &(dynamic_cast<UDPPeer*>(&peer))->channels[i]; Channel *channel = &(dynamic_cast<UDPPeer*>(&peer))->channels[i];
if (channel->queued_commands.size() > 0) if (channel->queued_commands.size() > 0) {
{
return true; return true;
} }
} }

@ -501,7 +501,7 @@ public:
std::queue<BufferedPacket> queued_reliables; std::queue<BufferedPacket> queued_reliables;
//queue commands prior splitting to packets //queue commands prior splitting to packets
std::queue<ConnectionCommand> queued_commands; std::deque<ConnectionCommand> queued_commands;
IncomingSplitBuffer incoming_splits; IncomingSplitBuffer incoming_splits;