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

时间:2016-06-22 10:30:03

标签: java android xmpp openfire smack

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

3 个答案:

答案 0 :(得分:6)

有很多类型的插件,让我们来谈谈。 Igniterealtime Plugin guide

您想要定义一个全新的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);

Step2:根据需要实现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请求。

到客户端的时间:

Step3:向您的ProviderManager注册IQProvider

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

Step4:根据需要实施您的IQUserCustomParamProvider

public class IQUserCustomParamProvider extends IQProvider<IQUserCustomParam>

进入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步:最后您必须在连接上注册组合过滤器/列表器:

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

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

答案 1 :(得分:1)

这是插件实现的示例:

首先,您应该实现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 Plugin Development: Message of the Day

希望有帮助。

答案 2 :(得分:1)

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

glob(3)