Картирование Openfire Пользовательский плагин с клиентом aSmack

Я новичок в XMPP, поэтому простите меня, если этот вопрос звучит глупо. Я хочу создать собственный плагин и сопоставить его с моим клиентом aSmack на Android. Я пытаюсь применить свои знания о веб-сервисах, но я не выигрываю. Поэтому, пожалуйста, направляйте мое мышление на лучший подход, пример будет действительно полезен. Thanx заранее.

Ответ 1

Существует много типов плагинов, позволяющих говорить в целом. Руководство по плагину Igniterealtime

Вы хотите определить новый IQ Stanza для управления UserCustomParam. Пусть говорят:

<iq from="[email protected]" 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.

Время на стороне клиента:

Шаг 3: зарегистрируйтесь в ProviderManager IQProvider

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

Шаг 4: реализует ваш IQUserCustomParamProvider, как вам нужно

public class IQUserCustomParamProvider extends IQProvider<IQUserCustomParam>

в Провайдер вы будете анализировать входящий 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();

Если это помогло, пожалуйста, не забудьте принять ответ!