Shadowrun: Awakened 29 September 2011 - Build 871
RPC4Plugin.h
Go to the documentation of this file.
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.

GNU Lesser General Public License 3 Sourceforge.net