你的 plugin 可以走四条路:
1. 拦截器方式 ,在你的插件中添加包拦截器,在拦截器中实现你的功能。通过 InterceptorManager.getInstance().addInterceptor() 添加。
2. component 方式 ,在插件中添加 component 。通过 ComponentManager.getInstance().addComponent ()添加。
Components可以接收一个特定子域(sub-domain)的所有包。比如test_componet.example.com。所以,一个发送给joe@www.isansui.com 的包将被转发给这个componet.
3. Handler 方式 ,通过 XMPPServer.getInstance().getIQRouter().addHandler(yourHandler);
IQ handlers相应包中特定的元素名或命名空间。
4. PropertyEventListener 方式 :通过 PropertyEventDispatcher.addListener(yourPropertyEventListner) 添加。
使用JiveGlobals.getProperty(String) 和 JiveGlobals.setProperty(String, String) 方法将我们的插件设置为openfire的一个全局属性。通过实现org.jivesoftware.util.PropertyEventListener方法可以 将我们的插件做成一个属性监听器监听任何属性的变化。通过 PropertyEventDispatcher.addListener(PropertyEventListener)方法可以注册监听。要注意的一点是,一定要在destroyPlugin()方法中将注册的监听注销。
=====================================================
1, 简单拦截器方式示例:
public class ArtWeaverPlugin implements Plugin
{
private PacketInterceptor ic = null ;
@Override
public void initializePlugin(PluginManager pluginManager, File pluginDirectory)
{
ic = new PresenceSignatureInterceptor();
InterceptorManager.getInstance ().addInterceptor( ic );
}
@Override
public void destroyPlugin()
{
if ( ic != null )
{
InterceptorManager.getInstance ().removeInterceptor( ic );
}
}
private class PresenceSignatureInterceptor implements PacketInterceptor
{
@Override
public void interceptPacket(Packet packet, Session session,
boolean incoming, boolean processed) throws PacketRejectedException
{
if (!processed && packet instanceof Presence && incoming)
{
// 在这添加你自己的对 packet 的处理
}
}
}
=============================================
2, component 方式
=========================
3, Handler 方式
public class MYPlugin implements Plugin {
private XMPPServer server;
private UserManager userManager;
public void initializePlugin(PluginManager manager, File pluginDirectory) {
Log.debug("==========SNSPlugin.initializePlugin=======");
try{
server = XMPPServer.getInstance();
userManager = server.getUserManager();
server.getIQRouter().addHandler(new MyHandler(server));
}catch(Exception e){
Log.error(e);
}
}
}
public class MyHandler extends IQHandler {
private static final String MODULE_NAME = "my handler";
private static final String ELEMENTNAME = "myhandler-card";
private static final String NAMESPACE = "http://www.isansui.com/my ";
private XMPPServer server;
private static final String USERID = "userid";
public MyHandler(XMPPServer server) {
super(MODULE_NAME);
info = new IQHandlerInfo(ELEMENTNAME, NAMESPACE);
this.server = server;
}
private IQHandlerInfo info;
public IQHandlerInfo getInfo() {
return info;
}
public void process(Packet packet) throws PacketException {
IQ iq = (IQ) packet;
try {
IQ.Type type = iq.getType();
Element element = iq.getChildElement();
Node node = element.element(USERID);
Long userid = parserUserid(node.getText());
if(type.equals(IQ.Type.get)){}
}else if(type.equals(IQ.Type.set)){
IQ reply = IQ.createResultIQ(iq);
deliverer.deliver(reply);
}else if(type.equals(IQ.Type.result)){
}
}catch (org.jivesoftware.openfire.auth.UnauthorizedException e) {
}catch (Exception e) {
}
}
}
=========================================
4, PropertyEventListener 方式