协议库BzProtocol远端模块设计与实现.pdfVIP

  • 0
  • 0
  • 约9.01千字
  • 约 14页
  • 2026-02-03 发布于北京
  • 举报

3.2.远端模块

3.2.1.简介

模块的实现只需一个类。假设某个模块的实现类为CRemote,

它与普通的消息端口一样,需要继承XMessageHelper,以确保本身的消息端

口像普通模块消息端口一样可以使用SendSyncMessage来向其他消息端口发

送消息,并通过OnRecvMessage回调函数来接收。

远端模块的实现类CRemote有两个特殊部分:一是将消息转发到进程内

部消息端口;二是将进程端口的消息转发到外部进程,这也是与普通模块

的差异所在。

如下图,模块1,模块2是普通模块,Remote.B与Remote.C是远端模块。

模块功能单一,只是进程间消息互通的桥梁,与业务无关,因此可以

以Remote组件的形式(收录在BzProtocol库)供公司其他产品使用。

Remote组件的创建方式按照BZCOM的规范进行。如下图。

3.2.远端模块Remote

3.2.1.简介

远端模块的实现只需一个类。假设某个远端模块的实现类为CRemote,它与

普通的消息端口一样,需要继承XMessageHelper,以确保本身的消息端口像普

通模块消息端口一样可以使用SendSyncMessage来向其它消息端口发送消息,并

通过OnRecvMessage回调函数来接收。

远端模块的实现类CRemote有两个特殊部分,一是将消息转发到进程

消息端口;二是将进程端口消息转发到外部进程,这也是与普通模块的差异

所在。

如下图,模块1,模块2是普通模块,Remote.B与Remote.C是远端模块。

远端模块功能单一,只是进程间消息互通的桥梁,与业务无关,因此可以

Remote组件形式(收录在BzProtocol库),供公司其它产品使用。Remote组件的

创建方式按照BZCOM的规范进行。如下图。

组件除了可以在主程序中创建,也可以在模块内创建组件,Remote组件

也不例外。

3.2.1.远端模块消息端口

凡模块消息端口都必须有端口ID与名称,远端模块消息端口也不例外。

普通模块消息端口名称一般在模块开发时就可以确定(如游戏列表、登录框等,

都在类构造函数中固定消息端口名称)。考虑到远端模块的可重用性,远端模

块消息端口名称不应在其编码时指定,而是由外部模块开发人员指定。例如上

图中的Remote.A和Remote.B模块对象都是从同一个类生成的模块对象,因

此Remote.A与Remote.B的端口名应由模块1与进程Main.exe的主程序指

定。

Remote组件实现分为两类,第一类是使用socket技术称为

Remote4Socket组件,第二类是使用其他IPC通讯方式称为

Remote4InterProcess组件。为了便于外部使用,了统一的Remote接口。

Remote接口定义如下。

//通信组件操作接口structIRemote{/***@brief消息端口名*@param[in]

szPortName消息端口名*@param[out]uPortID成功后生成的消息端口ID*

@return成功返回0,失败返回错误码*/virtualHRESULT

RegisterMessagePort(constchar*szPortName,UINTuPortID)=0;};

组件除了可以在主程序中创建,也可以在模块内创建组件,Remote组件也

不例外。

远端模块消息端口

凡模块消息端口都必需有端口ID与名称,远端模块消息端口也不例外。普

通模块消息端口名称一般在模块开发时名字就可以定下来(如游戏列表,登陆框

等,都在类构造函数固定消息端口名字)。考虑到远端模块的可重用性,远端模

块消息端口名称不应在其编码时指定,而是由外部模块开发人员指定。例如上图

中的Remote.A和Remote.B模块对象都是从同一个类生成的模块对象,因此

Remote.A与Remote.B的端口名应该交由模块1与进程Main.exe的主程序指定。

Remote组件实现分成两类,第一类是使用socket技术称为

Remote4Socket组件,第二类是使用其它IPC

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档