`

tigase自定义插件的开发与配置

阅读更多

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()将会被调用。

分享到:
评论
1 楼 bluky999 2014-01-22  

这里写错了应该。。。

--sm-plugins=......,+java:iq:search 



java -> jabber


相关推荐

    tigase开发手册

    整体来看,Tigase开发手册覆盖了从基础架构知识、开发环境搭建、API变更和插件开发到服务器编译、打包和配置等各个方面,是希望深入定制和开发Tigase服务器的开发者的宝贵资源。通过遵循手册的指导,开发者能够更好...

    tigase-server-8.0.0-b10083-dist-max.tar.gz

    7. **API接口**:Tigase 提供丰富的API接口,允许开发者进行二次开发,集成到自己的应用系统中,或者创建自定义插件。 在压缩包中的“tigase-server-8.0.0-b10083”目录下,包含了以下关键文件和目录: - `bin/`:...

    tigase-server 组件

    5. **插件架构**:Tigase服务器采用插件化设计,允许添加自定义功能。开发者需要学习如何编写和集成插件,以扩展服务器的功能。 6. **性能优化**:通过调整服务器配置,如并发连接数、内存分配等,可以优化Tigase的...

    tigase-server-tigase-server-8.0.0.zip 源码

    Tigase服务器是一款开源的XMPP...如果你打算自定义或扩展Tigase服务器的功能,还需要了解如何配置和编译源代码,以及如何测试和部署服务器。对于开发者来说,这是一个学习和实践网络通信协议及服务器开发的宝贵资源。

    基于tigase的独立IM系统.zip

    3. **插件开发**:编写Java代码实现特定功能,如自定义业务逻辑、新的数据存储策略等。 4. **测试与调试**:使用Tigase的内置日志系统和调试工具,对插件进行测试和优化。 **运维与监控:** 1. **日志管理**:配置...

    Tigase Server 7.0.1 源代码

    通过插件化设计,这部分可以灵活添加或修改功能,例如,可以实现自定义的认证机制或扩展新的业务特性。 4. **存储层**:Tigase Server支持多种数据库后端,如MySQL、PostgreSQL等,用于存储用户信息、会话状态等...

    tigase-server-8.0.0-b10083-dist-max.zip

    同时,Tigase也提供API和插件机制,允许开发者自定义功能或与其他系统集成。 总之,"tigase-server-8.0.0-b10083-dist-max.zip"是一个包含完整功能的Tigase服务器部署包,适合在CentOS上搭建大规模的XMPP服务。通过...

    myTigaseManager:tigase管理员

    10. **扩展性和定制化**:Tigase服务器和MyTigaseManager都有良好的扩展性,可以根据需求添加自定义插件或进行二次开发,以满足特定业务场景。 总结,MyTigaseManager是Tigase服务器的一款强大管理工具,利用Java的...

Global site tag (gtag.js) - Google Analytics