天天看點

XMPP用戶端庫Smack 4.0.6版開發之五四、使用Chat消息通信

版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chszs/article/details/41620843

XMPP用戶端庫Smack 4.0.6版開發之五

作者:chszs,轉載需注明。部落格首頁:

http://blog.csdn.net/chszs

四、使用Chat消息通信

來回收發消息是即時通信的核心功能。盡管單條消息是以包的形式發送和接收的,通常還是把他視為聊天的消息字元串,使用org.jivesoftware.smack.Chat類。

1、Chat類

一個聊天Chat會在兩個使用者之間建立一個消息線程(通過線程ID)。下面的代碼片段示範了怎樣建立一個新聊天,然後向使用者發送一條文本消息:

//假設已經建立了一個名為"connection"的XMPPConnection

ChatManagerchatmanager = connection.getChatManager();

ChatnewChat = chatmanager.createChat("[email protected]", newMessageListener(){

    public void processMessage(Chat chat,Message message){

        System.out.println(“Receivedmessage: “+ message);

    }

});

try{

    newChat.sendMessage(“Howdy!”);

}catch(XMPPExceptione){

    System.out.println(“Error Deliveringblock”);

}

Chat.sendMessage(String)方法可以友善地建立一個消息Message對象,用字元串參數設定消息正文Body,然後發送消息。在某些情況下你可能希望在發送消息前設定額外的值,使用Chat.createMessage()方法和Chat.sendMessage(Message)方法,如下面的代碼片段所示:

MessagenewMessage = new Message();

newMessage.setBody(“Howdy!”);

message.setProperty(“favoriteColor”,“red”);

newChat.sendMessage(newMessage);

前面的例子中,我們可以注意到,在建立聊天Chat時指定了一個消息監聽器MessageListener,在任意時刻,當來自其它使用者的聊天消息到達後,消息監聽器會得到通知。下面的代碼片段使用了監聽器做鹦鹉學舌,它會回顯來自其他使用者傳遞的消息。

//假設在聊天Chat中已經設定了消息監聽器MessageListener

publicvoid processMessage(Chat chat, Message message){

    // 把使用者發送的消息内容發送給使用者

    chat.sendMessage(message.getBody());

2、來電聊天

當提示有另一個使用者的聊天消息到了後,設定有輕微的不同,因為你是首次接收到聊天消息。取代明确地建立一個Chat來發送消息,當ChatManager建立了Chat執行個體後,你需要注冊處理新建立的Chat執行個體。ChatManager會通過線程ID找到比對的Chat,如果Chat不存在,那麼它會建立一個新Chat對象來比對。要得到這個新Chat,你必須注冊來得到通知。可以注冊一個消息監聽器來接收所有要到來的消息。

//假定已經建立了名為”connection”的XMPPConnection

ChatManagercm = connection.getChatManager().addChatListener(new ChatManagerListener(){

    @Override

    public void chatCreated(Chat chat, BooleancreatedLocally){

        if(!createdLocally)

            chat.addMessageListener(newMyNewMessageListener());

除了基于線程的Chat消息,也有一些用戶端不發送線程ID作為Chat的一部分。要處理這種情況,Smack會基于JID嘗試比對接收的消息到最比對現有的Chat。它會嘗試用完整的JID來查找Chat,如果搜不到,再嘗試用基本的JID來查找Chat。如果找不到現有的Chat來比對,那麼會建立一個新Chat。

繼續閱讀