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

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. vue vue-cli安装

    npm 更新 cnpm install -g npm Vue 的基本用法 Vue 相比于 React 和 Angular 容易上手多了,因此我对 Vue 的学习主要以文档为主,视频为辅(只有像我这种菜 ...

  2. Nginx配置详解

    序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作为HTTP服务器,也 ...

  3. Android Tint

    Android Tint 如果要实现下图效果,第一时间想到的是让 UI 切图,第二时间想到的是自己会被 UI 打死,第三时间想到的是自己会被命名累死.  那么,这该如何快速高效的实现呢? 其实 An ...

  4. 如何修复VUM在客户端启用之后报数据库连接失败的问题

    在上一篇随笔中介绍了关于重新注册VMware Update Manager(VUM)至vCenter Server中的方法,最近有朋友反应,原本切换过去好好的更新服务为什么某次使用一下就不灵了? 当时 ...

  5. MVP社区巡讲-云端基础架构:12月5日北京站 12月12日上海站

    紧跟当今的技术发展趋势还远远不够,我们要引领变革!加入本地技术专家社区,获取真实案例.实况培训演示以及探讨新一代解决方案.在此活动中,您将: 了解如何运用开源(OSS)技术.Microsoft 技术及 ...

  6. JSONP的诞生、原理及应用实例

    问题: 页面中有一个按钮,点击之后会更新网页中的一个盒子的内容. Ajax可以很容易的满足这种无须刷新整个页面就可以实现数据变换的需求. 但是,Ajax有一个缺点,就是他不允许跨域请求资源. 如果我的 ...

  7. Effective前端1:能使用html/css解决的问题就不要使用JS

    div{display:table-cell;vertical-align:middle}#crayon-theme-info .content *{float:left}#crayon-theme- ...

  8. CSS笔记总结

    1.让页面里的字体变清晰和变细 -webkit-font-smoothing: antialiased; 2.让Chrome支持小于12px 的文字 -webkit-text-size-adjust: ...

  9. JavaScript 跨域漫游

    前言: 最近在公司做了几个项目都涉及到了iframe,也就是在这些iframe多次嵌套的项目中,我发现之前对iframe的认识还是比较不足的,所以就静下心来,好好整理总结了iframe的相关知识:&l ...

  10. python 数据类型---布尔型& 字符串

    python数据类型-----布尔型 真或假=>1或0 >>> 1==True True >>> 0==False True python 数据类型----- ...