• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

SystemAddressList.cpp

Go to the documentation of this file.
00001 #include "SystemAddressList.h"
00002 #include "Rand.h"
00003 #include "RakAssert.h"
00004 #include "BitStream.h"
00005 #include <stdio.h>
00006 
00007 SystemAddressList::SystemAddressList()
00008 {
00009 
00010 }
00011 SystemAddressList::SystemAddressList(SystemAddress system)
00012 {
00013         systemList.Insert(system, __FILE__, __LINE__);
00014 }
00015 void SystemAddressList::AddSystem(SystemAddress system)
00016 {
00017         systemList.Insert(system, __FILE__, __LINE__);
00018 }
00019 void SystemAddressList::RandomizeOrder(void)
00020 {
00021         unsigned index, size, randIndex;
00022         SystemAddress temp;
00023         size = systemList.Size();
00024         for (index=0; index < size; index++)
00025         {
00026                 randIndex=index + (randomMT() % (size-index));
00027                 if (randIndex!=index)
00028                 {
00029                         temp=systemList[index];
00030                         systemList[index]=systemList[randIndex];
00031                         systemList[randIndex]=temp;
00032                 }
00033         }
00034 }
00035 void SystemAddressList::Serialize(RakNet::BitStream *out)
00036 {
00037         out->Write((unsigned short) systemList.Size());
00038         unsigned index;
00039         for (index=0; index < systemList.Size(); index++)
00040                 out->Write(systemList[index]);
00041 }
00042 bool SystemAddressList::Deserialize(RakNet::BitStream *in)
00043 {
00044         unsigned short systemListSize;
00045         SystemAddress systemAddress;
00046         unsigned index;
00047         if (in->Read(systemListSize)==false)
00048         {
00049                 RakAssert(0);
00050                 return false;
00051         }
00052         systemList.Clear(false, __FILE__, __LINE__);
00053         for (index=0; index < systemListSize; index++)
00054         {
00055                 if (in->Read(systemAddress)==false)
00056                 {
00057                         RakAssert(0);
00058                         systemList.Clear(false, __FILE__, __LINE__);
00059                         return false;
00060                 }
00061                 systemList.Insert(systemAddress, __FILE__, __LINE__);
00062 
00063         }
00064         return true;
00065 }
00066 void SystemAddressList::RemoveSystem(SystemAddress system)
00067 {
00068         unsigned i;
00069         for (i=0; i < systemList.Size(); i++)
00070         {
00071                 if (systemList[i]==system)
00072                 {
00073                         systemList.RemoveAtIndex(i);
00074                         return;
00075                 }
00076         }
00077 }
00078 DataStructures::List<SystemAddress> * SystemAddressList::GetList(void)
00079 {
00080         return &systemList;
00081 }
00082 bool SystemAddressList::Save(const char *filename)
00083 {
00084         RakNet::BitStream temp;
00085         Serialize(&temp);
00086         FILE *fp = fopen(filename, "wb");
00087         if (fp)
00088         {
00089                 fwrite(temp.GetData(), (size_t) temp.GetNumberOfBytesUsed(), 1, fp);
00090                 fclose(fp);
00091                 return true;
00092         }
00093         return false;
00094 }
00095 bool SystemAddressList::Load(const char *filename)
00096 {
00097         FILE *fp = NULL;
00098         unsigned long fileSize;
00099 
00100         if ( ( fp = fopen( filename, "rb" ) ) == 0 )
00101                 return false;
00102 
00103         fseek( fp, 0, SEEK_END );
00104         fileSize = ftell( fp );
00105         fseek( fp, 0, SEEK_SET );
00106         if (fileSize==0)
00107         {
00108                 fclose(fp);
00109                 return false;
00110         }
00111         unsigned char *filedata = (unsigned char*) rakMalloc_Ex( fileSize, __FILE__, __LINE__ );
00112         fread(filedata, fileSize, 1, fp);
00113         fclose(fp);
00114 
00115         RakNet::BitStream bs(filedata, fileSize, false);
00116         Deserialize(&bs);
00117         rakFree_Ex(filedata, __FILE__, __LINE__ );
00118         return true;
00119 }
00120 unsigned SystemAddressList::Size(void) const
00121 {
00122         return systemList.Size();
00123 }
00124 SystemAddress& SystemAddressList::operator[] ( const unsigned int position ) const
00125 {
00126         return systemList[position];
00127 }
00128 void SystemAddressList::Clear(void)
00129 {
00130         systemList.Clear(false, __FILE__, __LINE__);
00131 }

Generated on Thu Sep 30 2010 01:27:28 for RakNet by  doxygen 1.7.1