RakNet--RPC4
![]() |
在本地和远端系统调用C函数
注册函数: 注册一个函数,使用RegisterSlot()或RegisterBlockingFunctioin()成员。 void RegisterSlot(const char *sharedIdentifier, void ( *functionPointer ) ( RakNet::BitStream *userData, Packet *packet ), int callPriority); bool RegisterBlockingFunction(const char* uniqueID, void ( *functionPointer ) ( RakNet::BitStream *userData, RakNet::BitStream *returnData, Packet *packet ));
第一个参数是一个字符代表了要调用的函数。它可以和函数的名字一样。第二个参数是一个指针,指向要被调用的函数。如果它是一个块函数,参数列表也包含了返回数据给调用者的BitStream。 RPC4GlobalRegistration类可以用于在他们声明的地方注册函数。例如: void CFunc1(RakNet::BitStream * bitStream, Packet * packet){} RPC4GlobalRegistration cfunc1reg( "CFunc1", CFunc1);
如果更广泛地使用RPC4GlobalRegistration,需要将RakNetDefines.h中的定义RPC4_GLOBAL_REGISTRATION_MAX_FUNCTIONS修改为更高的值。
调用函数: 使用Signal()函数调用一个非阻塞函数(到底是非块函数,还是非阻塞函数,我也没有明白。)。否则调用CallBlocking()函数。 void Signal(const char *sharedIdentifier, RakNet::BitStream * bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, const AddressOrGUID systemIdentifier, bool broadcast, bool invokeLocal); bool CallBlocking( const char* uniqueID, RakNet::BitStream * bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, const AddressOrGUID systemIdentifier, RakNet::BitStream *returnData );
Signal会调用所有在RegisterSlot()函数中使用标识符注册的函数,包括有可能可以用于同一个系统中。CallBlocking()会在单个系统上回调用一个信号函数,使用RegisterBlockingFunction()函数注册了。CallBlocking()函数调用直到远端系统有回复,或连接断开才会返回,否则一直处于阻塞状态。 参考Samples/RPC4插件的演示例子。 |
![]() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步