使用aSmack客户端映射Openfire自定义插件

我是XMPP的新手,请原谅我,如果这个问题听起来很愚蠢。 我想创建一个自定义插件并将其映射到Android上的aSmack客户端。 我正在尝试应用我的Web服务知识,但我没有赢。 所以请引导我的思路走向最佳方法,一个例子将非常有用。 提前完成。

有许多类型的插件,让我们来谈谈一般的pourpose。 Igniterealtime插件指南

您想要定义一个全新的IQ Stanza来管理UserCustomParam。 让我们说:

   

你有什么:

第1步:定义一个添加新处理程序的插件(实现插件的类)

 MyCustomHandler colorshandler; IQRouter iqRouter = XMPPServer.getInstance().getIQRouter(); iqRouter.addHandler(colorshandler); 

第二步:根据需要实现MyCustomHandler(读取数据库,写入数据库,读取服务器端等)。

 public class MyCustomHandler extends IQHandler { public static final String NAMESPACE_TICKET_IQ = "com.records.iq"; public static final String TAG_TICKET_IQ = "usercustomparam "; 

现在您的服务器已准备好管理您的自定义IQ请求。

是客户端的时间:

步骤3:向您的ProviderManager注册IQProvider

 ProviderManager.addIQProvider("usercustomparam ","com.records.iq", new IQUserCustomParamProvider()); 

Step4:根据需要实现您的IQUserCustomParamProvider

 public class IQUserCustomParamProvider extends IQProvider 

进入Provider你将解析来自服务器的传入IQ,你将创建一个带有实例参数的IQUserCustomParam

 String favouriteColor 

Step5:您需要实现IQUserCustomParam

 public class IQUserCustomParam extends IQ private final static String childElementName = "usercustomparam"; private final static String childElementNamespace = "com.records.iq"; public IQUserCustomParam (String color) { this(childElementName , childElementNamespace ); this.setType(IQ.Type.result); this.setFavouriteColor(color); } 

第6步 :现在设置它已完成,但是当它来自服务器时你尚未定义何时接受IQUserCustomParam。 所以你需要一个StanzaFilter

 public class IQUserCustomParamFilter implements StanzaFilter 

第7步 :当你来自服务器时,你还没有定义如何处理IQUserCustomParam。 所以你需要一个StanzaListner

 public class IQUserCustomParamListner implements StanzaListener 

第8步:最后你必须在你的连接上注册组合filter/列表器:

 AbstractXMPPConnection connection = ...; connection.addAsyncStanzaListener(new PersonalConfigListner(this), new IQMUCConfigTicketFIlter(); 

如果有帮助,请不要忘记接受答案!

这是插件实现的示例:

首先,您应该实现插件接口:

 public class MotDPlugin implements Plugin 

然后,这需要实现intitalizePlugin和destroyPlugin方法,如下所示:

 public void initializePlugin(PluginManager manager, File pluginDirectory) { serverAddress = new JID(XMPPServer.getInstance().getServerInfo().getName()); router = XMPPServer.getInstance().getMessageRouter(); SessionEventDispatcher.addListener(listener); } public void destroyPlugin() { SessionEventDispatcher.removeListener(listener); listener = null; serverAddress = null; router = null; } 

关于此示例的更多信息,您可以参考Openfire插件开发:每日消息 。

希望能帮助到你。

有一个关于插件的简单实例:

 public class TestIQHandle extends IQHandler { private static final String MODULE_NAME = "test plugin"; private static final String NAME_SPACE = "com:test:testplug"; private IQHandlerInfo info; public TestIQHandle(){ super(MODULE_NAME); info = new IQHandlerInfo("query", NAME_SPACE); } public TestIQHandle(String moduleName) { super(moduleName); info = new IQHandlerInfo("query", NAME_SPACE); } @Override public IQ handleIQ(IQ packet) throws UnauthorizedException { IQ reply = IQ.createResultIQ(packet); Element groups = packet.getChildElement(); if(true){ System.out.println("=======invalid========"); } if(!IQ.Type.get.equals(packet.getType())){ reply.setChildElement(groups.createCopy()); reply.setError(PacketError.Condition.bad_request); return reply; } //StringUtils.substringBefore(packet.getFrom().toString(), "@"); return reply; } @Override public IQHandlerInfo getInfo() { // TODO Auto-generated method stub return info; } }