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

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

创建agsXMPP 自定义packet types的更多相关文章

  1. USB Packet Types

    USB has four different packet types. Token packets indicate the type of transaction to follow, data ...

  2. 如何创建一个自定义jQuery插件

    简介 jQuery 库是专为加快 JavaScript 开发速度而设计的.通过简化编写 JavaScript 的方式,减少代码量.使用 jQuery 库时,您可能会发现您经常为一些常用函数重写相同的代 ...

  3. 创建用于自定义SharePoint解决方案部署的Visual Studio项目

    转:http://soft.zdnet.com.cn/software_zone/2007/0903/488083.shtml 在基于SharePoint的开发中,我们通常会在WSS的TEMPLATE ...

  4. DB 查询分析器 方便地创建DB2自定义函数

    DB 查询分析器 方便地创建DB2自定义函数                           马根峰            (广东联合电子服务股份有限公司, 广州 510300) 摘要       ...

  5. springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,如果controller、service、dao抛出此类异常说明是系统预期处理的异常信息。

    springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑. 1.1 异常处理思路 系统中异常包括两类:预期异常和运行时异常RuntimeEx ...

  6. 在angular7中创建组件/自定义指令/管道

    在angular7中创建组件/自定义指令/管道 组件 使用命令创建组件 创建组件的命令:ng generate component 组件名 生成的组件组成: 组件名.html .组件名.ts.组件名. ...

  7. [Swift通天遁地]九、拔剑吧-(3)创建多种自定义Segment分段样式的控件

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  8. 怎么在java中创建一个自定义的collector

    目录 简介 Collector介绍 自定义Collector 总结 怎么在java中创建一个自定义的collector 简介 在之前的java collectors文章里面,我们讲到了stream的c ...

  9. 使用 TypeScript,React,ANTLR 和 Monaco Editor 创建一个自定义 Web 编辑器(二)

    译文来源 欢迎阅读如何使用 TypeScript, React, ANTLR4, Monaco Editor 创建一个自定义 Web 编辑器系列的第二章节, 在这之前建议您阅读使用 TypeScrip ...

随机推荐

  1. datepickerx设置默认日期

    datepicher插件是jQuery UI的一个插件,它提供一个日期弹出窗口(或直接显示在页面),供用户选择日期.在Web开发中,总会遇到需要用户输入日期的情况.一般都是提供一个text类型的inp ...

  2. 使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)

    对于开发人员来说,构建一个消费应用程序时去了解各种各样的 API 是一个巨大的挑战.在你的 Web API 项目中使用 Swagger 的 .NET Core 封装 Swashbuckle 可以帮助你 ...

  3. HTML5_04之SVG绘图

    1.关于Canvas绘制图像: 问题:需要绘制多张图片时,必须等待所有图片加载完成才能开始绘制:而每张图片都是异步请求,彼此没有先后顺序,哪一张先加载完成完全无法预测: 方案: var progres ...

  4. 【.net深呼吸】(WCF)OperationContextScope 的用途

    一个WCF服务可以实现多个服务协定(服务协定实为接口),不过,每个终结点只能与一个服务协定关联,并指定调用的唯一地址.那么,binding是干吗的?binding是负责描述通信的协议,以及消息是否加密 ...

  5. 【Win 10 应用开发】通过数据绑定更新进度条

    实现 INotifyPropertyChanged 接口可以在属性更改后通知数据的使用者,这个相信大伙儿都知道.于是,有朋友会问:对于要实时显示进度的情况,比如更新进度条,能用这个实现吗? 当然是可以 ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(21)-权限管理系统-跑通整个系统

    系列目录 这一节我们来跑通整个系统,验证的流程,通过AOP切入方式,在访问方法之前,执行一个验证机制来判断是否有操作权限(如:增删改等) 原理:通过MVC自带筛选器,在筛选器分解路由的Action和c ...

  7. ASP.NET Core 中文文档 第四章 MVC(2.1)模型绑定

    原文:Model Binding 作者:Rachel Appel 翻译:娄宇(Lyrics) 校对:许登洋(Seay).何镇汐 模型绑定介绍 ASP.NET Core MVC 中的模型绑定从 HTTP ...

  8. css3新单位学习

    vw,vh,vmin,vmax vw 1vw = 视窗width*1% vh 1vh = 视窗heihgt*1% 如果视窗的宽度小于高度,1vmin = 1vw,如果视窗宽度大于高度,1vmin = ...

  9. jQuery图片延迟加载

    这里延迟加载的意思是,拖动滚动条时,在图片出现在浏览器显示区域后才加载显示.在这之前全部图片都由一张图片代替.节省流量,减轻服务器负担. 效果展示 http://hovertree.com/texia ...

  10. Asp.net 面向接口可扩展框架之业务规则引擎扩展组件

    随着面向接口可扩展框架的继续开发,有些功能开发出现了"瓶颈",有太多的东西要写死才好做.但写死的代码扩展性是非常的不好,迷茫中寻找出入... 进而想到我以前开发的好几个项目,都已有 ...