DreamSea

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

xmpp介绍

XMPP: Extensible Messaging and Presence Protocol   Detail:  http://www.xmpp.org/ 可扩展消息处理现场协议,   是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。

   XMPP是一个流化XML[XML]元素的协议,用于准实时的交换消息和出席信息。XMPP的核心功能定义在Extensible Messaging and Presence Protocol (XMPP): Core XMPP-CORE. 这些功能 -- 主要是 XML, 使用 TLSSASL,以及流的根元素之下的<message/>, <presence/>, <iq/> 子元素 -- 为各种类型的准实时应用提供了一个构造基础, 它可以被放在核心的顶层,使用特定XML名字空间[XML-NAMES]发送特定的应用数据. 我很想描述XMPP核心功能的扩展和应用,时间关系及理解的不是很透彻,也不敢乱发言;XMPP核心功能提供了RFC 2779 [IMP-REQS]定义的基本的即时消息和出席信息功能。

 

XMPPJID =(jabber id)

fullJid: name + “@” + serverName +”resourceName”

barJid: name + “@” + serverName

name:登录名

serverName: 是服务器的域名 如gmail.com(GTALK) 公司213服务器域名称为mm

resourceName:资源名 如Gtalk , MSN , QQ Spark这些名称就是资源名

 

注意:一个名称可以使用不同的资源名登录,所以在发送消息时接收方一定要使用fullJid

 

BEEM中用到的相关类

1.说明

采用开源工程beem的代码结构 www.project-beem.com

 

2. AIDL接口

com.zbkc.mobileoa.im.beem

  serviceAIDL接口:

  

service.aidl

aidl对应的实现

描述

 IBeemConncectionListener.aidl

IXmppConnection中调用

添加连接监听的回调接口

IXmppConnection.aidl

XmppConnectionAdapter

用于xmpp连接处理接口

IXmppFacade.aidl

XmppFacade

用于xmpp连接管理提供外部调用接口

IChatManger.aidl

BeemChatManager

用于聊天管理

IChatManagerListener.aidl

IChatManger中调用

为聊天加入回调接口

IChat.aidl

ChatAdapter

封装xmpp聊天处理方法

IMessageListener.aidl

IChatManger中调用

IChat中调用

提供消息处理回调接口

 

 

 

 

  

问:为啥在提供这么多的AIDL接口?

1)一层一层封装使结构更加清晰

问:为啥封装Contact Message UserInfo等类

Service中如果要传递对象必须是继承自Parcelable的对象

问:RemoteCallbackList的作用

在多个类中都用到了RemoteCallbackList 主要是用于回调在Activity中实现的一些监听器

问:AvaterPrivacyList作用是什么?

Avater是头像信息

PrivacyList是用来定义更多的用户状态信息(如定义离开消息:“我吃饭去了”等)

 

 

3.service中主要的类

XmppConnectionAdapter

Class Over

Subscription- Management订阅管理

Summary

 Nested Classes

    XmppConnectionAdapter .ConnexionListenerAdapter

   XmppConnectionAdapter .SubscribePacketListener

   XmppConnectionAdapter .UserInfoManager

  Public Constructors

   

  Public Methods

   

方法名

描述

connect

xmpp连接方法

addConnectionListener

添加xmpp连接监听器

login

xmpp登录方法

connectAsync

 

updateNotification

 

getChatManager

 

getRoster

 

getUserInfo

 

isAuthentificated

 

 

Inherited Methods

 

 

XmppConnectionAdapter .ConnexionListenerAdapter

  connectionClosed

connectionClosedOnError

connectionFailed   回调Activity中的实现

  reconnectingIn 回调Activity中的实现

  reconnectionFailed回调Activity中的实现

  reconnectionSuccessful回调Activity中的实现

 XmppConnectionAdapter .SubscribePacketListener

Class Over

Subscription- Management订阅管理

Summary

 Nested Classes

  Public Constructors

  Public Methods

     processPacket

//更换帐号登录....Subscription

Inherited Methods

XmppConnectionAdapter .UserInfoManager

   onAvatarChange 更换头像时调用此监听方法

 

 

XmppFacade

Class Over

  Xmpp连接管理外部接口

Summary

 Nested Classes

  Public Constructors

    XmppFacade(final XmppConnectionAdapter connection)

  Public Methods

方法名

描述

void changeStatus(int status, String msg)

修改状态信息

void connectAsync()

异步登录

void connectSync()

同步登录

XmppConnectionAdapter createConnection()

创建xmpp连接

void disconnect()

销毁xmpp连接

IChatManager getChatManager()

获取聊天管理器

IRoster getRoster()

返回当前用户的名册(包含好友列表信息,分组信息)

void sendChatPacket(Message  msg)

add by jimmy  :unavailable

void sendPresencePacket(PresenceAdapter presence)

发送状态包(如发送离线unavailable ,上线available)见org.jivesoftware.smack.packetb包中的Enum Presence.Type

void call(String jid)

 

boolean publishAvatar(Uri avatarUri)

发布自己的头像

void disableAvatarPublishing()

隐藏自己的头像

UserInfo getUserInfo()

获取当前用户的信息

  mFullJid

  mAvatarId

 

 

 

 

 

 

 

Inherited Methods

 

 

BeemChatManager

Class Over

  聊天管理,用于管理聊天对象的创建,消息的监听

Summary

 Nested Classes

    ChatListener extends IMessageListener.Stub implements ChatManagerListener

  Public Constructors

   BeemChatManager(final ChatManager chatManager, final XmppService service)

  Public Methods

    

方法名

描述

addChatCreationListener

 

 

 

IChat createChat(Contact contact, IMessageListener listener)

 

IChat createChat(String jid, IMessageListener listener)

 

void destroyChat(IChat chat)

 

void deleteChatNotification

 

private ChatAdapter getChat(Chat chat)

 

ChatAdapter getChat(Contact contact)

 

List<Contact> getOpenedChatList()

 

void removeChatCreationListener(IChatManagerListener listener)

 

 

 

 

 

Inherited Methods

 

ChatAdapter

Class Over

Summary

 Nested Classes

    class MsgListener implements ChatStateListener

  Public Constructors

     ChatAdapter(final Chat chat)

  Public Methods

方法名

描述

getParticipant()

 

sendMessage(Message msg)

add by jimmy  unaviable

void addMessageListener(IMessageListener listen)

当创建新聊天对象创建时加入消息监听

void removeMessageListener( IMessageListener listen )

移除消息监听器,用于聊天对象注销

String getState()

获取当前聊天对象的状态

void setState(String state)

 

Chat getAdaptee()

 

void setOpen(boolean isOpen)

如果打开为当前聊天窗口,消息条数清空

boolean isOpen()

 

void addNewMsgNum()

add by jimmy 后台逻辑,与前台窗口无关,只要聊天对象存在计数器都要+1

int getNewMsgNum()

add by jimmy 后台逻辑,只计算上次窗体调用setOpen(true)到当前时间所到的新消息条数

List<Message> getMessages()

 

void addMessage(Message msg)

 

void saveHistory(Message msg, String contactName)

根据联系人的barJid存储聊天记录

void setHistory(boolean isHisory)

 

boolean getHistory()

 

 

 

 

Inherited Methods

 

 

4.其他类

  用于选程服务中的类

  RosterAdapter:用于用户名称管理

  用于传递的Parcelable对象  [Parcelable:包裹]

  UserInfo 登录者信息管理

  Message 消息的定义

Contact 联系人定义 主要封装fulljid

  用于业务层处理:

       LoginAsyncTask :xmpp异步登录处理

XMPP扩展

 两种方式:

 1)采用Form表单方式直接添加

2)采用PepSub节点添加 beem中的头像属性

参考文档:  

http://xmpp.org/extensions/xep-0080.html

http://stackoverflow.com/questions/2387319/xep-0080-user-location-in-smack-library

 

 

关于文件传输问题:

参考

http://code.google.com/p/asmack/issues/detail?id=23
http://community.igniterealtime.org/message/201866#201866

 

posted on 2011-07-28 09:42  DreamSea  阅读(3353)  评论(0编辑  收藏  举报