resyncreceiver.cpp

Go to the documentation of this file.
00001 #include "lugre_prefix.h"
00002 #include "lugre_net.h"
00003 #include "lugre_fifo.h"
00004 #include "object.h"
00005 #include "resyncreceiver.h"
00006 
00007 using namespace Lugre;
00008 
00009 cResyncReceiver* gpResyncReceiver = 0;
00010 
00011 cResyncReceiver::cResyncReceiver    () {}
00012 cResyncReceiver::~cResyncReceiver   () { if (this == gpResyncReceiver) gpResyncReceiver = 0; }
00013 
00016 int     cResyncReceiver::ReceiveResyncs (cUDP_ReceiveSocket& pUDPSocket,const uint32 iServerAddr) {
00017     static cFIFO    myFIFO; 
00018     uint32          iRemoteAddr;
00019     cObject*        pObj;
00020     int             res;
00021     
00022     // clear fifo just to be sure in case of errors
00023     myFIFO.Clear(); 
00024     
00025     // receive all available packets
00026     while ((res = pUDPSocket.Receive(myFIFO,iRemoteAddr)) > 0) {
00027         if (iRemoteAddr == iServerAddr) {
00028             if (myFIFO.size() >= kResyncMessageLen) {
00029                 uint32 iObjID = myFIFO.PeekUint32(0);
00030                 pObj = mlObjects[iObjID];
00031                 //printf("cResyncReceiver::ReceiveResyncs objid=%d obj=0x%08x\n",iObjID,(int)pObj);
00032                 if (pObj) pObj->LoadResyncData(myFIFO); else cObject::SkipResyncData(myFIFO);
00033             } else {
00034                 // todo : protocol version mismatch ? broken message ?
00035             }
00036         } else {
00037             // todo : report hacking attempt to server ?
00038         }
00039         myFIFO.Clear();
00040     }
00041     return res;
00042 }
00043 
00044 void    cResyncReceiver::ReceiveResyncsFromFIFO (cFIFO& pFIFO) {
00045     cObject*        pObj;
00046     while (pFIFO.size() >= kResyncMessageLen) {
00047         uint32 iObjID = pFIFO.PeekUint32(0);
00048         pObj = mlObjects[iObjID];
00049         //printf("cResyncReceiver::ReceiveResyncs objid=%d obj=0x%08x\n",iObjID,(int)pObj);
00050         if (pObj) pObj->LoadResyncData(pFIFO); else cObject::SkipResyncData(pFIFO);
00051     }
00052 }

Generated on Wed May 23 06:00:15 2012 for cpp by  doxygen 1.5.6