创建agsXMPP 自定义packet types

本文详细介绍了在agsXMPP中创建自定义包时的注意事项,包括使用IQ的tag为类名和query的方式,以及如何正确注册自定义包、发送自定义消息。同时提供了解析XML流时的逻辑处理示例。

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

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

 

转载于:https://www.cnblogs.com/huzhenchao/p/3270053.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值