public String SendPresence(String from, String to, String type,String Status) {
String domain = JiveGlobals.getProperty("xmpp.domain");
StringBuffer result = new StringBuffer();
result.append("<?xml version='1.0' encoding='UTF-8'?>");
result.append("<SendPresence>");
result.append("<Presence>");
result.append("<From>" + from + "</From>");
result.append("<To>" + to + "</To>");
result.append("<msg>" + type + "</msg>");
result.append("<Domain>" + domain + "</Domain>");
result.append("</Presence>");
result.append("<result>");
XMPPServer server = XMPPServer.getInstance();
SessionManager sessionManager = server.getSessionManager();
PresenceRouter presenceRouter=server.getPresenceRouter();
Presence presence = new Presence();
presence.setFrom(from);
presence.setTo(to+"@"+domain);
//空闲 在线
presence.setStatus(Status);
if("0".equals(type)){
//聊天框上面的状态
presence.setShow(Presence.Show.away);
}else{
presence.setShow(Presence.Show.chat);
}
result.append("1");
try {
presenceRouter.route(presence);
for (ClientSession cs : sessionManager.getSessions()) {
cs.process(new NovonOpenfireStatusIQ(1, presence.getStatus(),
cs.getAddress(), presence.getFrom()));
}
} catch (Exception e) {
Log.error("WebService SendPresence:" + e);
result.append("0");
}
result.append("</result>");
result.append("</SendPresence>");
return result.toString();
}
其中 NovonOpenfireStatusIQ 定义为 如下
import jit.base.dom.common.ElementName;
import jit.base.dom.common.NameSpace;
import jit.base.dom.status.StatusNode;
import jit.base.dom.status.StatusRoot;
import org.dom4j.Element;
import org.xmpp.packet.IQ;
import org.xmpp.packet.JID;
public class NovonOpenfireStatusIQ extends IQ {
public NovonOpenfireStatusIQ(int available, String status, JID to, JID from) {
this.setTo(to);
this.setFrom(from);
init(available, status);
}
void init(int available, String status) {
Element childElement;
childElement = setChildElement(ElementName.PRESENCECHANGED, NameSpace.STATUS_CHANGED);
StatusRoot sroot = new StatusRoot();
StatusNode statusNode = new StatusNode(getFrom().toString(), available, status);
sroot.add(statusNode);
childElement.add(sroot.getXml());
}
}