繁体   English   中英

使用aSmack Client映射Openfire自定义插件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM