用C#搭建MSN机器人平台

由于MSN本身协议开源,于是基于其开发各种插件或者应用成为可能。

本文旨在设计&展示如何用.NET搭建一个公共的MSN平台。其基础功能包括:

 

1. 提供一个MSN机器人发布接口,任何用户可以使用该接口令MSN机器人向其他联系人发布信息。

2. 提供一个MSN发布接口,任何用于可以使用该接口发布自己的MSN信息。

 

当然该平台也可以在MSN协议允许的基础上扩大功能,这是后话。

 

为了使用的便捷性我们的接口使用WebService。这里对于WebService的应用不再赘述。

 

接下来主要讨论我们的MSN应用的技术选型及逻辑流程:

 

基于协议开发工作量较大,我选用了本身已经比较成熟的貌似是一个芬兰人开发的DotMSN1.2组件(现在最新版本为2.0,但是貌似比较复杂,我就没用了,有兴趣的读者可以研究一下)。其提供C#对MSN协议的基本封装。

 

从协议级别分析,MSN从登陆到发送消息一共有如下流程:

 

登陆 - 连接 - 同步 - 等待同步完成 - 创建会话 - 邀请联系人 - 等待连接成功 - 等待邀请成功 - 发送

 

而这中间每一步都可能异常,所以需要一个强健的错误处理的程序。在我构建的逻辑流程中主要包含以下几点:

 

1 . MSN连接缓存。(可以构建多个机器人实例,并且提供缓存池托管)

2 . 会话缓冲池。(在MSN实际运行过程中,对各个会话进行托管)

3 . 连接回收。(在长期没有任务的情况下,MSN机器人会自动回收,当然,这对使用者是透明的)

4 . 任务队列及多线程安全。(实际在平台运营过程中,可能是多线程并发访问的,所以对于每个连接实例提供任务队列管理,并且多线程安全)

 

下面看看代码:

 

MSN机器人类

 

主要思想:

每个机器人维护一个线程,该线程用于任务的轮训和执行(见Start函数)。

每个机器人维护一个任务队列(Queue<MSNTask> _tasks),一个会话缓冲池(见getConversationHandler函数)。

在各个逻辑环节维护出错处理,保证让任务能够尽量被执行成功。

 

MSN机器人任务类

 

主要思想:

任务的执行使用状态机

 

 

MSN机器人工厂类

 

主要思想:

维护MSN连接缓冲池

 

 

最终效果

 

 

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值