![]() |
Shadowrun: Awakened 29 September 2011 - Build 871
|
00001 00002 00003 00004 00005 00006 00007 00008 #include "NativeFeatureIncludes.h" 00009 #if _RAKNET_SUPPORT_RPC4Plugin==1 00010 00011 #ifndef __RPC_4_PLUGIN_H 00012 #define __RPC_4_PLUGIN_H 00013 00014 #include "PluginInterface2.h" 00015 #include "PacketPriority.h" 00016 #include "RakNetTypes.h" 00017 #include "BitStream.h" 00018 #include "RakString.h" 00019 #include "NetworkIDObject.h" 00020 #include "DS_Hash.h" 00021 #include "DS_OrderedList.h" 00022 00023 #ifdef _MSC_VER 00024 #pragma warning( push ) 00025 #endif 00026 00031 00032 namespace RakNet 00033 { 00035 class RakPeerInterface; 00036 class NetworkIDManager; 00037 00042 enum RPCErrorCodes 00043 { 00045 RPC_ERROR_FUNCTION_NOT_REGISTERED, 00046 }; 00047 00049 class RAK_DLL_EXPORT RPC4GlobalRegistration 00050 { 00051 public: 00053 RPC4GlobalRegistration(const char* uniqueID, void ( *functionPointer ) ( RakNet::BitStream *userData, Packet *packet )); 00054 00056 RPC4GlobalRegistration(const char* uniqueID, void ( *functionPointer ) ( RakNet::BitStream *userData, Packet *packet ), int callPriority); 00057 00059 RPC4GlobalRegistration(const char* uniqueID, void ( *functionPointer ) ( RakNet::BitStream *userData, RakNet::BitStream *returnData, Packet *packet )); 00060 00062 RPC4GlobalRegistration(const char* uniqueID, MessageID messageId); 00063 }; 00064 00070 class RAK_DLL_EXPORT RPC4 : public PluginInterface2 00071 { 00072 public: 00073 // GetInstance() and DestroyInstance(instance*) 00074 STATIC_FACTORY_DECLARATIONS(RPC4) 00075 00076 // Constructor 00077 RPC4(); 00078 00079 // Destructor 00080 virtual ~RPC4(); 00081 00090 bool RegisterFunction(const char* uniqueID, void ( *functionPointer ) ( RakNet::BitStream *userData, Packet *packet )); 00091 00097 void RegisterSlot(const char *sharedIdentifier, void ( *functionPointer ) ( RakNet::BitStream *userData, Packet *packet ), int callPriority); 00098 00100 bool RegisterBlockingFunction(const char* uniqueID, void ( *functionPointer ) ( RakNet::BitStream *userData, RakNet::BitStream *returnData, Packet *packet )); 00101 00107 void RegisterLocalCallback(const char* uniqueID, MessageID messageId); 00108 00112 bool UnregisterFunction(const char* uniqueID); 00113 00115 bool UnregisterBlockingFunction(const char* uniqueID); 00116 00121 bool UnregisterLocalCallback(const char* uniqueID, MessageID messageId); 00122 00125 bool UnregisterSlot(const char* sharedIdentifier); 00126 00131 void CallLoopback( const char* uniqueID, RakNet::BitStream * bitStream ); 00132 00142 void Call( const char* uniqueID, RakNet::BitStream * bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, const AddressOrGUID systemIdentifier, bool broadcast ); 00143 00155 bool CallBlocking( const char* uniqueID, RakNet::BitStream * bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, const AddressOrGUID systemIdentifier, RakNet::BitStream *returnData ); 00156 00166 void Signal(const char *sharedIdentifier, RakNet::BitStream * bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, const AddressOrGUID systemIdentifier, bool broadcast, bool invokeLocal); 00167 00169 void InterruptSignal(void); 00170 00172 struct LocalCallback 00173 { 00174 MessageID messageId; 00175 DataStructures::OrderedList<RakNet::RakString,RakNet::RakString> functions; 00176 }; 00177 static int LocalCallbackComp(const MessageID &key, LocalCallback* const &data ); 00178 00180 // Callable object, along with priority to call relative to other objects 00181 struct LocalSlotObject 00182 { 00183 LocalSlotObject() {} 00184 LocalSlotObject(unsigned int _registrationCount,int _callPriority, void ( *_functionPointer ) ( RakNet::BitStream *userData, Packet *packet )) 00185 {registrationCount=_registrationCount;callPriority=_callPriority;functionPointer=_functionPointer;} 00186 ~LocalSlotObject() {} 00187 00188 // Used so slots are called in the order they are registered 00189 unsigned int registrationCount; 00190 int callPriority; 00191 void ( *functionPointer ) ( RakNet::BitStream *userData, Packet *packet ); 00192 }; 00193 00194 static int LocalSlotObjectComp( const LocalSlotObject &key, const LocalSlotObject &data ); 00195 00197 struct LocalSlot 00198 { 00199 DataStructures::OrderedList<LocalSlotObject,LocalSlotObject,LocalSlotObjectComp> slotObjects; 00200 }; 00201 DataStructures::Hash<RakNet::RakString, LocalSlot*,256, RakNet::RakString::ToInteger> localSlots; 00202 00203 protected: 00204 00205 // -------------------------------------------------------------------------------------------- 00206 // Packet handling functions 00207 // -------------------------------------------------------------------------------------------- 00208 virtual void OnAttach(void); 00209 virtual PluginReceiveResult OnReceive(Packet *packet); 00210 00211 DataStructures::Hash<RakNet::RakString, void ( * ) ( RakNet::BitStream *, Packet * ),64, RakNet::RakString::ToInteger> registeredNonblockingFunctions; 00212 DataStructures::Hash<RakNet::RakString, void ( * ) ( RakNet::BitStream *, RakNet::BitStream *, Packet * ),64, RakNet::RakString::ToInteger> registeredBlockingFunctions; 00213 DataStructures::OrderedList<MessageID,LocalCallback*,RPC4::LocalCallbackComp> localCallbacks; 00214 00215 RakNet::BitStream blockingReturnValue; 00216 bool gotBlockingReturnValue; 00217 00218 DataStructures::HashIndex GetLocalSlotIndex(const char *sharedIdentifier); 00219 00221 unsigned int nextSlotRegistrationCount; 00222 00223 bool interruptSignal; 00224 00225 void InvokeSignal(DataStructures::HashIndex functionIndex, RakNet::BitStream *serializedParameters, Packet *packet); 00226 }; 00227 00228 } // End namespace 00229 00230 #endif 00231 00232 #ifdef _MSC_VER 00233 #pragma warning( pop ) 00234 #endif 00235 00236 #endif // _RAKNET_SUPPORT_*
Copyright © 2007-2010 by The Shadowrun: Awakened Team. This work is licensed under the GNU Lesser General Public License 3.