使用 Smack 客户端映射 Openfire 自定义插件
Mapping Openfire Custom plugin with aSmack Client
我是 XMPP 的新手,如果这个问题听起来很愚蠢,请原谅我。我想创建一个自定义插件并将其映射到 Android 上的 aSmack 客户端。我正在尝试应用我的 Web 服务知识,但我没有成功。所以请引导我思考最好的方法,一个例子会很有帮助。提前致谢。
插件的种类很多,我们就大致说一下吧。
Igniterealtime Plugin guide
您想定义一个全新的 IQ Stanza 来管理 UserCustomParam。
比方说:
<iq from="user1@myserver" to="myserver" type="get">
<usercustomparam xmls:"com.records.iq" retrive="favouritecolor">
</iq>
你必须:
第 1 步:
定义一个插件(class 实现插件)
添加一个新的处理程序
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 请求。
客户端时间:
第 3 步: 向您的 ProviderManager 注册一个 IQProvider
ProviderManager.addIQProvider("usercustomparam ","com.records.iq", new IQUserCustomParamProvider());
第 4 步: 根据需要实施 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 步: 最后,您必须在您的连接上注册组合 filter/listner:
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 Plugin Development: Message of the Day。
希望对您有所帮助。
有一个关于插件的简单实例:
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;
}
}
我是 XMPP 的新手,如果这个问题听起来很愚蠢,请原谅我。我想创建一个自定义插件并将其映射到 Android 上的 aSmack 客户端。我正在尝试应用我的 Web 服务知识,但我没有成功。所以请引导我思考最好的方法,一个例子会很有帮助。提前致谢。
插件的种类很多,我们就大致说一下吧。 Igniterealtime Plugin guide
您想定义一个全新的 IQ Stanza 来管理 UserCustomParam。 比方说:
<iq from="user1@myserver" to="myserver" type="get">
<usercustomparam xmls:"com.records.iq" retrive="favouritecolor">
</iq>
你必须:
第 1 步: 定义一个插件(class 实现插件) 添加一个新的处理程序
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 请求。
客户端时间:
第 3 步: 向您的 ProviderManager 注册一个 IQProvider
ProviderManager.addIQProvider("usercustomparam ","com.records.iq", new IQUserCustomParamProvider());
第 4 步: 根据需要实施 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 步: 最后,您必须在您的连接上注册组合 filter/listner:
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 Plugin Development: Message of the Day。
希望对您有所帮助。
有一个关于插件的简单实例:
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;
}
}