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