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);
相關文章
相關標籤/搜索