openfire/spark/asmack 环境调试纪要

项目须要简单搭建openfire/spark/asmack的环境及程序demo,本文简单记录以避免遗忘。java

一、openfire/spark 是java编写的xmpp服务器及PC客户端,安装过程至关简单一直next;须要注意的是openfire中配置的域名,后续会做为客户端接入的地址,能够配置成你的局域网IP。android

二、asmack是android下的smack报,即一个XMPP协议栈的客户端版本,记录以下:服务器

  • 应用启动后简历一个xmpp链接
con = new XMPPConnection("192.168.0.28");
con.connect();
  • 客户端首先要注册用户,用户的帐号最终要符合XMPP标准,即XX@XXX

注册完成并登录后会在openfire的管理后台看见该用户信息以及登录状况。异步

con.login(account, password);
  • 客户端发送到XMPP服务端的消息被称为packet,根据协议封装为三种:
    • message:最基本的推送消息,不要求响应,用以IM中;
    • presence: 用以表示用户的状态,如在线、离开等;
    • IQ(info/query):一个实体发出请求,要求另一个实体给出响应;

Packet的接受有同步和异步两种,以下:spa

// 建立一个packet过滤器来监听来自一个特定用户的新的消息
//咱们可使用一个AndFilter来结合其它两个过滤器。 
PacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class), 
        new FromContainsFilter("mary@jivesoftware.com"));
// 假设咱们已经建立了一个名为"connection"的XMPPConnection。

// 首先,用咱们建立的过滤器注册一个packet收集器。
PacketCollector myCollector = connection.createPacketCollector(filter);
// 一般,您应该用收集器来些什么,像等待新的packet。

// 接下来,建立一个packet监听器。咱们能够简便地使用匿名内部类。
PacketListener myListener = new PacketListener() {
        public void processPacket(Packet packet) {
            // 在这里用收到的packet作些什么。
        }
    };
// 注册这个监听器。
connection.addPacketListener(myListener, filter);
  • Roster 在asmack中表明用户,能够是一个用户,也能够是一个用户组:
List<RosterEntry> entries = new ArrayList<RosterEntry>();
RosterGroup rosgrou = con.getRoster().getGroup(group);
Collection<RosterEntry> roscol = rosgrou.getEntries();
Iterator<RosterEntry> iter = roscol.iterator();
while (iter.hasNext()) {
    entries.add(iter.next());
}
return entries;
  • 消息的发送采用chat或者chatgroup,该类是在packet基础上的封装
Chat newChat = connection.createChat("jsmith@jivesoftware.com");
Message newMessage = newChat.createMessage();
newMessage.setBody("Howdy!");
message.setProperty("favoriteColor", "red");
newChat.sendMessage(newMessage);
相关文章
相关标签/搜索