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开发手册覆盖了从基础架构知识、开发环境搭建、API变更和插件开发到服务器编译、打包和配置等各个方面,是希望深入定制和开发Tigase服务器的开发者的宝贵资源。通过遵循手册的指导,开发者能够更好...
tigase 7.10 mongodb 3 配置
在开始配置之前,确保你的系统已经安装了Java环境,并且版本与Tigase服务器的要求相匹配。 配置Tigase服务器的第一步是编辑配置文件。在Tigase服务器的根目录下,找到并打开`tigase.conf`文件。这个文件定义了...
7. **API接口**:Tigase 提供丰富的API接口,允许开发者进行二次开发,集成到自己的应用系统中,或者创建自定义插件。 在压缩包中的“tigase-server-8.0.0-b10083”目录下,包含了以下关键文件和目录: - `bin/`:...
在提供的"tigase-local"压缩包中,只有一个文件名`tigase-local`,这可能是指一个包含特定配置或插件的子目录,或者是一个自定义的启动脚本。具体功能需要根据实际文件内容来判断。 **五、常见问题及解决方法** 1....
tigase开发指南.pdf是一份关于tigase服务器的开发指南,旨在帮助开发者更好地理解tigase服务器的组件、插件、配置和数据库存储。 tigase组件: tigase服务器在启动时会初始化并启动相关组件和插件,启动的组件或...
解决这些问题需要开发者熟悉Maven构建工具的使用,了解Eclipse集成开发环境的配置技巧,以及对Tigase以及XMPP协议有一定的了解。因此,源码部署不仅是一种技术活动,更是一种技术能力和知识水平的体现。通过源码部署...
10. **扩展和插件**:Tigase支持多种插件,以实现额外的功能,如多用户聊天室、存储与转发等。可以根据需要安装并配置相应的插件。 以上就是在Linux系统下快速配置和部署Tigase的基本步骤。随着您对Tigase的深入...
5. **插件架构**:Tigase服务器采用插件化设计,允许添加自定义功能。开发者需要学习如何编写和集成插件,以扩展服务器的功能。 6. **性能优化**:通过调整服务器配置,如并发连接数、内存分配等,可以优化Tigase的...
Tigase Monitor配置详解 Tigase Monitor是一款用于监控Tigase XMPP服务器性能和状态的工具,特别适用于Tigase 7.0版本。本文将详细介绍如何在Tigase 7.0上配置Monitor模块,包括客户端和服务器部分。 首先,确保你...
7. **API接口**:Tigase提供了一套API接口,使得开发者可以轻松地开发插件或者集成到其他系统中。 8. **事件驱动编程**:Tigase服务器利用事件驱动模型来处理网络事件,如新连接、消息发送和接收等,这种模式能够...
在部署Tigase服务器7.0.2时,首先需要下载并解压压缩包"tigase-server",然后根据官方文档配置服务器的XML配置文件,如`tigase.conf`。配置内容包括服务器监听端口、数据库连接信息、认证方式等。接着,启动服务器,...
在实际部署和使用Tigase时,开发者需要理解这些组件的工作原理,并根据需求进行配置和集成。例如,如果你正在构建一个需要存档聊天记录的IM应用,那么message-archiving模块将是必不可少的。而如果你的用户分布在...
7. **API与XMPP兼容**:开发者可以使用XMPP协议或者Tigase提供的API进行二次开发。 **系统架构与组件:** 1. **服务器核心**:负责处理网络连接,管理用户会话,处理数据包转发。 2. **认证模块**:处理用户的登录...
9. 插件配置:Tigase的会话管理器支持插件,可以通过设置参数 "--sm-plugins" 来启用特定插件。文档中提到了消息归档相关的XEP-0136插件的配置示例。 通过以上参数的合理配置,可以成功搭建Tigase集群,以满足企业...
全面:tigase 完全实现了XMPP协议,除了全面实施的两个...可扩展:设计之初,Tigase就是可扩展的,支持自定义插件,开发者可以很轻松的扩展他的功能。插件开发,Tigase支持多种语言,Groovy(建议),Scala,Python,Ruby。
通过插件化设计,这部分可以灵活添加或修改功能,例如,可以实现自定义的认证机制或扩展新的业务特性。 4. **存储层**:Tigase Server支持多种数据库后端,如MySQL、PostgreSQL等,用于存储用户信息、会话状态等...
开源的特性使得用户可以自定义和修改代码,提高了软件的可靠性和安全性。同时,Tigase 的设计也充分考虑到容错能力,自动处理错误,保证应用尽可能的不 down 掉。 RFC 的实现 Tigase 实现了 RFC-3920 和 RFC-3921 ...
这个压缩包包含的是Tigase 5.2的完整源代码,以及与之配套的MySQL数据库,使得用户能够快速地在Eclipse开发环境中启动和运行服务器。 首先,我们来详细了解Tigase服务器的核心功能和特性: 1. **多协议支持**:...
同时,Tigase也提供API和插件机制,允许开发者自定义功能或与其他系统集成。 总之,"tigase-server-8.0.0-b10083-dist-max.zip"是一个包含完整功能的Tigase服务器部署包,适合在CentOS上搭建大规模的XMPP服务。通过...