在进行应用程序开发时,对于不同的场景我们往往需要设计不同的消息,一般的,我们使用 消息类型 来描述不同的消息形式,比如文字信息的消息我们定义为 “文本消息” ,消息里包含了图片数据的消息我们定义为 “图片消息” 等等。
在 Cube 里可以通过 Plugin System 插件系统实现自定义消息,通过定义消息的负载格式来标记不同类型的消息。
△ 自定义消息示例程序截图
插件基础
Cube 的 Plugin 基于事件通知机制来实现插件对特定事件的响应和处理。也就是说,Cube 的每个模块会根据自身的技术特点,在必要的工作流程里加入 Hook 来通知插件进行必要的数据干预。
消息模块的插件会接收到来自消息模块内部的消息实例对象 Message
,调用插件之后插件需要返回被处理的 Message
实例以便消息模块继续后续的处理流程。下图是 MessagePlugin
在 Sent 事件时响应 onInstantiate
事件的流程。
通过这个流程,最终监听器收到 Sent 事件时接收参数就是由插件分化的消息实例了。
自定义消息
为了能让我们的插件识别不同的消息类型,我们在消息的负载数据里定义一个 "type"
字段来表示消息的类型,并约定好 text
表示文本消息,image
表示图片消息。这样,文本消息的负载格式就是:
{
"type": "text",
"content": "这里是文本内容"
}
图片消息的负载格式就是:
{
"type": "image"
}
图片文件数据由 Message
的文件附件功能进行处理。
文本消息
文本消息从 Message
继承,以便符合消息模块插件的处理机制,即插件需要返回一个有效的 Message
实例。
JavaScript 代码:
var TextMessage = Class(Message, {
/** 构造函数 */
ctor: function(param) {
if