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

ReplicaManager2.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 #include "NativeFeatureIncludes.h"
00009 #if _RAKNET_SUPPORT_ReplicaManager2==1
00010 
00011 #ifndef __REPLICA_MANAGER_2_H
00012 #define __REPLICA_MANAGER_2_H
00013 
00014 #include "Export.h"
00015 #include "RakNetTypes.h"
00016 #include "DS_Map.h"
00017 #include "PluginInterface2.h"
00018 #include "NetworkIDObject.h"
00019 #include "PacketPriority.h"
00020 #include "GetTime.h"
00021 #include "BitStream.h"
00022 #include "DS_Queue.h"
00023 
00024 namespace RakNet
00025 {
00026 class BitStream;
00027 class Replica2;
00028 class Connection_RM2;
00029 class Connection_RM2Factory;
00030 
00035 
00038 typedef int SerializationType;
00039 enum
00040 {
00042         SEND_SERIALIZATION_GENERIC_TO_SYSTEM,
00044         BROADCAST_SERIALIZATION_GENERIC_TO_SYSTEM,
00046         SEND_SERIALIZATION_CONSTRUCTION_TO_SYSTEM,
00048         BROADCAST_SERIALIZATION_CONSTRUCTION_TO_SYSTEM,
00050         SEND_AUTO_SERIALIZE_TO_SYSTEM,
00052         BROADCAST_AUTO_SERIALIZE_TO_SYSTEM,
00054         RELAY_SERIALIZATION_TO_SYSTEMS,
00055 
00057         SEND_CONSTRUCTION_SERIALIZATION_AUTO_INITIAL_DOWNLOAD_TO_SYSTEM,
00058         // Automatically sent message indicating if the replica is visible or not to a new connection
00059         SEND_VISIBILITY_AUTO_INITIAL_DOWNLOAD_TO_SYSTEM,
00061         SEND_DATA_SERIALIZATION_AUTO_INITIAL_DOWNLOAD_TO_SYSTEM,
00062 
00064         SEND_DESTRUCTION_GENERIC_TO_SYSTEM,
00066         SEND_DESTRUCTION_VISIBILITY_RECALCULATION_TO_SYSTEM,
00068         BROADCAST_DESTRUCTION_GENERIC_TO_SYSTEM,
00070         RELAY_DESTRUCTION_TO_SYSTEMS,
00071 
00073         SEND_CONSTRUCTION_GENERIC_TO_SYSTEM,
00075         SEND_CONSTRUCTION_VISIBILITY_RECALCULATION_TO_SYSTEM,
00077         BROADCAST_CONSTRUCTION_GENERIC_TO_SYSTEM,
00079         SEND_CONSTRUCTION_REQUEST_TO_SERVER,
00081         BROADCAST_CONSTRUCTION_REQUEST_ACCEPTED_TO_SYSTEM,
00083         SEND_CONSTRUCTION_REPLY_ACCEPTED_TO_CLIENT,
00085         SEND_CONSTRUCTION_REPLY_DENIED_TO_CLIENT,
00086 
00088         SEND_VISIBILITY_TRUE_TO_SYSTEM,
00090         BROADCAST_VISIBILITY_TRUE_TO_SYSTEM,
00092         SEND_VISIBILITY_FALSE_TO_SYSTEM,
00094         BROADCAST_VISIBILITY_FALSE_TO_SYSTEM,
00096         RELAY_VISIBILITY_TRUE_TO_SYSTEMS,
00098         RELAY_VISIBILITY_FALSE_TO_SYSTEMS,
00099 
00101         AUTOSERIALIZE_RESYNCH_ONLY,
00103         AUTOSERIALIZE_DEFAULT,
00104 
00106         UNDEFINED_REASON,
00107 };
00108 
00110 
00130 class RAK_DLL_EXPORT ReplicaManager2 : public PluginInterface2
00131 {
00132 public:
00133         // Constructor
00134         ReplicaManager2();
00135 
00136         // Destructor
00137         virtual ~ReplicaManager2();
00138 
00141         void SetConnectionFactory(Connection_RM2Factory *factory);
00142 
00144         void SetDefaultOrderingChannel(char def);
00145 
00147         void SetDefaultPacketPriority(PacketPriority def);
00148 
00150         void SetDefaultPacketReliability(PacketReliability def);
00151 
00156         void SetAutoUpdateScope(bool construction, bool visibility);
00157 
00161         void SetAutoAddNewConnections(bool autoAdd);
00162 
00167         bool AddNewConnection(SystemAddress systemAddress);
00168 
00172         bool RemoveConnection(SystemAddress systemAddress);
00173 
00177         bool HasConnection(SystemAddress systemAddress);
00178 
00183         void SetDoReplicaAutoSerializeUpdate(bool autoUpdate);
00184 
00202         void SendConstruction(Replica2 *replica, BitStream *replicaData, SystemAddress recipient, RakNetTime timestamp, bool sendMessage,
00203                 DataStructures::OrderedList<SystemAddress,SystemAddress> &exclusionList,
00204                 unsigned char localClientId, SerializationType type=SEND_CONSTRUCTION_GENERIC_TO_SYSTEM, 
00205                 PacketPriority priority=NUMBER_OF_PRIORITIES, PacketReliability reliability=NUMBER_OF_RELIABILITIES, char orderingChannel=-1);
00206 
00223         void SendDestruction(Replica2 *replica, BitStream *replicaData, SystemAddress recipient, RakNetTime timestamp, bool sendMessage,
00224                 DataStructures::OrderedList<SystemAddress,SystemAddress> &exclusionList,
00225                 SerializationType type=SEND_DESTRUCTION_GENERIC_TO_SYSTEM,
00226                 PacketPriority priority=NUMBER_OF_PRIORITIES, PacketReliability reliability=NUMBER_OF_RELIABILITIES, char orderingChannel=-1);
00227 
00243         void SendSerialize(Replica2 *replica, BitStream *replicaData, SystemAddress recipient, RakNetTime timestamp,
00244                 DataStructures::OrderedList<SystemAddress,SystemAddress> &exclusionList,
00245                 SerializationType type=SEND_SERIALIZATION_GENERIC_TO_SYSTEM, 
00246                 PacketPriority priority=NUMBER_OF_PRIORITIES, PacketReliability reliability=NUMBER_OF_RELIABILITIES, char orderingChannel=-1);
00247 
00264         void SendVisibility(Replica2 *replica, BitStream *replicaData, SystemAddress recipient, RakNetTime timestamp,
00265                 DataStructures::OrderedList<SystemAddress,SystemAddress> &exclusionList,
00266                 SerializationType type=SEND_VISIBILITY_TRUE_TO_SYSTEM, 
00267                 PacketPriority priority=NUMBER_OF_PRIORITIES, PacketReliability reliability=NUMBER_OF_RELIABILITIES, char orderingChannel=-1);
00268 
00273         unsigned GetReplicaCount(void) const;
00274 
00279         Replica2 *GetReplicaAtIndex(unsigned index);
00280 
00285         unsigned GetConnectionCount(void) const;
00286 
00290         Connection_RM2* GetConnectionAtIndex(unsigned index) const;
00291 
00295         Connection_RM2* GetConnectionBySystemAddress(SystemAddress systemAddress) const;
00296 
00300         unsigned int GetConnectionIndexBySystemAddress(SystemAddress systemAddress) const;
00301 
00305         void RecalculateVisibility(Replica2 *replica);
00306 
00308         static int Replica2ObjectComp( RakNet::Replica2 * const &key, RakNet::Replica2 * const &data );
00310         static int Replica2CompByNetworkID( const NetworkID &key, RakNet::Replica2 * const &data );
00312         static int Connection_RM2CompBySystemAddress( const SystemAddress &key, RakNet::Connection_RM2 * const &data );
00313 
00317         void GetConnectionsWithReplicaConstructed(Replica2 *replica, DataStructures::OrderedList<SystemAddress, Connection_RM2*, ReplicaManager2::Connection_RM2CompBySystemAddress> &output);
00318 
00322         void GetConnectionsWithSerializeVisibility(Replica2 *replica, DataStructures::OrderedList<SystemAddress, Connection_RM2*, ReplicaManager2::Connection_RM2CompBySystemAddress> &output);
00323 
00326         RakPeerInterface *GetRakPeer(void) const;
00327 
00330         void Reference(Replica2* replica, bool *newReference);
00331 
00334         void Dereference(Replica2 *replica);
00335 
00336 protected:
00337         // Plugin interface functions
00338         void OnAttach(void);
00339         PluginReceiveResult OnReceive(Packet *packet);
00340         void OnClosedConnection(SystemAddress systemAddress, RakNetGUID rakNetGUID, PI2_LostConnectionReason lostConnectionReason );
00341         void OnRakPeerShutdown(void);
00342         void Update(void);
00343         virtual void OnNewConnection(SystemAddress systemAddress, RakNetGUID rakNetGUID, bool isIncoming);
00344 
00345         PluginReceiveResult OnDownloadComplete(unsigned char *packetData, int packetDataLength, SystemAddress sender, RakNetTime timestamp);
00346         PluginReceiveResult OnDownloadStarted(unsigned char *packetData, int packetDataLength, SystemAddress sender, RakNetTime timestamp);
00347         PluginReceiveResult OnConstruction(unsigned char *packetData, int packetDataLength, SystemAddress sender, RakNetTime timestamp);
00348         PluginReceiveResult OnDestruction(unsigned char *packetData, int packetDataLength, SystemAddress sender, RakNetTime timestamp);
00349         PluginReceiveResult OnVisibilityChange(unsigned char *packetData, int packetDataLength, SystemAddress sender, RakNetTime timestamp);
00350         PluginReceiveResult OnSerialize(unsigned char *packetData, int packetDataLength, SystemAddress sender, RakNetTime timestamp);
00351 
00352         bool AddToAndWriteExclusionList(SystemAddress recipient, RakNet::BitStream *bs, DataStructures::OrderedList<SystemAddress,SystemAddress> &exclusionList);
00353         void WriteExclusionList(RakNet::BitStream *bs, DataStructures::OrderedList<SystemAddress,SystemAddress> &exclusionList);
00354         void CullByAndAddToExclusionList(
00355                 DataStructures::OrderedList<SystemAddress, Connection_RM2*,ReplicaManager2::Connection_RM2CompBySystemAddress> &inputList,
00356                 DataStructures::OrderedList<SystemAddress, Connection_RM2*,ReplicaManager2::Connection_RM2CompBySystemAddress> &culledOutput,
00357                 DataStructures::OrderedList<SystemAddress,SystemAddress> &exclusionList);
00358         void ReadExclusionList(RakNet::BitStream *bs, DataStructures::OrderedList<SystemAddress,SystemAddress> &exclusionList);
00359 
00360         void Send(RakNet::BitStream *bs, SystemAddress recipient, PacketPriority priority, PacketReliability reliability, char orderingChannel);
00361         void Clear(void);
00362         void DownloadToNewConnection(Connection_RM2* connection, RakNetTime timestamp, PacketPriority priority, PacketReliability reliability, char orderingChannel);
00363 
00364         Connection_RM2* CreateConnectionIfDoesNotExist(SystemAddress systemAddress, bool *newConnection);
00365         Connection_RM2* AutoCreateConnection(SystemAddress systemAddress, bool *newConnection);
00366         void AddConstructionReference(Connection_RM2* connection, Replica2* replica);
00367         void AddVisibilityReference(Connection_RM2* connection, Replica2* replica);
00368         void RemoveVisibilityReference(Connection_RM2* connection, Replica2* replica);
00369         void WriteHeader(RakNet::BitStream *bs, MessageID type, RakNetTime timestamp);
00370 
00371         friend class Connection_RM2;
00372         friend class Replica2;
00373 
00374         Connection_RM2Factory *connectionFactoryInterface;
00375         bool autoUpdateConstruction, autoUpdateVisibility;
00376 
00377         char defaultOrderingChannel;
00378         PacketPriority defaultPacketPriority;
00379         PacketReliability defaultPacketReliablity;
00380         bool autoAddNewConnections;
00381         bool doReplicaAutoUpdate;
00382         RakNetTime lastUpdateTime;
00383 
00384         DataStructures::List<Replica2*> fullReplicaUnorderedList;
00385         DataStructures::OrderedList<Replica2*, Replica2*, ReplicaManager2::Replica2ObjectComp> fullReplicaOrderedList;
00386         DataStructures::OrderedList<Replica2*, Replica2*, ReplicaManager2::Replica2ObjectComp> alwaysDoConstructReplicaOrderedList;
00387         DataStructures::OrderedList<Replica2*, Replica2*, ReplicaManager2::Replica2ObjectComp> alwaysDoSerializeReplicaOrderedList;
00388         // Should only be in this list if QueryIsServer() is true
00389         DataStructures::OrderedList<Replica2*, Replica2*, ReplicaManager2::Replica2ObjectComp> variableConstructReplicaOrderedList;
00390         DataStructures::OrderedList<Replica2*, Replica2*, ReplicaManager2::Replica2ObjectComp> variableSerializeReplicaOrderedList;
00391 
00392         DataStructures::OrderedList<SystemAddress, Connection_RM2*, ReplicaManager2::Connection_RM2CompBySystemAddress> connectionList;
00393 };
00394 
00397 enum RAK_DLL_EXPORT BooleanQueryResult
00398 {
00400         BQR_ALWAYS,
00401 
00403         BQR_YES,
00404 
00406         BQR_NO,
00407 
00409         BQR_NEVER
00410 };
00411 
00414 struct RAK_DLL_EXPORT SerializationContext
00415 {
00416         SerializationContext() {}
00417         ~SerializationContext() {}
00418         SerializationContext(SerializationType st, SystemAddress relay, SystemAddress recipient, RakNetTime _timestamp) {serializationType=st; relaySourceAddress=relay; recipientAddress=recipient; timestamp=_timestamp;}
00419 
00421         SystemAddress relaySourceAddress;
00422 
00424         SystemAddress recipientAddress;
00425 
00427         RakNetTime timestamp;
00428 
00430         SerializationType serializationType;
00431 
00433         static bool IsSerializationCommand(SerializationType r);
00435         static bool IsDownloadCommand(SerializationType r);
00437         static bool IsDestructionCommand(SerializationType r);
00439         static bool IsConstructionCommand(SerializationType r);
00441         static bool IsVisibilityCommand(SerializationType r);
00443         static bool IsVisible(SerializationType r);
00444 };
00445 
00446 
00451 class RAK_DLL_EXPORT Replica2 : public NetworkIDObject
00452 {
00453 public:
00454         // Constructor
00455         Replica2();
00456 
00457         // Destructor
00458         virtual ~Replica2();
00459 
00464         void SetReplicaManager(ReplicaManager2* rm);
00465 
00468         ReplicaManager2* GetReplicaManager(void) const;
00469 
00475         virtual void SendConstruction(SystemAddress recipientAddress, SerializationType serializationType=UNDEFINED_REASON);
00476 
00481         virtual void SendDestruction(SystemAddress recipientAddress, SerializationType serializationType=UNDEFINED_REASON);
00482 
00487         virtual void SendSerialize(SystemAddress recipientAddress, SerializationType serializationType=UNDEFINED_REASON);
00488 
00493         virtual void SendVisibility(SystemAddress recipientAddress, SerializationType serializationType=UNDEFINED_REASON);
00494 
00497         virtual void BroadcastConstruction(SerializationContext *serializationContext=0);
00498 
00502         virtual void BroadcastSerialize(SerializationContext *serializationContext=0);
00503 
00507         virtual void BroadcastDestruction(SerializationContext *serializationContext=0);
00508 
00513         virtual void BroadcastVisibility(bool isVisible, SerializationContext *serializationContext=0);
00514 
00520         virtual bool SerializeConstruction(RakNet::BitStream *bitStream, SerializationContext *serializationContext)=0;
00521 
00527         virtual bool SerializeDestruction(RakNet::BitStream *bitStream, SerializationContext *serializationContext);
00528 
00534         virtual bool Serialize(RakNet::BitStream *bitStream, SerializationContext *serializationContext);
00535 
00541         virtual bool SerializeVisibility(RakNet::BitStream *bitStream, SerializationContext *serializationContext);
00542 
00549         virtual void DeserializeDestruction(RakNet::BitStream *bitStream, SerializationType serializationType, SystemAddress sender, RakNetTime timestamp);
00550 
00557         virtual void Deserialize(RakNet::BitStream *bitStream, SerializationType serializationType, SystemAddress sender, RakNetTime timestamp);
00558 
00565         virtual void DeserializeVisibility(RakNet::BitStream *bitStream, SerializationType serializationType, SystemAddress sender, RakNetTime timestamp);
00566 
00574         virtual BooleanQueryResult QueryConstruction(Connection_RM2 *connection);
00575 
00583         virtual BooleanQueryResult QueryVisibility(Connection_RM2 *connection);
00584 
00590         virtual bool QueryIsConstructionAuthority(void) const;
00591 
00597         virtual bool QueryIsDestructionAuthority(void) const;
00598 
00604         virtual bool QueryIsVisibilityAuthority(void) const;
00605 
00611         virtual bool QueryIsSerializationAuthority(void) const;
00612 
00620         virtual bool AllowRemoteConstruction(SystemAddress sender, RakNet::BitStream *replicaData, SerializationType type, RakNetTime timestamp);
00621 
00633         virtual void AddAutoSerializeTimer(RakNetTime interval, SerializationType serializationType=AUTOSERIALIZE_DEFAULT, RakNetTime countdown=(RakNetTime)-1 );
00634 
00639         virtual void ElapseAutoSerializeTimers(RakNetTime timeElapsed, bool resynchOnly);
00640 
00644         RakNetTime GetTimeToNextAutoSerialize(SerializationType serializationType=AUTOSERIALIZE_DEFAULT);
00645 
00650         virtual void BroadcastAutoSerialize(SerializationContext *serializationContext, RakNet::BitStream *serializedObject);
00651 
00654         virtual void CancelAutoSerializeTimer(SerializationType serializationType=AUTOSERIALIZE_DEFAULT);
00655 
00657         virtual void ClearAutoSerializeTimers(void);
00658 
00661         virtual void OnAutoSerializeTimerElapsed(SerializationType serializationType, RakNet::BitStream *output, RakNet::BitStream *lastOutput, RakNetTime lastAutoSerializeCountdown, bool resynchOnly);
00662 
00667         virtual void ForceElapseAllAutoserializeTimers(bool resynchOnly);
00668 
00676         virtual void OnConstructionComplete(RakNet::BitStream *replicaData, SystemAddress sender, SerializationType type, ReplicaManager2 *replicaManager, RakNetTime timestamp, NetworkID networkId, bool networkIDCollision);
00677 
00678 protected:
00679 
00680         virtual void ReceiveSerialize(SystemAddress sender, RakNet::BitStream *serializedObject, SerializationType serializationType, RakNetTime timestamp, DataStructures::OrderedList<SystemAddress,SystemAddress> &exclusionList );
00681         virtual void ReceiveDestruction(SystemAddress sender, RakNet::BitStream *serializedObject, SerializationType serializationType, RakNetTime timestamp, DataStructures::OrderedList<SystemAddress,SystemAddress> &exclusionList );
00682         virtual void DeleteOnReceiveDestruction(SystemAddress sender, RakNet::BitStream *serializedObject, SerializationType serializationType, RakNetTime timestamp, DataStructures::OrderedList<SystemAddress,SystemAddress> &exclusionList );
00683         virtual void ReceiveVisibility(SystemAddress sender, RakNet::BitStream *serializedObject, SerializationType serializationType, RakNetTime timestamp, DataStructures::OrderedList<SystemAddress,SystemAddress> &exclusionList);
00684         virtual Replica2 * ReceiveConstructionReply(SystemAddress sender, BitStream *replicaData, bool constructionAllowed);
00685         void DereferenceFromDestruction(void);
00686 
00687         friend class ReplicaManager2;
00688         friend class Connection_RM2;
00689 
00690         static unsigned char clientSharedID;
00691         static Replica2* clientPtrArray[256];
00692 
00693         bool hasClientID;
00694         unsigned char clientID;
00695         ReplicaManager2 *rm2;
00696 
00697         struct AutoSerializeEvent
00698         {
00699                 SerializationType serializationType;
00700                 RakNetTime initialCountdown;
00701                 RakNetTime remainingCountdown;
00702                 bool writeToResult1;
00703                 RakNet::BitStream lastAutoSerializeResult1;
00704                 RakNet::BitStream lastAutoSerializeResult2;
00705         };
00706 
00707         DataStructures::Map<SerializationType, AutoSerializeEvent*> autoSerializeTimers;
00708 
00709 };
00710 
00713 class RAK_DLL_EXPORT Connection_RM2Factory
00714 {
00715 public:
00716         Connection_RM2Factory() {}
00717         virtual ~Connection_RM2Factory() {}
00718         virtual Connection_RM2* AllocConnection(void) const=0;
00719         virtual void DeallocConnection(Connection_RM2* s) const=0;
00720 };
00721 
00727 class RAK_DLL_EXPORT Connection_RM2
00728 {
00729 public:
00730         // Constructor
00731         Connection_RM2();
00732 
00733         // Destructor
00734         virtual ~Connection_RM2();
00735 
00747         virtual Replica2* Construct(RakNet::BitStream *replicaData, SystemAddress sender, SerializationType type, ReplicaManager2 *replicaManager, RakNetTime timestamp, NetworkID networkId, bool networkIDCollision)=0;
00748 
00755         virtual void SortInitialDownload( const DataStructures::List<Replica2*> &orderedDownloadList, DataStructures::List<Replica2*> &initialDownloadList );
00756 
00757 
00763         virtual void SerializeDownloadStarted(RakNet::BitStream *objectData, ReplicaManager2 *replicaManager, SerializationContext *serializationContext);
00764 
00770         virtual void SerializeDownloadComplete(RakNet::BitStream *objectData, ReplicaManager2 *replicaManager, SerializationContext *serializationContext);
00771 
00780         virtual void DeserializeDownloadStarted(RakNet::BitStream *objectData, SystemAddress sender, ReplicaManager2 *replicaManager, RakNetTime timestamp, SerializationType serializationType);
00781 
00790         virtual void DeserializeDownloadComplete(RakNet::BitStream *objectData, SystemAddress sender, ReplicaManager2 *replicaManager, RakNetTime timestamp, SerializationType serializationType);
00791 
00799         virtual void SetConstructionByList(DataStructures::OrderedList<Replica2*, Replica2*, ReplicaManager2::Replica2ObjectComp> &currentVisibility, ReplicaManager2 *replicaManager);
00800 
00808         virtual void SetVisibilityByList(DataStructures::OrderedList<Replica2*, Replica2*, ReplicaManager2::Replica2ObjectComp> &currentVisibility, ReplicaManager2 *replicaManager);
00809 
00814         virtual void SetConstructionByReplicaQuery(ReplicaManager2 *replicaManager);
00815 
00820         virtual void SetVisibilityByReplicaQuery(ReplicaManager2 *replicaManager);
00821 
00823         void SetSystemAddress(SystemAddress sa);
00824 
00826         SystemAddress GetSystemAddress(void) const;
00827 
00829         void SetGuid(RakNetGUID guid);
00830 
00832         RakNetGUID GetGuid(void) const;
00833         
00834 protected:
00835         void Deref(Replica2* replica);
00836 
00837         void CalculateListExclusivity(
00838                 const DataStructures::OrderedList<Replica2*, Replica2*, ReplicaManager2::Replica2ObjectComp> &listOne,
00839                 const DataStructures::OrderedList<Replica2*, Replica2*, ReplicaManager2::Replica2ObjectComp> &listTwo,
00840                 DataStructures::OrderedList<Replica2*, Replica2*, ReplicaManager2::Replica2ObjectComp> &exclusiveToListOne, 
00841                 DataStructures::OrderedList<Replica2*, Replica2*, ReplicaManager2::Replica2ObjectComp> &exclusiveToListTwo
00842                 ) const;
00843 
00844         virtual Replica2 * ReceiveConstruct(RakNet::BitStream *replicaData, NetworkID networkId, SystemAddress sender, unsigned char localClientId, SerializationType type,
00845                 ReplicaManager2 *replicaManager, RakNetTime timestamp, DataStructures::OrderedList<SystemAddress,SystemAddress> &exclusionList);
00846 
00847         friend class ReplicaManager2;
00848 
00849         // Address of this participant
00850         SystemAddress systemAddress;
00851         RakNetGUID rakNetGuid;
00852 
00853         DataStructures::OrderedList<Replica2*, Replica2*, ReplicaManager2::Replica2ObjectComp> lastConstructionList;
00854         DataStructures::OrderedList<Replica2*, Replica2*, ReplicaManager2::Replica2ObjectComp> lastSerializationList;
00855 };
00856 
00857 }
00858 
00859 #endif
00860 
00861 #endif // _RAKNET_SUPPORT_*

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