来回发送消息的核心是即时消息。尽管个别的消息可以作为packet发送和接收,通常使用org.jivesoftware.smack.Chat类,字符串消息作为一个chat更容易处理。
chat创建在两个用户之间一个新消息线程(使用一个线程ID)。下面的代码段演示了如何创建一个用户新的Chat,然后向他们发送文本消息。
// Assume we've created a Connection name "connection".
ChatManager chatmanager = connection.getChatManager();
Chat newChat = chatmanager.createChat("jsmith@jivesoftware.com", new MessageListener() {
public void processMessage(Chat chat, Message message) {
System.out.println("Received message: " + message);
}
});
try {
newChat.sendMessage("Howdy!");
} catch (XMPPException e) {
System.out.println("Error Delivering block");
}
Chat.sendMesage(String)方法是创建一个消息对象很方便的方法,使用字符串参数设置body,然后发送消息。在这种情况下你想在消息发送前设置额外的值,使用Chat.createMessage()和Chat.setMessage(Message)方法,正如下面的代码片段:
Message newMessage = new Message();
newMessage.setBody("Howdy!");
message.setProperty("favoriteColor", "red");
newChat.sendMessage(newMessage);
你也将注意到在这个例子前面,我们在创建一个chat的时候指定了一个消息监听器。这个监听器在chat中任何消息从其他的用户抵达的时候被通知。下面的代码段使用这个监听器作为parrot-bot--它返回其他用户类型发送的一一切。
// Assume a MessageListener we've setup with a chat.
public void processMessage(Chat chat, Message message){
// Send back the same text the other user sent us.
chat.sendMessage(message.getBody());
}
传入Chat
当chat由其他用户发起的时候,因为你首先获取一个chat消息,这个步骤略有不同。替代明确创建一个chat来发送消息,你需要注册器来处理新创建的Chat实例,当ChatManager创建它们的时候。
ChatManager将找到一个匹配的chat(通过线程id),如果没有已存在的时候,它将会创建一个新的匹配。为了获取这个新的chat,你必须注册当它发生的时候被通知。你能注册一个消息监听器来获取所有功能消息作为这个handler的一部分。
// Assume we've created a Connection name "connection".
ChatManager chatmanager = connection.getChatManager().addChatListener( new ChatManagerListener() {
@Override
public void chatCreated(Chat chat, boolean createdLocally) {
if (!createdLocally)
chat.addMessageListener(new MyNewMessageListener());;
}
});
除了基于线程的chat消息,也有一些客户端没有发送一个线程id作为chat的一部分。为了处理这中场景,Smack将会尝试让最适合的存在的chat匹配传入的消息,基于JID。它将尝试找到一个完全相同JID的chat,如何这个失败,它将会尝试基于JID。如果没有用户能找到的存在的chat,然后就会创建一个新的。
分享到:
相关推荐
Android 链接openfire的smack库
Big Data SMACK: A Guide to Apache Spark, Mesos, Akka, Cassandra, and Kafka by Raul Estrada, Isaac Ruiz English | ISBN: 1484221745 | 2016 | EPUB | 264 pages | 2.35 MB This book is about how to ...
Smack About Smack is an open source, highly modular, easy to use, XMPP client library written in Java for Java SE compatible JVMs and Android. A pure Java library, it can be embedded into your ...
smack发送消息 smack相关的两个包
SMACK既是模块化软件验证工具链,又是独立的软件验证程序。 它可以用来验证其输入程序中的断言。... 要了解最新消息,您可以观看SMACK的Github页面,也可以加入邮件列表。 即使没有Google帐户,您也可以通过发送邮
org.jivesoftware.smack-3.2.2.jar
这一节中我们着力介绍如何基于asmack开发一个Android的客户端,本篇的重点在实践,讲解和原理环节,大家可以参考前面我所发布的OpenFire和Smack的相关文章。今天所讲解的文章只是 :基于Smack3.0.4+ Openfire3.10.2...
它主要由用于构建 Android 版本的 Smack。 但是由于 aSmack 只是在 Smack 分支上更改了一些内容并添加了补丁,因此这些分支也可以在非 Android 环境中使用。分行掌握xep0198 上游的smack-aiv smack 来自 ,他也在...
openfire4.2.1 + smack4.2.2即时通信工具开发(android端登录、发送消息、接收消息),请参见我的博客http://blog.csdn.net/wangearn/article/details/79096347
Android使用smack连接ejabberd服务器,完成了连接、登录、创建新用户、收发消息的功能
基于Smack3.0.4+ Openfire3.10.2开发之Android 客户端之四(消息会话、联系人、设置与XMPP 服务器交互)
smack用于android移动端的开发,可以结合openfire使用,进行im通信
android openfire xmpp smack即时通讯,包括:聊天发生文字,表情,图片,语音。添加删除好友,消息提醒,群聊,邀请好友进入房间,聊天记录保存等等。界面美观。最后说明:此demo是在网上一个叫EIM企信通的demo基础...
XMPP+Openfire4.5.1+Smack4.3.4+MySql,支持手机对手机,手机对PC(Spark)的消息收发
1)smack api,基于smack官方javadoc制作而成,格式chm,语言english; 2)smack documentation,内容包括Overview,Getting Started Guide等等,格式chm,语言为中文(感谢fhqdddddd的奉献,本文档基于...
它是纯Java库,可以嵌入到您的应用程序中,以创建从完整的XMPP即时消息客户端到简单的XMPP集成(例如发送通知消息和支持状态的设备)的所有内容。 Smack和XMPP允许您在人类和非人类端点(M2M,IoT,…)之间以多种...
作为纯Java库,它可以嵌入到您的应用程序中,以创建从完整的XMPP即时消息传递客户端到简单的XMPP集成(例如发送通知消息和支持状态的设备)的任何内容。 Smack和XMPP允许您在人类和非人类端点(M2M,IoT,…)之间以...
Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档
将 Swing 应用程序框架 (JSP-296) 的实现与 SwingX Swing 扩展相结合,增加了一些趣味。
一个简单的demo用于登陆Openfire 发送消息,接收消息,发送表情等功能