connection.disconnect();
Messaging using Chat
Chat
org.jivesoftware.smack.Chat
// Assume we've created a XMPPConnection name "connection"._
ChatManagerchatmanager = 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");
}
Message newMessage = new Message();
newMessage.setBody("Howdy!");
message.setProperty("favoriteColor", "red");
newChat.sendMessage(newMessage);
// 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());
}
incoming Chat
_// Assume we've created a XMPPConnection name "connection"._
ChatManagerchatmanager = connection.getChatManager().addChatListener(
newChatManagerListener() {
@Override
public void chatCreated(Chat chat, booleancreatedLocally)
{
if (!createdLocally)
chat.addMessageListener(new MyNewMessageListener());;
}
});
Roster and Presence
roster entries
包含xmpp地址,备注名,群组(假如该用户不属于任何一组,则调用“unfiled entry”):
Roster roster = connection.getRoster();
Collection
for (RosterEntry entry : entries) {
System.out.println(entry);
}
监听roster和presence更改:
Roster roster = con.getRoster();
roster.addRosterListener(new RosterListener() {
// Ignored events public void entriesAdded(Collection
public void entriesDeleted(Collection
public void entriesUpdated(Collection
public void presenceChanged(Presence presence) {
System.out.println("Presence changed: " + presence.getFrom() + " " + presence);
}
});
Provider architecture
smack provider是用于解析packet extension 和 IQ xml流的,有两种类型的provider:
IQProvider -parses IQ request into java objects
Extension Provider - parses XML sub-documents attached to packets into PacketExtension instances. By default, Smack only knows how to process a few standard packets and sub-packets that are in a few namespaces such as:
(解析packet的xml子元素到PacketExtension实例中。Smack默认仅知道处理少数的标准packets和少数的指定的namespaces下的子packets)