`
soboer
  • 浏览: 1314007 次
文章分类
社区版块
存档分类
最新评论

ESFramework 使用技巧 -- 实现离线消息

 
阅读更多

ESFramework 开发手册(01) -- 发送和处理信息一文中,我们介绍了如何使用ESPlus.Application.CustomizeInfo命名空间的组件来发送和处理自定义消息。而在实际的项目中,需要实现离线消息的功能是一个常见的需求,也有很多客户来咨询如何做才能实现离线消息,所以,在这里,我们简单介绍一下使用ESFramework/ESPlus实现离线消息的原理与步骤。

一.如何截获离线消息  

  我们已经知道,一个在线用户给另一个用户发送二进制信息采用的是ESPlus.Application.CustomizeInfo.Passive.ICustomizeOutter接口的Send方法,如:

  对于类似在线用户发给其他用户的P2P类型的消息,可以通过P2P通道发送,也可以通过服务器中转。当目标用户不在线时,P2P通道肯定是不存在的,所以消息一定是提交到服务器。服务器接收到要转发的P2P消息时,判断目标用户是否在线,如果在线,则直接转发;否则,框架会触发ESPlus.Application.CustomizeInfo.Server.ICustomizeController接口的TransmitFailed事件:

我们只要预定ICustomizeController接口的这个事件就可以监控到所有的离线消息了。

二.离线消息的管理

  截获到离线消息后,我们可能需要将其存到数据库(或其它地方),然后,等到目标用户上线的时候,再从数据库中提取属于该用户的离线消息发送给他即可。

  首先,我们需要对离线消息做一个封装 -- OfflineMessage

  接下来,我们定义IOfflineMessageManager接口,用于管理离线消息:

  实现这个接口,我们便可以将离线消息存储到数据库或文本或网络等等,然后等到需要时再次从中提取。

三.存储离线消息

  有了IOfflineMessageManager接口,我们便可以处理ICustomizeController接口的TransmitFailed事件了:

  我们也许并不需要将所有的离线消息都存储起来,有些不重要的离线消息可以丢弃,而只保存那些我们关心的消息。这只需要在存储消息之前加一个条件判断进行过滤即可。

四.提取并发送离线消息

  我们已经知道,可以通过IUserManager的SomeOneConnected事件来得知某个用户上线了,于是,我们可以在该事件处理函数中,提取属于该用户的离线消息并一一发送给他。我们通过类似下面的代码来做到这一点。

  当用户上线时,会将属于他的离线消息按照时间的顺序一一发送给他。当然,你也可以将属于他的所有离线消息打成一个包,一次性发送也可以。如果是这样,你就需要再增加一条自定义的信息类型和相关的协议类了。

五.小结

  从上面可以看出,基于ESFramework/ESPlus实现离线消息策略是相当简单的,最主要的焦点有两个:第一是可以通过处理ICustomizeController接口的TransmitFailed事件来截获到所有的离线消息;第二是通过IUserManager的SomeOneConnected事件就能知道用户上线的时刻。

  有的朋友可能会问离线文件又该怎么实现了?实际上也是同样的原理,只不过要多用到ESPlus.Application.FileTransfering命名空间下的一些类来完成文件的收发功能,这个以后我们再介绍。

  本文只是实现离线消息的一个简单示例,在实际的应用中,可能需要做更多的工作来满足项目的具体需要,这里就不再一一赘述了。

阅读 更多ESFramework开发手册系列文章

-----------------------------------------------------------------------------------------------------------------------------------------------

关于ESFramework的任何问题,欢迎联系我们:

电话:027-87638960

Q Q:372841921

分享到:
评论

相关推荐

    ESFramework

    ESFramework ESFramework ESFramework

    ESFramework系列Demo源码

    客户端之间如果P2P通道创建成功,则它们之间的消息将直接使用P2P通道传送。 4.ESFramework之FTP_Demo 本demo实现了一个简单的FTP服务器,用于演示如何在客户端与服务器之间传送文件(即文件的上传与下载)。 5....

    ESFramework2.0

    ESFramework2.2最新版本

    ESFramwork2.0

    消息部分: 1.ESFramework介绍之(1)――网络通信消息协议接口IContract <br>2.ESFramework介绍之(2)――网络通信消息NetMessage<br> <br>3.ESFramework介绍之(3)――消息处理器和处理器工厂 <br>4....

    ESFramework网络链接库

    ESFramework 虽然功能强大丰富,但是使用非常简单,因为其采用了优秀的架构设计和实现,将复杂性都屏蔽在了框架的内部,暴露给使用者的都是简单易用、清晰明确的API。而且,ESFramework还提供了Rapid引擎给使用者...

    ESFramework .net框架

    ESFramework的前生是EnterpriseServerBase类库,后来我将EnterpriseServerBase中的Network部分及建立于之上的应用抽象重新整理为ESFramework框架,这是一套完全可复用的、灵活的、单纯的、支持N层C/S架构的轻量级...

    PHP实例开发源码-ESFramework之P2P通信Demo php版.zip

    PHP实例开发源码—ESFramework之P2P通信Demo php版.zip PHP实例开发源码—ESFramework之P2P通信Demo php版.zip PHP实例开发源码—ESFramework之P2P通信Demo php版.zip

    ESFramework2.0源码和Demo

    ESFramework2.0源码、 ESFramework Demos、 ESFramework4.7通信框架

    ESFramework2.0源码

    ESFramework2.0源码、 ESFramework Demos、 ESFramework4.7通信框架 即时通信框架

    ESFramework实例

    ESFramework实例

    ESFramework网络通信框架

    这是一套完全可复用的、灵活...ESFramework不仅仅提供了一个基础的C/S框架和大量C/S应用中常用的组件,而且在ESFramework框架之上,引入的一个扩展层--ESFramework扩展层,专门用于解决的与具体应用相关的领域问题。

    ESFramework之入门Demo.rar

    本demo是一个简单的IM程序,展示了Rapid引擎最基础的功能:信息类型定义、协议定义、信息发送与处理、信息同步调用、好友上下线通知、断线重连等

    ESFramework之P2P通信Demo.rar

    本demo是在ESFramework.Demos.FileTransfer的基础之上,增加了P2P通信的功能。客户端之间如果P2P通道创建成功,则它们之间的消息将直接使用P2P通道传送。

    ESFramework通信组件 v4.0.zip

    ESFramework通信组件,底层使用IOCP模型,支持局域网和广域网的P2P通信,支持文件传送,支持跨平台通信,支持服务器群集,可以嵌入其它软件,二次开发,文档齐全,接口清晰规范,容易上手。

    ESFramework.Demo

    ESFramework.Demo

    【C#源码】可以在广域网部署的高仿QQ2013的即时通讯系统GG

    GG是QQ的高仿版,包括客户端和服务端,可在广域网部署使用,目前最新版本为3.4。我想写一个类似汇总的文章,通过这篇文章,...2014.05.16 -- V3.2, 离线消息、离线文件 2014.05.28 -- V3.4, 系统设置、最近联系人

    ESFramework2.0 source

    .Net著名的Socket通讯框架ESFrameWork 2.0版本(最后的开源版本)

    ESFramework之文件传送Demov1.0

    本demo是在ESFramework.Demos.Simplest的基础之上,增加了客户端之间传送文件(夹)的功能,并可以演示文件传送中断通知、断点续传等特性。

Global site tag (gtag.js) - Google Analytics