openfire插件开发续一
来源:互联网 发布:证件照片软件下载 编辑:程序博客网 时间:2024/04/29 20:47
Openfire插件开发环境已经搭建起来了,现在开始开发了。
技术:xmpp4r, java, openfire, xmpp,jabber
需求定义:
1,用户注册的时候,需要定义一些新的字段: age, gender, mood等
2,用户可以修改个人的信息和心情(mood)
3,用户可以给指定的用户发送礼物
开发过程:
xmpp的关键节点
presence: 控制并报告实体的可访问性
message: 一个实体向另外的实体发送消息,还可以使用来传输任何类型的结构化数据
发送后不管类型,没有内在的可靠性
iq: 信息与查询,提供请求与响应机制
type: get, set, result, error
开发插件其实就是扩展这些节点,我扩展的是 IQ 节点的命名空间namespace, xmlns
xmpp4r的测试代码如下
xmpp4r 如何构造 xmpp节点?
如上的代码可以参考用于构造 节点
补充代码,如何给reply的xml加子字节?
xmpp4r 如何取得xmpp server的返回值?
所以,可以通过 tiq.elements["reason"].text 取值
如下是一个完整的参考例子
技术:xmpp4r, java, openfire, xmpp,jabber
需求定义:
1,用户注册的时候,需要定义一些新的字段: age, gender, mood等
2,用户可以修改个人的信息和心情(mood)
3,用户可以给指定的用户发送礼物
开发过程:
xmpp的关键节点
presence: 控制并报告实体的可访问性
message: 一个实体向另外的实体发送消息,还可以使用来传输任何类型的结构化数据
发送后不管类型,没有内在的可靠性
iq: 信息与查询,提供请求与响应机制
type: get, set, result, error
开发插件其实就是扩展这些节点,我扩展的是 IQ 节点的命名空间namespace, xmlns
xmpp4r的测试代码如下
# -*- encoding : utf-8 -*-#该程序主要是向openfire发送信息#用户已经在openfire注册了,测试帐号是:tester001,密码是123456#接受信息帐号:tester002,密码: 123456#openfire帐号已经启动了require 'xmpp4r'require 'xmpp4r/client'require 'xmpp4r/roster/iq/roster'include JabberJabber::debug = false # 开启jabber的debug模式#----------------------------用户登录---------------------------------server_str = 'tester002@192.168.1.126/testing' #用户名@服务器地址/资源号(资源号可以任意设定)jid = JID::new(server_str)password = '123456'cl = Client::new(jid)cl.connectcl.auth(password)#----------------------------发送简单的消息-------------------------------to = "tester002@192.168.1.126/testing"subject = "测试xmpp4r,发送消息"body = "此处是消息的主题部分,应该可以看到很多字哦。"m = Message::new(to, body).set_type(:normal).set_id('1').set_subject(subject)cl.send m#----------------------------取得注册的基本信息register----------------------#openfire的返回字段:[nil, ["username", "password", "email", "name", "registered"]]puts "可以看到注册信息哦----------------"rinfo = cl.register_infoputs rinfo.inspect#----------------------------注册会员-----------------------------------------puts "开始注册了,兄弟:)"#iq_reg = Iq.new_register("user_from_xmpp4r","123456");#puts iq_reg.inspectiq_reg = Iq.new(:set)query = IqQuery.newquery.add_namespace('jabber:iq:register')query.add(REXML::Element.new('username').add_text("hexudong"))query.add(REXML::Element.new('password').add_text("123456"))query.add(REXML::Element.new('age').add_text("25"))query.add(REXML::Element.new('gender').add_text("m"))query.add(REXML::Element.new('mood').add_text("今天天气不错~~~"))iq_reg.add(query)cl.send(iq_reg)#---------------------------修改个人信息哦--------------------------------------------puts "修改个人信息了哦"iq_update = Iq.new(:set)query = IqQuery.newquery.add_namespace('jabber:iq:updateuserinfo')query.add(REXML::Element.new('username').add_text("hexudong"))query.add(REXML::Element.new('age').add_text("26"))query.add(REXML::Element.new('gender').add_text("m"))query.add(REXML::Element.new('mood').add_text("来吧,兄弟们~~~"))iq_update.add(query)cl.send(iq_update)#发送鲜花,xml:#<iq id='gift' type='get'>#<query xmlns='openfire:rayclear:gift'>#<host>tester001@192.168.1.126/testing</host>#</query>#</iq>puts "开始发送鲜花了,:)"iq = Iq.new(:get)iq.add_attribute("id", "gift")namespace = "openfire:rayclear:gift"query = IqQuery.newquery.add_namespace(namespace)query.add(REXML::Element.new('host').add_text("tester001@192.168.1.126/testing"))iq.add(query)puts cl.send iq# Shutdowncl.close
xmpp4r 如何构造 xmpp节点?
iq = Iq.new(:set) bind = iq.add REXML::Element.new('bind') bind.add_namespace @stream_features['bind'] if desired_resource resource = bind.add REXML::Element.new('resource') resource.text = desired_resource endElement userIdentity = DocumentHelper.createElement("identity"); userIdentity.addAttribute("category", "account"); userIdentity.addAttribute("type", "anonymous"); anonymousUserIdentities.add(userIdentity); userIdentity = DocumentHelper.createElement("identity"); userIdentity.addAttribute("category", "account"); userIdentity.addAttribute("type", "registered"); registeredUserIdentities.add(userIdentity); userFeatures.add(NAMESPACE_DISCO_INFO);
如上的代码可以参考用于构造 节点
补充代码,如何给reply的xml加子字节?
reply.setType(IQ.Type.error);Element reason = DocumentHelper.createElement("reason");reason.addNamespace("", NAME_SPACE);reason.setText("您没有足够多的礼物赠送了!");reply.setChildElement(reason);
xmpp4r 如何取得xmpp server的返回值?
cl.send iqcl.add_iq_callback do |tiq| puts "come here: -------------:" + tiq.to_s # debugger puts tiq.to puts tiq.elements["reason"].text #cl.send iqendsleep 30返回的 tiq 是一个 REXML::Element
所以,可以通过 tiq.elements["reason"].text 取值
如下是一个完整的参考例子
require 'xmpp4r/client'# Create a *very* simple dictionary using a hashhash = {}hash['ruby'] = 'Greatest little object oriented scripting language'hash['xmpp4r'] = 'Simple XMPP library for ruby'hash['xmpp'] = 'Extensible Messaging and Presence Protocol'# Connect to the server and authenticatejid = Jabber::JID::new('bot@default.rs/Home')cl = Jabber::Client::new(jid)cl.connectcl.auth('password')# Indicate our presence to the servercl.send Jabber::Presence::new# Send a salutation to a given user that we're readysalutation = Jabber::Message::new( 'hal@default.rs', 'DictBot ready' )salutation.set_type(:chat).set_id('1')cl.send salutation # Add a message callback to respond to peer requestscl.add_message_callback do |inmsg| # Lookup the word in the dictionary resp = hash[inmsg.body] if resp == nil resp = "don't know about " + inmsg.body end # Send the response outmsg = Jabber::Message::new( inmsg.from, resp ) outmsg.set_type(:chat).set_id('1') cl.send outmsgend# Runwhile 1end
openfire如何在服务器端截取字符串
相关文章:
openfire插件开发
openfire插件开发续一
- openfire插件开发续一
- openfire 插件开发一
- 【插件开发一】开发简单OpenFire插件
- 【插件开发一】开发简单OpenFire插件
- 【插件开发一】开发简单OpenFire插件
- openfire插件开发续二
- openfire插件最佳实践(一)简单插件开发
- openfire插件最佳实践(一)简单插件开发
- Openfire插件开发
- Openfire插件开发
- Openfire 插件开发记录
- 使用openfire开发插件
- openfire 开发插件
- Openfire插件开发小结
- openfire插件开发全过程
- 开发Openfire聊天记录插件
- Android openfire插件开发
- OpenFire插件开发笔记
- 远程桌面连接由于网络错误而丢失
- android BroadcastReceiver 生命周期的问题
- 第八周作业任务一方案三
- 分页控件 AspNetPager 的使用
- 【零基础学习php二】 php 数据类型
- openfire插件开发续一
- window.showModalDialog以及window.open用法简介
- Qt测试框架的扩展
- UltraEdit高级教程之列模式、排序操作
- mysql 学习小结
- html标签
- bash技巧:求集合的交集、并集、差集、对称差集
- NetBeans无法激活J2ME组件的解决方法
- Android如何使用样式创建半透明窗体