tigase插件开发官方地址:http://www.tigase.org/content/plugin-development
下面是自己的翻译加理解,英文一般,如果有误请大家指出。
-----------------------------------------------------------------------------------------------------
**************************************************简介*****************************************
每个PACKETS都会经过SM(session manager)的四个处理步骤:
1,Pre-processing
为了不影响Session Manager的性能需要限制该方法处理时间为极小值,用于判断当前package是否应该被阻塞,如果返回为true,则表示阻塞。(应该只要有一个pre-processor阻塞就算阻塞)
2,Processing
如果一个Package没有被任何的pre-processors阻塞,则继续执行该方法。所有对当前XML段感兴趣的processor都会将该段加入到独立的线程里运行,这些现成使用内部固定的队列。当所有感兴趣的processor都执行完后就可以得到通知进入下一步。
3,post-processor
对于在第2步中没有被任何processor处理的package将会通过所有的post-processors,并被最后一个post-processor转发到一个目的地,大多数情况是以<message/>的形式被转发。
4,filter
对于以上三步任何形式的结果result输出,都会被所有的filters拦截过滤,这些结果可能最终被拦截也可能被放行。
由于session manager和processors都是消费者,所以在所有的processors中应该至少有一个processor新建一个package并发送给某个目标。
***************************************************深入*****************************************
当需要编写一个自己的PLUGIN的时候根据上面的步骤分别需要实现以下四个接口:
1,XMPPPreprocessorIfc
2,XMPPProcessorIfc
3,XMPPPostprocessorIfc
4,XMPPPacketFilterIfc
这四个接口各需要实现一个简单的方法,每个方法的参数类似,参数描述如下:
-Packet packet 需要被处理的PACKET,该PACKET不能为NULL虽然在PROCESS处理过程中无法修改它
-XMPPResourceConnection session 用于保存所有用户的数据,它提供权限访问用户的仓库数据,在没有在线用户SESSION的情况下该参数可以为null
-NonAuthUserRepository repo 该参数往往在参数session为NULL的时候被使用,它用于为不在线的用户保存私有或公开的数据信息。
-Queue<Packet> results 这个为输入数据包的处理结果产生的数据包集合,它总被要求一定要存放一个输入数据包PACKET的备份到里面,其实包含了所有需要处理的PACKET,包括process生成的结果packet。
-Map<String, Object> settings 为PLUGIN制定配置信息,一般情况下不需要使用,然而如果需要访问额外的数据库则可以通过配置文件将数据库连接字符串传给plugin
*****************************************************实战****************************************
编写的时候根据自己需要来决定实现哪个接口,当然也可以实现多个接口。
具体操作参考http://www.tigase.org/content/writing-plugin-code
配置plugin,假如新建的plugin的ID为myplugin,则修改运行时加载的文件init.properties,加入如下一行
--sm-plugins=+myplugin,-oldplugin
表示装载进去新的myplugin,同时不去加载oldplugin
下面是自己写的一个自定义PLUGIN:
/**
*/
public class SearchProcessImpl extends XMPPProcessorAbstract implements XMPPProcessorIfc{
/** Class loggeer */
private static final Logger log = Logger.getLogger(SearchProcessImpl.class.getName());
private static final SimpleParser parser = SingletonFactory.getParserInstance();
private static final String[] searchConditions = new String[]{"userId", "email"};
private static final String XMLNS = "jabber:iq:search";
private static final String[] ELEMENTS = { "query" };
/** Define the plugin ID **/
private static final String ID = XMLNS;
@Override
public void processFromUserToServerPacket(JID connectionId, Packet packet,
XMPPResourceConnection session, NonAuthUserRepository repo,
Queue<Packet> results, Map<String, Object> settings)
throws PacketErrorTypeException {
//处理客户端发送过来的packet
}
@Override
public void processServerSessionPacket(Packet packet,
XMPPResourceConnection session, NonAuthUserRepository repo,
Queue<Packet> results, Map<String, Object> settings)
throws PacketErrorTypeException {
//处理服务器内部的packet
}
@Override
public String id() {
return ID; }
@Override
public String[] supElements() {
return ELEMENTS;
}
/**
* Method description
*
*
* @return
*/
@Override
public String[] supNamespaces() {
return new String[]{XMLNS};
}
}
该方法用于在tigase中实现XMPP协议中的java:iq:search功能。
写完之后修改启动配置文件ini.properties为:
--sm-plugins=......,+java:iq:search
其中java:iq:search与类中的ID属性值相同
此时,当你用PIS在客户端想服务器端发送如下XML片段的时候:
<iq type="get"
id="12244603"
to="tigase-com">
<query xmlns="jabber:iq:search">
</query>
</iq>
类中的方法processFromUserToServerPacket()将会被调用。
分享到:
相关推荐
tigase 7.10 mongodb 3 配置
tigase开发手册很好的介绍了tigase的开发内容,及其能进行的开发思路,所需要的操作。
tigase-server 配置相关内容 https://blog.csdn.net/w690333243/article/details/90550837
描述了在tigase 7.0版本上如何配置Monitor模块,包括客户端和服务器部分。
全面:tigase 完全实现了XMPP协议,除了全面实施的两个...可扩展:设计之初,Tigase就是可扩展的,支持自定义插件,开发者可以很轻松的扩展他的功能。插件开发,Tigase支持多种语言,Groovy(建议),Scala,Python,Ruby。
描述了如何部署tigase http-api模块,此方式为源码部署
tigase 组件源代码,未编译,大家方便下载
tigase开发指南.pdf
tigase-xmltools-3.4.4.jar(XMPP/Tigase开发java类客户端要使用的xml工具包) 方便用来做xml相关的操作,希望能帮到更多的人。
Tigase 概述,描述了1、为什么选择Tigase 2、RFC的实现 3、Tigase实现的XMPP扩展协议等
tigase-local
tigase相关jar包
tigase快速部署,在linux系统下部署,解压后执行
tigase开发必备组件,需要与 tigase-xml配合使用,否则无效
Spark连接Tigase服务器,完整的步骤,很清晰的看到。大家可以参考。
Tigase Server 是一个轻量级的可伸缩的 Jabber/XMPP 服务器。无需其他第三方库支持,可以处理非常高的复杂和大量的用户数,可以根据需要进行水平扩展。
tigase 集群设置,已实践测试过,本次测试 以两台机器测试的。
tigase 内部处理流程 详解,适合初学者参考。
基于tigase服务器的安卓客户端开发依赖包
tigase-server-tigase-server-8.0.0.zip 源码,不知道怎么设置不用积分下载,不还意思。。。。。。。。。