使用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; } }
- 我从String placeName = placeText.getText()。toString();得到空指针exception
- 如何从Azure数据库表中获取数据到Android应用程序?
- 签名APK为Facebook提供不同的Key-Hash
- 吉他调音的频率检测
- “清除内存”+ appWidget崩溃后,服务不会重新启动
- android ant error:无效的资源目录名:./ bin / res \ crunch
- 动态复选框创建
- requestRouteToHost android
- 解析数据时出错org.json.JSONException:java.lang.String类型的值<br无法转换为JSONObject