跳到主要内容
版本:v10.0

   M3D中提供了完善的消息机制,可以实现任意模块之间的通信。在M3D中已增加了对读取器、渲染器等基类的订阅处理,我们只需要在自定义的读取器、渲染器中发布消息,即可与M3D进行通信。我们自定义的模块之间也可以进行通信。

消息机制原理

   M3D的消息机制采用的是订阅-发布模式。这种模式由消息中心作为调度中心,管理消息的发布和订阅,做到了发布者和订阅者之间低解耦。发布者在发布消息时,只关注消息本身,而不关心谁订阅了该消息。订阅者可以订阅多个发布者的消息,也可以作为发布者向消息中心发布消息。

订阅消息

  在需要订阅的类中,首先需要实现更新消息的接口upData();然后在类构造函数或初始化方法中增加对订阅消息发布者的订阅处理:subscribe(publisher);

  示例代码如下:

M3D.getCenter().subscribe(publisher);

取消订阅

   对发布者的消息不再感兴趣或已处理完所有发布消息后,订阅者可以选择取消订阅,订阅者仅需调用消息中心的取消订阅接口unSubscribe(publisher)接口即可。

   取消订阅后将不再用于主动取消息和接收推送消息的权限,如需接收需再次对发布者进行二次订阅。

  示例代码如下:

M3D.getCenter().unSubscribe(publisher);

发送消息

  消息分为普通即时消息两种消息类型。

  普通消息为不需要即时处理的消息,发布者发布消息后暂存到消息中心的消息队列中,等待订阅者主动取消息。

  向消息中心发送普通消息:

M3D.getCenter().postMessage(message);

  或实现发布者接口的send() 方法

  即时消息为需要即时处理的消息,发布者发布消息时,消息中心立即向该消息的所有订阅者推送该消息。

  向消息中心发送即时消息:

M3D.getCenter().sendMessage(message);

或实现发布者接口的send()方法

接收消息

  消息分为即时消息和普通消息两种类型,所以接收消息的方式也有两种:被动接收即时消息和主动从消息中心取普通消息。

接收即时消息

实现订阅者接口的updata()方法,在方法中根据接收到的消息做相应的处理

主动获取普通消息

M3D.getCenter().getMessages(this,publisher,massageParamater);其中消息发布者和消息相关参数为可选参数。开发者可根据实际情况选择参数传递方式。