Asmack源码入门(二)

2015-01-26 10:50:58 · 作者: · 浏览: 18
from the server_

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 entries = roster.getEntries();

for (RosterEntry entry : entries) {

System.out.println(entry);

}

监听roster和presence更改:

Roster roster = con.getRoster();

roster.addRosterListener(new RosterListener() {

// Ignored events public void entriesAdded(Collection addresses) {}

public void entriesDeleted(Collection addresses) {}

public void entriesUpdated(Collection addresses) {}

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)