![]() |
Shadowrun: Awakened 29 September 2011 - Build 871
|
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.