<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    lizongbo 的 編程學習

    http://618119.com

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      23 Posts :: 1 Stories :: 78 Comments :: 0 Trackbacks
    1.首先擴展一個IQ:
    源代碼來自:
    java代碼為:
    http://cvs.codehaus.org/viewrep/groovy/groovy/modules/xmlrpc/src/main...

    import org.jivesoftware.smack.packet.IQ;

    /**
    ?* @author John Wilson
    ?*
    ?*/

    public class JabberRPC extends IQ {

    ? ? ? ? private final String xml;

    ? ? ? ? public JabberRPC(final String xml) {
    ? ? ? ? ? ? ? ? this.xml = "<query xmlns='jabber:iq:rpc'>\n" + xml + "\n</query>";
    ? ? ? ? }

    ? ? ? ? public String getChildElementXML() {
    ? ? ? ? ? ? ? ? return this.xml;
    ? ? ? ? }

    }

    2.擴展一個IQProvider.
    源代碼來自:
    http://cvs.codehaus.org/viewrep/groovy/groovy/modules/xmlrpc/src/main...
    java代碼為:
    import org.jivesoftware.smack.packet.IQ;
    import org.jivesoftware.smack.provider.IQProvider;
    import org.jivesoftware.smack.util.StringUtils;
    import org.xmlpull.v1.XmlPullParser;

    /**
    ?* @author John Wilson
    ?*
    ?*/

    public class JabberRPCProvider implements IQProvider {

    ? ? ? ? public IQ parseIQ(final XmlPullParser parser) throws Exception {
    ? ? ? ? ? ? ? ? final StringBuffer buffer = new StringBuffer();

    ? ? ? ? ? ? ? ? // skip the <query> tag by calling parser.next()
    ? ? ? ? ? ? ? ? while (true) {
    ? ? ? ? ? ? ? ? ? ? ? ? switch (parser.next()) {
    ? ? ? ? ? ? ? ? ? ? ? ? case XmlPullParser.TEXT:
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // We need to escape characters like & and <
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? buffer.append(StringUtils.escapeForXML(parser.getText()));
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

    ? ? ? ? ? ? ? ? ? ? ? ? case XmlPullParser.START_TAG:
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? buffer.append('<' + parser.getName() + '>');
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

    ? ? ? ? ? ? ? ? ? ? ? ? case XmlPullParser.END_TAG:
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if ("query".equals(parser.getName())) {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // don't save the </query> end tag
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return new JabberRPC(buffer.toString().trim());
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } else {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? buffer.append("</" + parser.getName() + '>');
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
    ? ? ? ? ? ? ? ? ? ? ? ? default:
    ? ? ? ? ? ? ? ? ? ? ? ? }
    ? ? ? ? ? ? ? ? }
    ? ? ? ? }

    }

    3.在smack中注冊IQProvider .
    java代碼為:
    org.jivesoftware.smack.provider.ProviderManager.addIQProvider("query",
    "jabber:iq:rpc", new JabberRPCProvider());

    4.smack客戶端例子:

    try {
    ? ? ? ? ? ? ? ? ? ? ? ? XMPPConnection con = new XMPPConnection("127.0.0.1", 5222);
    ? ? ? ? ? ? ? ? ? ? ? ? con.login("username", "password");
    ? ? ? ? ? ? ? ? ? ? ? ? //注冊IQProvider
    ? ? ? ? ? ? ? ? ? ? ? ? org.jivesoftware.smack.provider.ProviderManager.addIQProvider(
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "query", "jabber:iq:rpc", new JabberRPCProvider());
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 監聽所有的包
    ? ? ? ? ? ? ? ? ? ? ? ? con.addPacketListener(new PacketListener() {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? public void processPacket(Packet packet) {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (packet instanceof org.jivesoftware.smack.packet.IQ) {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? org.jivesoftware.smack.packet.IQ iq =
    (org.jivesoftware.smack.packet.IQ) packet;
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("rpc內容為 " + iq.getChildElementXML());
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

    ? ? ? ? ? ? ? ? ? ? ? ? }, new org.jivesoftware.smack.filter.PacketFilter() {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? public boolean accept(Packet arg0) {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return true;
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

    ? ? ? ? ? ? ? ? ? ? ? ? });
    ? ? ? ? ? ? ? ? ? ? ? ? con.createChat("xmlrpc.lizongbo.im").sendMessage("測試發送!");
    ? ? ? ? ? ? ? ? ? ? ? ? JabberRPC jp = new JabberRPC("xmlrpc");
    ? ? ? ? ? ? ? ? ? ? ? ? jp.setType(org.jivesoftware.smack.packet.IQ.Type.SET);
    ? ? ? ? ? ? ? ? ? ? ? ? jp.setTo("xmlrpc.lizongbo.im");
    ? ? ? ? ? ? ? ? ? ? ? ? con.sendPacket(jp);
    ? ? ? ? ? ? ? ? ? ? ? ? Thread.sleep(25000);
    ? ? ? ? ? ? ? ? ? ? ? ? con.close();
    ? ? ? ? ? ? ? ? } catch (Exception e) {
    ? ? ? ? ? ? ? ? ? ? ? ? e.printStackTrace();
    ? ? ? ? ? ? ? ? }

    5.服務端回應一個xmlrpc包:
    wildfire中通過插件進行響應:
    public void processPacket(Packet p) {
    ? ? ? ? ? ? ? ? if (p instanceof IQ) {
    ? ? ? ? ? ? ? ? ? ? ? ? IQ iq =(IQ)p;
    ? ? ? ? ? ? ? ? ? ? ? ? IQ niq=IQ.createResultIQ(iq);
    ? ? ? ? ? ? ? ? ? ? ? ? ? Element responseElement=niq.setChildElement("query",
    "jabber:iq:rpc");
    ? ? ? ? ? ? ? ? ? ? ? ? try {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? java.util.Vector v=new ?java.util.Vector();
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? v.add("lizongbo ?xmpp");
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? v.add("jabber-rpc lizongbo");
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? v.add("xep-0009 lizongbo");
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? XmlRpcResponseProcessor xrrp=new XmlRpcResponseProcessor();
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String rs= new String( xrrp.encodeResponse(v, "UTF-8"));
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? org.dom4j.Document re=org.dom4j.DocumentHelper.parseText(rs);
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? responseElement.add(re.getRootElement());
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? componentManager.sendPacket(this, niq);
    ? ? ? ? ? ? ? ? ? ? ? ? } catch (Exception e) {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? e.printStackTrace();
    ? ? ? ? ? ? ? ? ? ? ? ? }
    ? ? ? ? ? ? ? ? }
    ? ? ? ? }

    6.客戶端輸出結果為:

    rpc內容為 <query xmlns='jabber:iq:rpc'>
    <methodResponse><params><param><value><array><data><value>lizongbo
    xmpp</value><value>jabber-rpc lizongbo</value><value>xep-0009
    lizongbo</value></data></array></value></param></params></methodResponse>
    </query>

    posted on 2006-12-04 18:16 lizongbo 的編程學習 閱讀(3857) 評論(0)  編輯  收藏 所屬分類: java開源
    主站蜘蛛池模板: 国产精品视_精品国产免费| 亚洲免费福利视频| 全部免费毛片免费播放| 亚洲精品无码一区二区| 四虎在线视频免费观看| 亚洲国产欧洲综合997久久| 欧洲美熟女乱又伦免费视频| 亚洲人成人网毛片在线播放| 好大好硬好爽免费视频| 国产精品亚洲专区无码牛牛| 四虎国产精品免费视| 天堂亚洲免费视频| 亚洲综合无码AV一区二区| 成人妇女免费播放久久久| 精品亚洲一区二区| 美丽的姑娘免费观看在线播放 | 亚洲综合色丁香婷婷六月图片| 在线观看日本免费a∨视频| 中文字幕无码亚洲欧洲日韩| 国产成人免费手机在线观看视频| 精品久久久久久国产免费了 | 亚洲国产精品网站久久| 成人毛片18女人毛片免费| 337p日本欧洲亚洲大胆人人| 亚洲精品老司机在线观看| 一区二区三区四区免费视频| 国产成+人+综合+亚洲专| 丁香亚洲综合五月天婷婷| 国产精品网站在线观看免费传媒 | 亚洲男同帅GAY片在线观看| 免费人成视频在线观看网站| 亚洲综合一区二区三区四区五区| 亚洲成av人片不卡无码久久| 久久精品一区二区免费看| 日本亚洲免费无线码| 亚洲国产精品人人做人人爽| 最好看最新的中文字幕免费| 国产午夜亚洲精品不卡免下载| 国产亚洲精品a在线无码| 免费无码又爽又刺激聊天APP| eeuss免费天堂影院|