Shadowrun: Awakened 29 September 2011 - Build 871
UDPProxyCoordinator.h
Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 #include "NativeFeatureIncludes.h"
00015 #if _RAKNET_SUPPORT_UDPProxyCoordinator==1 && _RAKNET_SUPPORT_UDPForwarder==1
00016 
00017 #ifndef __UDP_PROXY_COORDINATOR_H
00018 #define __UDP_PROXY_COORDINATOR_H
00019 
00020 #include "Export.h"
00021 #include "DS_Multilist.h"
00022 #include "RakNetTypes.h"
00023 #include "PluginInterface2.h"
00024 #include "RakString.h"
00025 #include "BitStream.h"
00026 
00027 namespace RakNet
00028 {
00034     class RAK_DLL_EXPORT UDPProxyCoordinator : public PluginInterface2
00035     {
00036     public:
00037         // GetInstance() and DestroyInstance(instance*)
00038         STATIC_FACTORY_DECLARATIONS(UDPProxyCoordinator)
00039 
00040         UDPProxyCoordinator();
00041         virtual ~UDPProxyCoordinator();
00042 
00046         void SetRemoteLoginPassword(RakNet::RakString password);
00047 
00049         virtual void Update(void);
00050         virtual PluginReceiveResult OnReceive(Packet *packet);
00051         virtual void OnClosedConnection(const SystemAddress &systemAddress, RakNetGUID rakNetGUID, PI2_LostConnectionReason lostConnectionReason );
00052 
00053         struct SenderAndTargetAddress
00054         {
00055             SystemAddress senderClientAddress;
00056             SystemAddress targetClientAddress;
00057         };
00058 
00059         struct ServerWithPing
00060         {
00061             unsigned short ping;
00062             SystemAddress serverAddress;
00063         };
00064 
00065         struct ForwardingRequest
00066         {
00067             RakNet::TimeMS timeoutOnNoDataMS;
00068             RakNet::TimeMS timeoutAfterSuccess;
00069             SenderAndTargetAddress sata;
00070             SystemAddress requestingAddress; // Which system originally sent the network message to start forwarding
00071             SystemAddress currentlyAttemptedServerAddress;
00072             DataStructures::Multilist<ML_QUEUE, SystemAddress> remainingServersToTry;
00073             RakNet::BitStream serverSelectionBitstream;
00074 
00075             DataStructures::Multilist<ML_STACK, ServerWithPing, unsigned short> sourceServerPings, targetServerPings;
00076             RakNet::TimeMS timeRequestedPings;
00077             // Order based on sourceServerPings and targetServerPings
00078             void OrderRemainingServersToTry(void);
00079         
00080         };
00081 
00082     protected:
00083         void OnForwardingRequestFromClientToCoordinator(Packet *packet);
00084         void OnLoginRequestFromServerToCoordinator(Packet *packet);
00085         void OnForwardingReplyFromServerToCoordinator(Packet *packet);
00086         void OnPingServersReplyFromClientToCoordinator(Packet *packet);
00087         void TryNextServer(SenderAndTargetAddress sata, ForwardingRequest *fw);
00088         void SendAllBusy(SystemAddress senderClientAddress, SystemAddress targetClientAddress, SystemAddress requestingAddress);
00089         void Clear(void);
00090 
00091         void SendForwardingRequest(SystemAddress sourceAddress, SystemAddress targetAddress, SystemAddress serverAddress, RakNet::TimeMS timeoutOnNoDataMS);
00092 
00093         // Logged in servers
00094         DataStructures::Multilist<ML_UNORDERED_LIST, SystemAddress> serverList;
00095 
00096         // Forwarding requests in progress
00097         DataStructures::Multilist<ML_ORDERED_LIST, ForwardingRequest*, SenderAndTargetAddress> forwardingRequestList;
00098 
00099         RakNet::RakString remoteLoginPassword;
00100 
00101     };
00102 
00103 } // End namespace
00104 
00105 #endif
00106 
00107 #endif // _RAKNET_SUPPORT_*

Copyright © 2007-2010 by The Shadowrun: Awakened Team. This work is licensed under the GNU Lesser General Public License 3.

GNU Lesser General Public License 3 Sourceforge.net