zoukankan      html  css  js  c++  java
  • 创建agsXMPP 自定义packet types

    在网上看了好多文章基本都是转载 没有能成功运行的,又没有别的资料,很是费解,无奈之下只好潜心研究,最终总结了几个要点给大家分享下,以免再次多浪费时间

    agsXMPP是什么就不多描述了,重点说下我在创建自定义包时注意的地方

    先看使用方式:

    1 使用IQ的tag为类名的方式,自定义包代码如下

    using agsXMPP.Xml.Dom;
    public class UserCustom : Element
    {
        public UserCustom()
        {
            base.TagName = "UserCustom";//第一种方式这个地方要和类名相同
         this.Namespace = "agsoftware:UserCustom"; } public string MsgString { get { return base.GetTag("MsgString"); } set { base.SetTag("MsgString", value); } } }

    然后在元素工厂中注册这个新类。如果不注册,在解析XML流时XML解析器就不会生成自定义对象。

     agsXMPP.Factory.ElementFactory.AddElementType("UserCustom", "agsoftware:UserCustom", typeof(UserCustom));

    注意:以上两段代码中红底的地方一定一致!如果你发现service端创建的是agsXMPP.Xml.Element的一个实例,那就要检查一下这两个地方

    然后是发送代码:

                UserCustom uc = new UserCustom();
                uc.MsgString = "这个是自定义消息:" + rtb_send.Text;
                IQ iq = new IQ();
                iq.AddChild(uc);
                iq.To = new Jid(name, "localhost", "resourse");
                iq.Type = IqType.get;
                con.Send(iq);

    service端

            private void streamParser_OnStreamElement(object sender, Node e)
            {
                 if (e.GetType() == typeof(IQ))
                 {
              IQ iq = e as IQ;
    if (iq.HasTag(typeof(UserCustom))) { //逻辑处理 } } }

    2 使用IQ的tag为query的方式,自定义包代码如下

    using agsXMPP.Xml.Dom;
    public class UserCustom : Element
    {
        public UserCustom()
        {
            base.TagName = "query";//注意这个位置
            this.Namespace = "agsoftware:UserCustom";
        }
        public string MsgString
        {
            get
            {
                return base.GetTag("MsgString");
            }
            set
            {
                base.SetTag("MsgString", value);
            }
    
        }
    }

    然后在元素工厂中按如下方式注册这个新类

    agsXMPP.Factory.ElementFactory.AddElementType("query", "agsoftware:UserCustom", typeof(UserCustom));

    注意:标红的代码,否则服务端总是创建的agsXMPP.Xml.Element实例

    发送代码是一样的,服务端代码如下

            private void streamParser_OnStreamElement(object sender, Node e)
            {
                 if (e.GetType() == typeof(IQ))
                 {
              IQ iq = e as IQ;
                     if (iq.Query != null)
                     {
                         if (iq.Query.GetType() == typeof(UserCustom))
                           {
                               //逻辑处理
                           }    
                  }
                 }
             }

    以上纯个人见解,如有误导请多包涵,还望高手多多指教~

    本文只是简单的说明下在自定义包时注意事项,如有其他不明白的地方可以参照网上其他资料详细了解下,我也是刚刚学习agsXMPP,希望与大家多多交流

  • 相关阅读:
    MySQL 数据库入门操作
    select count(*)和select count(1)
    Oracle instr 及 like
    myeclipse添加svn
    Lanucherr 默认显示第几屏
    【毕设】班级管理系统——易搜
    【毕设】班级管理系统——找回密码模块
    【毕设】班级管理系统——登录模块
    【毕设】班级管理系统——系统介绍
    快速生成扇形图
  • 原文地址:https://www.cnblogs.com/huzhenchao/p/3270053.html
Copyright © 2011-2022 走看看