[英]Mapping Openfire Custom plugin with aSmack Client
我是XMPP的新手,如果这个问题听起来很傻,请原谅我。 我想创建一个自定义插件并将其与Android上的aSmack客户端进行映射。 我正在尝试运用我对Web服务的知识,但没有成功。 因此,请引导我思考最佳方法,一个示例将非常有帮助。 提前感谢。
有很多类型的插件,让我们大致来讲一下。 Igniterealtime插件指南
您想定义一个全新的IQ Stanza来管理UserCustomParam。 比方说:
<iq from="user1@myserver" to="myserver" type="get">
<usercustomparam xmls:"com.records.iq" retrive="favouritecolor">
</iq>
您必须:
步骤1:定义一个添加新处理程序的插件(实现插件的类)
MyCustomHandler colorshandler;
IQRouter iqRouter = XMPPServer.getInstance().getIQRouter();
iqRouter.addHandler(colorshandler);
步骤2:根据需要实现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请求。
是时候去客户端了:
第三步:向您的ProviderManager注册一个IQProvider
ProviderManager.addIQProvider("usercustomparam ","com.records.iq", new IQUserCustomParamProvider());
步骤4:根据需要实现IQUserCustomParamProvider
public class IQUserCustomParamProvider extends IQProvider<IQUserCustomParam>
到Provider中,您将解析来自服务器的传入IQ,然后创建一个IQUserCustomParam,其实例参数如下
String favouriteColor
步骤5:您需要实现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:最后,您必须在连接上注册组合过滤器/侦听器:
AbstractXMPPConnection connection = ...;
connection.addAsyncStanzaListener(new PersonalConfigListner(this), new IQMUCConfigTicketFIlter();
如果有帮助,请不要忘记接受答案!
这是插件实现的示例:
首先,您应该实现Plugin接口:
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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.