Mapping Openfire Custom plugin with aSmack Client

前端 未结 3 391
时光取名叫无心
时光取名叫无心 2020-12-04 04:12

I\'m a newbie to XMPP so forgive me if this question sounds silly. I want to create a custom plugin and map it with my aSmack client on Android. I\'m trying to apply my kno

3条回答
  •  广开言路
    2020-12-04 04:39

    There are many types of plugins, let's talk in general pourpose. Igniterealtime Plugin guide

    You want to define a brand new IQ Stanza to manage an UserCustomParam. Let's say:

    
     
    
    

    What you have to:

    step 1: define a plugin (class that implemements Plugin) that adds a new handler

    MyCustomHandler colorshandler;
    IQRouter iqRouter = XMPPServer.getInstance().getIQRouter();
    iqRouter.addHandler(colorshandler);
    

    Step2: implements MyCustomHandler as you need (read on database, write on database, read server side and so on).

    public class MyCustomHandler extends IQHandler {
        public static final String NAMESPACE_TICKET_IQ = "com.records.iq";
        public static final String TAG_TICKET_IQ = "usercustomparam ";
    

    Now your server it's ready to manage your custom IQ request.

    Time to go client side:

    Step3: register to your ProviderManager an IQProvider

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

    Step4: implements your IQUserCustomParamProvider as you need

    public class IQUserCustomParamProvider extends IQProvider
    

    into Provider you'll parse the incoming IQ from server and you'll create a IQUserCustomParam with an instance param like

    String favouriteColor
    

    Step5: you need to implement 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);
        }
    

    Step 6: now set up it's completed, but you haven't defined yet when to accept IQUserCustomParam when it comes from server. So you need a StanzaFilter

    public class IQUserCustomParamFilter implements StanzaFilter
    

    Step 7: and you haven't defined yet what to do with IQUserCustomParam when it comes from server. So you need a StanzaListner

    public class IQUserCustomParamListner implements StanzaListener
    

    Step 8: finally you'll have to register the combo filter/listner on your connection:

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

    if that helped, please don't forget to accept the answer!

提交回复
热议问题