Changeset f9cb9fb in network-game for common


Ignore:
Timestamp:
Aug 3, 2013, 12:52:15 AM (11 years ago)
Author:
dportnoy <dmp1488@…>
Branches:
master
Children:
753fa8a
Parents:
8271c78
Message:

The ackedMessages list in MessageProcessor now stores ack records based on sender address and message id so that messages with the same id, but from different senders are distinguishable

Location:
common
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • common/MessageProcessor.cpp

    r8271c78 rf9cb9fb  
    5050   }else {
    5151      bool isDuplicate = false;
     52      map<unsigned int, unsigned long long>& ackedPlayerMessages = ackedMessages[source->sin_addr.s_addr];
    5253
    53       if (ackedMessages.find(msg->id) != ackedMessages.end()) {
     54      if (ackedPlayerMessages.find(msg->id) != ackedPlayerMessages.end()) {
    5455         isDuplicate = true;
    5556         cout << "Got duplicate of type " << msg->type << endl;
     57         if (outputLog)
     58            (*outputLog) << "Received duplicate (id " << msg->id << ") of type " << MessageContainer::getMsgTypeString(msg->type) << endl;
    5659      }else {
    5760         cout << "Got message of type " << msg->type << endl;
     
    6063      }
    6164
    62       ackedMessages[msg->id] = MessageContainer(*msg, *source);
    63       ackedMessages[msg->id].setAcked(true);
    64       ackedMessages[msg->id].setTimeAcked(getCurrentMillis());
     65      ackedPlayerMessages[msg->id] = getCurrentMillis();
    6566
    6667      NETWORK_MSG ack;
     
    116117   }
    117118
    118    /*
    119    map<unsigned int, unsigned long long>::iterator it3 = ackedMessages.begin();
     119   map<unsigned long, map<unsigned int, unsigned long long> >::iterator it3 = ackedMessages.begin();
     120   map<unsigned int, unsigned long long>::iterator it4;
    120121
     122   // somehow want to delete the inner map once that player logs out
    121123   while (it3 != ackedMessages.end()) {
    122       if ((getCurrentMillis() - it3->second) > 500)
    123          ackedMessages.erase(it3++);
    124       else
    125          it3++;
     124      it4 = it3->second.begin();
     125      while (it4 != it3->second.end()) {
     126         if ((getCurrentMillis() - it4->second) > 500)
     127            it3->second.erase(it4++);
     128         else
     129            it4++;
     130      }
     131      it3++;
    126132   }
    127    */
    128133}
    129134
     
    132137}
    133138
    134 map<unsigned int, MessageContainer>& MessageProcessor::getAckedMessages() {
     139map<unsigned long, map<unsigned int, unsigned long long> >& MessageProcessor::getAckedMessages() {
    135140   return this->ackedMessages;
    136141}
  • common/MessageProcessor.h

    r8271c78 rf9cb9fb  
    1515   map<unsigned int, map<unsigned long, MessageContainer> > sentMessages;
    1616
    17    // map from message ids to the time each mesage was acked
    18    map<unsigned int, MessageContainer> ackedMessages;
     17   // map from player address to map from message id to time accked
     18   map<unsigned long, map<unsigned int, unsigned long long> > ackedMessages;
    1919
    2020   unsigned long pid;
     
    3030
    3131   map<unsigned int, map<unsigned long, MessageContainer> >& getSentMessages();
    32    map<unsigned int, MessageContainer>& getAckedMessages();
     32   map<unsigned long, map<unsigned int, unsigned long long> >& getAckedMessages();
    3333};
    3434
Note: See TracChangeset for help on using the changeset viewer.