Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Platform/Aperios1.3.2/NetReceiver.h

Go to the documentation of this file.
00001 /** 
00002 * @file  Platform/Aperios1.3.2/NetReceiver.h
00003 *
00004 * receiver-class for communication over wireless lan. 
00005 *
00006 * @author <A href=mailto:robocup@m-wachter.de>Michael Wachter</A>
00007 */
00008 
00009 #ifndef _NetReceiver_H_
00010 #define _NetReceiver_H_
00011 
00012 /**
00013  * class NetReceiverBase - Template-Independent part of the NetReceiver
00014  * handles memory-acclocation
00015  */
00016 
00017 class NetReceiverBase
00018 {
00019   public:
00020     NetReceiverBase()
00021     {
00022        package = NULL;
00023        receivedNewPackage = false;
00024        size=0;
00025     }
00026 
00027     ~NetReceiverBase()
00028     { 
00029        freePackage();
00030     }
00031 
00032     virtual void onReceive() = 0;
00033 
00034     bool receivedNew()
00035     {  
00036      
00037        return (receivedNewPackage);
00038     }
00039 
00040 
00041     /**
00042      * gets memory for the NetHandler to store the data
00043      * the NetReceiver then calls the streaming-operator 
00044      * for this data.
00045      */
00046     void* getPackage(int newsize)
00047     {
00048       if (newsize>size)
00049       {
00050          cout << "NetReceiver::getPackage " << newsize << "\n" << flush;
00051          if (package) free(package);
00052          package = malloc(newsize);
00053          size=newsize;
00054          ASSERT(package);
00055       }
00056       return (package);
00057     }
00058 
00059     /**
00060      * frees the memory allocated by getPackage 
00061      */
00062     void freePackage()
00063     {
00064        free(package); 
00065        package = NULL;
00066        size=0;
00067        receivedNewPackage = false;
00068     }
00069 
00070   public:
00071      bool receivedNewPackage;
00072      void* package;
00073      int size;
00074 };
00075 
00076 
00077 /**
00078  * Class NetReciever. 
00079  * Template-Class to read a package from network and call the 
00080  * streaming-operator for it. 
00081  */
00082 
00083 template<class T> class NetReceiver : public T, public NetReceiverBase
00084 {
00085    public:
00086      virtual void onReceive()
00087      {
00088         // cout << "NetReceiver::onReceive() : received " << size << " bytes";
00089 
00090         /*unsigned char* ptr = (unsigned char*) package;
00091        
00092          printf("%02x - %02x %02x %02x %02x - %02x - %02x %02x %02x %02x \n", 
00093             ptr[0], 
00094             ptr[1],ptr[2],ptr[3],ptr[4], 
00095             ptr[5],
00096             ptr[6],ptr[7],ptr[8],ptr[9]);*/
00097        
00098         InBinaryMemory stream(package,size);
00099         T& data = *static_cast<T*>(this);
00100         stream >> data;
00101         receivedNewPackage = true;
00102      }             
00103 };
00104 
00105 #endif 

Generated on Mon Mar 20 22:00:00 2006 for GT2005 by doxygen 1.3.6