<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開源
    主站蜘蛛池模板: 国产精品亚洲专区在线观看 | 永久免费精品影视网站| 德国女人一级毛片免费| 成人亚洲国产va天堂| 最新中文字幕免费视频| 亚洲欧美综合精品成人导航| 久久不见久久见中文字幕免费| 亚洲六月丁香六月婷婷蜜芽 | ssswww日本免费网站片| 亚洲色欲久久久久综合网| a级毛片免费观看在线| 国产精品亚洲а∨无码播放| 国产激情免费视频在线观看| 亚洲第一中文字幕| 久热中文字幕在线精品免费| 亚洲香蕉在线观看| 国产男女猛烈无遮挡免费视频网站| 337p日本欧洲亚洲大胆人人| 亚洲精品网站在线观看不卡无广告| 日韩在线观看免费| 亚洲成a人片在线观看无码专区| 色欲A∨无码蜜臀AV免费播 | 免费日本一区二区| 国产亚洲国产bv网站在线| 国产一精品一aⅴ一免费| 黄色网页在线免费观看| 亚洲一区二区成人| 日韩精品无码人妻免费视频| 三级片免费观看久久| 日本久久久久亚洲中字幕| 成年女人喷潮毛片免费播放| 免费一级全黄少妇性色生活片| 亚洲欧洲在线观看| 国产精品成人四虎免费视频| 中文毛片无遮挡高清免费| 亚洲天堂一区二区三区| 亚洲国产香蕉人人爽成AV片久久| 一级毛片免费视频| 免费国产a理论片| 亚洲精品一卡2卡3卡三卡四卡| 国产免费卡一卡三卡乱码|