首页 文章 精选 留言 我的

精选列表

搜索[IM通道],共7051篇文章
优秀的个人博客,低调大师

自定义IM消息类型

在进行应用程序开发时,对于不同的场景我们往往需要设计不同的消息,一般的,我们使用 消息类型 来描述不同的消息形式,比如文字信息的消息我们定义为 “文本消息” ,消息里包含了图片数据的消息我们定义为 “图片消息” 等等。 在 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 (typeof param === 'string') { $super.call(this, Message, { "type": "text", "content" : param }); } else { $super.call(this, Message, param); } } /** * @returns {string} 返回消息类型。 */ getType: function() { return this.getPayload().type; } }); 在这里我们使用了两个辅助函数 Class() 和 $super() 帮我们快速创建 JavaScript 类。 图片消息 同样的,图片消息也需要从 Message 继承。我们在图片消息里,启动消息附件的生成缩略图功能,就能让 Cube 自动生成消息附件里图片的缩略图。使用消息文件附件 FileAttachment 的 getDefaultThumbURL() 就能得到缩略图文件的 URL 地址。 JavaScript 代码: var ImageMessage = Class(Message, { /** 构造函数 */ ctor: function(param) { $super.call(this, Message, param); this.setPayload({ "type": "image" }); // 启用缩略图功能 this.getAttachment().enableThumb(); }, /** * @returns {string} 返回消息类型。 */ getType: function() { return this.getPayload().type; } }); 在这里我们使用了两个辅助函数 Class() 和 $super() 帮我们快速创建 JavaScript 类。 消息类型分类插件 定义好我们需要的消息之后,我们就需要让插件按照我们制定的类型就行消息实例的分化,这样应用程序就能根据不同的消息类型就行消息处理和展示了。 创建我们的插件类 MessageTypePlugin,并从 MessagePlugin 继承。 MessageTypePlugin 的代码: JavaScript 代码: var MessageTypePlugin = Class(MessagePlugin, { /** 构造函数 */ ctor: function() { $super.call(this, MessagePlugin); }, /** * 当消息需要实例化(分化)时调用该回调。 * @param {Message} message 原始消息实例。 * @returns {*} 消息实例。 */ onInstantiate: function(message) { var payload = message.getPayload(); if (undefined !== payload.type) { if (payload.type == 'text') { return new TextMessage(message); } else if (payload.type == 'image') { return new ImageMessage(message); } } return message; } } 注册插件 我们已经有了插件和消息类,现在就可以把插件注册到消息模块。 JavaScript 代码: cube.messaging.register(new MessageTypePlugin()); 插件可以在调用 Cube start() 之前注册。 插件注册之后,当消息模块需要实例化消息实体时就会触发 onInstantiate 获得实例化的消息对象,这样我们就通过插件将我们自定义的 TextMessage 和 ImageMessage 对象返回给消息模块进行处理,并由消息模块事件发送给应用程序,这样应用程序就获得具体的带消息类型的消息实例对象了。 在 Gitee 上查看示例代码 在 GitHub 上查看示例代码 > 作者:徐江威 > > 日期:2020年12月24日

优秀的个人博客,低调大师

Apache Spark中国社群 有奖投稿通道 启动啦!

感谢对 Apache Spark 中国社区的关注和支持!如果您有意为 Apache Spark 中国社区投稿请关注如下的内容。 投稿内容要求: 内容要求是 Apache Spark 相关的技术内容,可以是对 Apache Spark 的分析,也可以是 Apache Spark 的实践。 文章内容请尽量客观描述,如有性能比较最好有环境和数据的说明。 请尽量使用公开的或原创的内容。勿在内容中使用他人的原创内容,或在征得他人同意的情况下使用。 请尽量投递给我们比较完整的内容,方便我们进行判断。 篇幅与时长 分享的内容一般在1个小时左右 投稿的格式 投稿可以使用pdf,ppt都可以 在正式分享的时候请使用ppt格式 投稿的传播路径 钉钉群直播 线下的 Spark meetup 以上完成传播的分享内容,我们在征得您的同意的情况下,会以pdf的形式进行对外的

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册