Smack Overview

翻譯這個文檔的主要緣由是爲了同Gtalk進行通訊,利用Smack來實現本身的機器人等等服務。主要是沒有接觸其餘的Jabber的Java類庫,因此沒有比較這些類庫之間的差異。不過就這一段時間的使用,感受Smack確實是簡單易用! 
如今開始Smack的Tut。若是你也對Smack感興趣,或對與Gtalk通訊感興趣,你能夠留言進行交流,或到個人Google論壇進行交流。 

1:Smack是一個簡單的,功能強大的類庫。給用戶發送信息只需三行代碼即可完成 
XMPPConnection connection = new XMPPConnection(」jabber.org「); 
connection.login(」mtucker」, 「password」); 
connection.createChat(」jsmith@jivesoftware.com「).sendMessage(」Howdy!」); 
2:不會強迫你向其餘類庫那樣,在信息包層面進行編碼。它提供了更加智能化的類好比Chat和Groups,能使你的工做更富效率。 
3:不須要你熟悉XMPP XML格式,甚至是XML格式。 
4:易於實現機-機對話。 
5:Apace License下的開源軟件。你能夠把它用於你的商業或非商業應用程序。 

關於XMPP 

怎樣使用這個文檔 
這個文檔假定你熟悉XMPP及時消息的主要特徵。並熱切的但願你能在閱讀本文檔的時候打開Java Doc API做爲參考。 

服務器

  • Getting stared with Smack 
    續上 Smack Overview 
    這個文檔向你介紹一下Smack API以及它裏面的重要類庫和觀念。 

    創建鏈接 
    XMPPConection用來同XMPP SERVER創建鏈接。建立SSL鏈接的話,須要使用SSLXMPPConection類。下面的代碼說明了怎樣創建鏈接 

    // Create a connection to the jabber.org server. 
    XMPPConnection conn1 = new XMPPConnection(」jabber.org」); 

    // Create a connection to the jabber.org server on a specific port. 
    XMPPConnection conn2 = new XMPPConnection(」jabber.org」, 5222); 

    // Create an SSL connection to jabber.org. 
    XMPPConnection connection = new SSLXMPPConnection(」jabber.org」); 

    一旦你創建了鏈接,你就能夠經過XMPPConnection.login(String username, String password)方法,使用你的用戶名和密碼進行登陸。登陸成功後,能夠建立Chat或GroupChat對象來和其餘用戶進行交流了。 

    好友列表 
    Roster 類能夠用來跟蹤每個用戶的狀態。你能夠把用戶納入不一樣的組好比」Friends」或」Co-worker」,也能夠斷定用戶是否online或 offline。經過XMPPConnection.getRoster()可以得到好友列表,Roster類容許你遍歷好友列表,弄清他們是什麼名字, 屬於那個組,是否在線等等。 

    讀寫消息包(Reading Or Writing Packet) 
    從客戶端發向XMPP SERVER的消息成爲包(Packet),經過XML格式發送。org.jivesoftware.smack.packet包包含了這些類,他封裝了 XMPP容許的三個不一樣類型的基本包(message, presence, IQ)。類Chat和GroupChat提供了更高級別的結構,可以自動管理包(Packet)的建立和發送,固然你也能直接建立和發送包 (Packet)。下面的例子說明了如何改變本身的狀態,讓別人知道你出去釣魚不在電腦前了。 

    // Create a new presence. Pass in false to indicate we’re unavailable. 
    Presence presence = new Presence(Presence.Type.UNAVAILABLE); 
    presence.setStatus(」Gone fishing」); 
    // Send the packet (assume we have a XMPPConnection instance called 「con」). 
    con.sendPacket(presence); 

    Smack提供兩種方式來讀將要到來的包(Packet): PacketListener和PacketCollector。 二者都使用PacketFilter來決定該處理那種類型的包(Packet).PacketListener經常用在事件驅動的程序中;而 PacketCollector維護一個包(Packet)的結果隊列,你能夠在其上進行Polling和Blocking操做。當包(Packet)到 來時引起某些事件的時候,使用PacketListener最好不過;而PacketCollector經常用來等待某個特定的包(Packet)。這兩 種對象均可以經過XMPPConnection的實例來建立。 

    Messaging using Chat and GroupChat 

    接上 Getting stared with Smack 
    及時通信的核心是收發信息。Smack提供兩個類Chat、GroupChat來完成這項工做。 

    # org.jivesoftware.smack.Chat — 兩人交談 
    # org.jivesoftware.smack.GroupChat — 加入聊天室同多我的進行交談 
    這兩個類都使用org.jivesoftware.smack.packet.Message包類(Packet Class)來收發消息。在某些時候,你可能想不經過這兩個類,而是直接收發消息。 

    Chat 
    一個Chat在兩個用戶之間創造一個新的消息線程。下面的代碼段說明了如何進行建立Chat,併發送消息 

    // Assume we’ve created an XMPPConnection name 「connection」. 
    Chat newChat = connection.createChat(」jsmith@jivesoftware.com「); 
    newChat.sendMessage(」Howdy!」); 

    Chat.sendMessage(String)方法是一個快捷方法:它首先建立一個Message對象,而後設置消息體,最後發送消息。若是你想在發送消息前增長其餘熟悉,你可使用以下的代碼段: 

    // Assume we’ve created an XMPPConnection name 「connection」. 
    Chat newChat = connection.createChat(」jsmith@jivesoftware.com「); 
    Message newMessage = newChat.createMessage(); 
    newMessage.setBody(」Howdy!」); 
    message.setProperty(」favoriteColor」, 「red」); 
    newChat.sendMessage(newMessage); 

    Chat容許你很容易的偵聽對方的回覆。下面的代碼段是一個應聲蟲,它回顯對方輸入的信息 

    // Assume we’ve created an XMPPConnection name 「connection」. 
    Chat newChat = connection.createChat(」jsmith@jivesoftware.com「); 
    newMessage.setBody(」Hi, I’m an annoying parrot-bot! Type something back to me.」); 
    while (true) { 
    // Wait for the next message the user types to us. 
    Message message = newChat.nextMessage(); 
    // Send back the same text the other user sent us. 

    newChat.sendMessage(message.getBody()); 

    使用Chat.nextMessage()方法來獲取下一個Message,它會無限期的等,直到有下一個消息。還有別的方法能夠爲新消息指定一段特定的事件,也可使用事件驅動模式,當消息來時通知你。 
    GroupChat 
    羣組聊天容許你鏈接到聊天室,你能夠和組內的人進行通訊。在發送和接受消息前,你必須使用一個組名(暱稱)來加入某個組。下面的代碼段說明了如何加入組併發送消息: 

    // Assume we’ve created an XMPPConnection name 「connection」. 
    GroupChat newGroupChat = connection.createGroupChat(」test@jivesoftware.com「); 
    // Join the group chat using the nickname 「jsmith」. 
    newGroupChat.join(」jsmith」); 
    // Send a message to all the other people in the chat room. 
    newGroupChat.sendMessage(」Howdy!」); 
    通常來講,在組內收發消息和兩人對話相似。而且提供了列出組內其餘人的方法。 
    併發

  • 使用Java連接Gtalk服務 

    既然想和 Gtalk通訊,那麼首先怎樣才能用Java連上Gtalk呢?而Gtalk採用了基於Jabber的 XMPP協議, 一個開源的即時通訊平臺,那麼他確定兼容任何一個使用XMPP協議的庫。很幸運,Jive SoftWare的Smack就是這樣一個簡單的並且好用的Jabber 客戶端類庫。 從Smack2.0後,增長了GoogleTalkConnection,這樣你就能夠很是簡單的鏈接Gtalk服務器了,不用再設定Host、Port了 。使用下面幾行代碼就能夠鏈接到Gtalk了: 

    GoogleTalkConnection con = new GoogleTalkConnection(); 
    con.login(」joesmith」, 「password」); 
    con.createChat(」maryjane@gmail.com」).sendMessage(」Howdy!」); 
    con.close(); 

    在測試過程�發現應該注意下面的一些問題: 

    login�的用戶名是不須要@gmail.com這個後綴的 
    接受方必定要是對方Gtalk的全稱。 
    接受方應該在你的好友列表裏面,負責對方會收不到任何信息的。 
    很簡單,但仍是比較有趣的。好比你能夠把某個文本�的內容一行行的讀出來,而後發送給對方,就像看小說同樣。呵呵!測試

相關文章
相關標籤/搜索