网络应用部分,RMI(Remote method Invokation)大致是常见的一种方式。这种方式翻译过来讲就是远程调用,本地机器可以调用远程机器的一段代码。这篇文章来看一下RMI怎么使用。
首先,我们先看怎么进行RMI。
----------------------------------------
在代码中,我们可 以用InvokeRMI()这样的方法来进行一次RMI,服务器调用客户端,或者是客户端调用服务器,举例来说,
pGame -> GetGameRules() -> GetGameObject() ->InvokeRMI ( CGameRules::RequestToDoSomething(), CGameRules::NoParams, eRMI_ToServer);
这样一个语句就发起一次对服务器的RMI调用,第一个参数说明了要调用的方法;第二个参数是调用是这个方法能用到的参数;第三个参数是方向,例子中是调用服务器上的。需要说明的是,第二个参数虽然看语义是没有参数,实际操作过程中,因为第二个参数都是一个struct(在C++中,跟class几乎同义),所以依然是有数据的,而不是想象中的NULL。
然后,我们来看在使 用上面的方式的之前,我们需要准备好哪些。
--------------------------------------------------------------------------------------
1,必须申明相关的方法,方法是在对应的头文件中,找到对应的类,用Crytek预定义的宏,如DECLARE_SERVICE_RMI_NOATTACH_FAST()之类的在相关地方进行声明,举例来说,上面的调用,我们必须在类CGameRules中,用这个宏进行定义
DECLARE_SERVICE_RMI_NOATTACH_FAST (RequestToDoSomething, XX, XX)
2,必须在相应的文件中,实现这个申明的东西,同样用到宏,一般是IMPLEMENT_RMI ()。同样举例,上述的就应该在某个CPP文件中写上
IMPLEMENT_RMI (CGameRules, RequestToDoSomething) { }
大括弧填上收到这个网络调用时要完成的事情的代码。
到此,我们在应用层面上了解了RMI。在结束之前,必须说明的是,申明和实现的宏不止上面的例子中的一种,这个可以通过该宏申明的文件看到。声明宏的作用根本上是在相应的类里面加上了两个方法(每一次宏就加上2个)和几个成员变量;实现宏是实现这两个方法,供远程消息到本机上后处理的时候进行所谓的回调之用。