XMPP客户端库Smack 4.0.6版开发之五

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/41620843 XMPP客户端库Smack 4.0.6版开发之五作者:chszs,转载需注明。
版权声明:本文为博主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("jsmith@jivesoftware.com", 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。


目录
相关文章
|
3月前
|
消息中间件 JavaScript Java
跨平台 AMQP 客户端开发指南
【8月更文第28天】高级消息队列协议 (AMQP) 是一种开放标准的应用层协议,用于中间件。它定义了消息如何在消息代理(通常是消息队列服务器)与客户端应用程序之间传递。本文将指导您如何为不同的编程语言构建跨平台的 AMQP 客户端,并提供一些具体的代码示例。
73 1
|
消息中间件
.net平台的rabbitmq使用封装(二)
.net平台的rabbitmq使用封装(二)
356 0
.net平台的rabbitmq使用封装(二)
|
消息中间件 存储
.net平台的rabbitmq使用封装(一)
.net平台的rabbitmq使用封装(一)
417 0
.net平台的rabbitmq使用封装(一)
|
iOS开发 数据格式 XML
XMPP客户端库Smack
原文博客地址:http://blog.csdn.net/chszs/article/details/41576877
852 0
XMPP客户端库Smack 4.0.6版开发之六
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/41620853 XMPP客户端库Smack 4.0.6版开发之六 作者:chszs,转载需注明。
778 0
|
数据安全/隐私保护 安全
XMPP客户端库Smack 4.0.6版开发之四
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/41620825 XMPP客户端库Smack 4.0.6版开发之四 作者:chszs,转载需注明。
887 0
|
数据安全/隐私保护 安全 开发者
XMPP客户端库Smack 4.0.6版开发之三
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/41594855 XMPP客户端库Smack 4.0.6版开发之三 作者:chszs,转载需注明。
746 0