参考英文网站:
http://yourpalmark.com/2009/07/30/writing-xiff-extensions-to-pass-custom-data-over-xmpp/
翻译如下:(英文不咋的,只能用google翻译如下)
正如我在以前的帖子提到的,我正在努力建立一个聊天室使用的XMPP(Jabber的)和XIFF AS3的空气污染指数。
如果您不知道如何获得与XMPP和XIFF开始,请务必检查该职位让你启动和运行。
有一次,我成功地制定了利用XIFF连接XMPP和来回传递数据之间的服务器和客户端,我很快意识到,我想和聊天室中的每个用户自定义的数据关联。
XMPP协议的核心协议中用来表示一个用户的当前网络的可用性(离线或在线等)的存在。
在IM,你知道当你的好友上线,成为不可用,等等,因为你订阅他们的存在。
用户的存在也发送到聊天室时,他/她加入了房间。
默认存在的数据通常只包含有关用户的状态(离开,忙碌,可等)信息。
这个问题,我很快跑到我的聊天室进入,是我们的网站已经有与每个用户(身份证,用户名,图片等),我想这与联想的聊天用户没有数据相关的数据收集大量用户重复数据。
最好的地方似乎是他们的存在直接联系,因为它已经与每个用户。唯一的问题我已经是解决如何做到这一点。
我很快意识到,在XMPP规范是极为良好的可扩展并通过与XIFF试图在它的图书馆管理的可扩展性,以及思想。
在XIFF,扩展可以添加到任何发送到XMPP服务器XMPPStanza。
默认情况下,有三个核心的XMPP stanzas, IQ, Message and Presence.
其中的每个节都有一addExtension()方法。
我需要做的就是编写一个定制的扩展类,我可以传递到存在的addExtension()方法。
getNS()将返回自定义唯一的命名空间,您将需要创建和扩展与此关联。
例如:http://yourdomain.com/extensionname
getElementName()将返回基地的XML元素名称与此相关联的延伸。
例如:extension_name
要实现ISerializable,你将需要添加序列化()和反序列化()方法。
serialize()来将数据转换成XML类型的扩展要传递给服务器,而反序列化()会得到相反效果,并转换成类型化延伸,收到的XML数据。
欲了解更多这方面的详细资料,请一定要看看在XIFF的库中现有的一些扩展。
一旦类完成后,您将需要注册与XIFF延伸。这个注册过程中通知的特定扩展XIFF,以便它知道如何处理它时,它是在网络上获得。
这可以通过调用ExtensionClassRegistry.register(CustomExtension)任何时间,然后再尝试通过对XMPP协议扩展。
大多数扩展提供了一个静态使()与在它上面的代码的方法来处理这个注册过程。
在这一点上,你可以创建一个核心XMPP的叙述(智商,消息,或存在)和一个新的扩展的实例,然后使用addExtension()方法的核心节通过在您的扩展任何实例。
最后一步是调用Send()在您的XMPP协议的XMPP节在通过连接方法。
要完成我的例子中,我创建了一个自定义用户扩展了用户的ID,名称,图片等,并附加到用户的存在。
这可能是因为上述的连接上发送和XMPP的用户订阅我的存在任何方法,可以得到自定义扩展,以及通过。
有一件事情我想做的就是加入聊天室,并同在该房间内得到广播现有的用户都存在这一习俗相关的信息资料。
我花了一点点认识到客房类有一本已经功能。就像我说,XMPP协议已经想到了一切。
当您加入一个聊天室,你叫客房的join()方法,第二个参数允许你添加一个扩展阵列的存在。只要您的自定义实例驻留期限延长,并封装在一个数组,并传递到join()方法调用它。
希望这有助于指出,登上了XMPP协议自定义发送数据XIFF卡住等。