Android XMPP IM 设计 1)
Open fire基于xmpp协议的服务端
android 端的设计:
其中模块由;ConnectManager 模块,AccoutManager 模块,MessageManager 模块,sqlite模块,contentprovide模块,View模块 次要的模块比如 NotifycationManager等。
首先 基本流程是
1)连接Xmpp服务器
2)连接成功在完成自己的相应业务,比如存储自己的信息,比如好友等
3)开启MessageManager 接收信息,轮询接收到的信息直接存储在数据库中,存储成功刷新内容提供者
4)View模块(Activity)运用LoadManager机制加载被刷新内容提供者的URI,刷新页面
5)发送消息将调用MessageManager 模块,进行发送信息存储在数据库中同时调用ASmark api 发送消息给XMPP服务器。
具体中,大部分设计都是面向接口;
其中主要接口有
public interface IEmployee extends OnInitialization {} 所有管理者都必须继承此类
public interface IMWindow extends IMMain,INotification,IInformation im窗口(Activity)
public interface IConnect extends ConnectionListener,IEmployee 连接管理者
public interface MessageObserver extends StanzaListener, MessageListener, IEmployee, OnUpdate,HandlerMessageLeader<Message> 消息管理者
public interface IHierarchy extends IEmployee 辅助IM窗口的 聊天管理者
public interface NotificationManager extends IEmployee 推送管理者
public interface IManagerList extends ILife 管理所有管理者单例的集合类
1, IManagerList 管理所有单例管理者
因为项目中有很多管理者,IManagerList就是把初始化的管理者全部添加进来进行管理。
IManagerList.addManager(IEmployee o); 添加 IEmployee (管理者需要继承此类)
Set<IEmployee> IManagerList.getAllManager(); 返回所有管理者
2,IConnect 复制IM连接模块的接口
里面基本暴露通用一些方法。比如 addLoginListener() 登录监听 ;isConnect()是否连接;disconnect()断开连接,init()初始化;runConnectThread() 连接登录等;
3,MessageObserver
此接口类比较多,重点有;基本上涵盖业务功能。创建单聊,群聊。发送消息,删除消息等,重发等机制。key可以自己定义可以使房间id或者其他能代表此次聊天唯一值就可以了。
其中MessageObsever此类继承了smark StanzaListener
接口。先贴出具体(MessageManager 我的代码里的实现类)实现看看;
这里代码已经分得很多情况。
4 前端部分接口
1)IMWondow 拥有生命周期,部分业务接口它代表一个聊天界面
2)IMMain 被IMWondow继承
3)ILife 管理 IMWindow周期 ,其中IManagerList 也继承此接口
4)IHierarchy 提供IMWindow 层级暴露接口
今天到这里,只是写接口层一些设计。第一次写