• 创建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,希望与大家多多交流

  • 相关阅读:
    第六十篇、音视频采集硬编码(H264+ACC)
    第十三篇、Swift_Nav自定义返回按钮后或者隐藏导航栏,Pop返回手势失效的解决方法 Pop全局返回添加的方法
    第五十九篇、OC录制小视频
    第五十八篇、iOS 微信聊天发送小视频的秘密
    第五十七篇、AVAssetReader和AVAssetWrite 对视频进行编码
    第五十六篇、OC打开本地和网络上的word、ppt、excel、text等文件
    Objective-C 编码建议
    在block中使用self
    纯代码TableView自适应高度(很老的使用方法)
    iOS应用架构谈 网络层设计方案
  • 原文地址:https://www.cnblogs.com/huzhenchao/p/3270053.html
Copyright © 2020-2023  润新知