到目前为止,ESFramework将接收自终端用户的消息分为6类,这可以通过ServiceType枚举看出来:
public enum ServiceType
{
Basic , //IBasicRequestDealer
Function ,
P2PMessage , //对于P2P消息,服务器仅仅转发,P2PMessageDealer
FriendRelation , //如好友列表、好友资料等 ,FriendRelationDealer
GroupMessage , //如多人联网游戏中的同步消息等(动态组消息) -- ActiveGroupMessageDealer
CustomServiceType //自定义服务种类
}
{
Basic , //IBasicRequestDealer
Function ,
P2PMessage , //对于P2P消息,服务器仅仅转发,P2PMessageDealer
FriendRelation , //如好友列表、好友资料等 ,FriendRelationDealer
GroupMessage , //如多人联网游戏中的同步消息等(动态组消息) -- ActiveGroupMessageDealer
CustomServiceType //自定义服务种类
}
我先解释一下这几种类型的消息含义:
(1)Basic,基本消息是类似这样的消息,比如登录、退出、check消息等。
(2)Function,功能请求消息是所有请求功能服务的消息,这样的请求消息都有对应的回复消息,比如查询、要求服务器计算而得到结果等等。ESFramework中,几乎所有的Function类型的消息都是由功能插件处理的。
(3)P2PMessage,点对点消息,是指用户发给另一用户而经过服务器中转的消息,比如即时通讯中的聊天消息等。
(4)FriendRelation,好友关系请求消息,比如请求好友列表、好友资料等,这在很多IM应用中是常见的。
(5)GroupMessage,动态组请求消息。ESFramework支持运行时动态组创建、管理等。
(6)CustomServiceType ,自定义的消息类型,即你的应用中用到的除上面5种消息类型以外的消息。
(7)还要补充一种消息,跨区域(AS)请求,这种类型的消息将被本地AS转发到目标AS去处理。(回顾跨区域AS)
ESFramework为每种类型的消息都提供了默认的处理器(或处理器接口),它们是:
(1)对于Basic消息类型,ESFramework提供了IBasicRequestDealer接口,你的应用只要实现此接口就可处理所有的Basic消息。
(2)对于Function类型的消息,由于通常是由功能插件处理,所以ESFramework提供了FunAddinDealerFactory来处理所有的功能请求消息。
(3)P2PMessage,对于所有要转发的消息,ESFramework提供了P2PMessageDealer,P2PMessageDealer可以进行本区域转发和跨区域(AS)转发。如果需要将转发失败的消息存储以待以后重试,可以使用IOverdueMessageHandler。
(4)FriendRelation,对于好友关系请求,ESFramework提供了FriendRelationDealer处理器,你只需要实现该处理器使用到的其它组件接口即可。
(5)GroupMessage,对于动态组请求消息,ESFramework提供了ActiveGroupMessageDealer可以直接进行处理。
(6)CustomServiceType ,对于应用自定义的消息类型,你需要实现自己的消息处理器。
(7)对于跨区域(AS)请求,你可以根据AS之间的通信方式实现特定的处理器。如果AS之间采用.net remoting通信,则ESFramework提供了ESFramework.Architecture.FourTier.ForeignDealer来处理跨区域请求。
所有上述的消息处理器都可以装配到EsbRequestDealerFactory工厂,EsbRequestDealerFactory为每种类型的消息都预留了处理器插槽,你可以通过对应的属性进行处理器注入!图示如下:
(图中黄色背景的组件都已经在ESFramework中提供了实现!BasicRequestDealer需要你实现IBasicRequestDealer接口)
如果你的应用只需要使用其中几种类型的消息,那么只需要为EsbRequestDealerFactory装配对应的消息处理器,这样不会为不使用的消息类型付出任何额外的代价。
上一篇文章:ESFramework介绍之(30)―― 消息侦察者 INetMessageSpy
转到 :ESFramework 可复用的通信框架(序)