00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef _NetReceiver_H_
00010 #define _NetReceiver_H_
00011
00012
00013
00014
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
00043
00044
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
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
00079
00080
00081
00082
00083 template<class T> class NetReceiver : public T, public NetReceiverBase
00084 {
00085 public:
00086 virtual void onReceive()
00087 {
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098 InBinaryMemory stream(package,size);
00099 T& data = *static_cast<T*>(this);
00100 stream >> data;
00101 receivedNewPackage = true;
00102 }
00103 };
00104
00105 #endif