Как я могу одобрить запрос подписки XMPP "позже" в функции Smack ("Добавить позже")?

Предположим, что Алиса отправляет запрос на подписку Бобу с использованием следующего кода.

public bool AddBuddy(string jid) {
 var roster = conn.Roster;

 // 2' param is nickname
 roster.CreateEntry(jid, null, null);
 roster.SetSubscriptionMode(Roster.SubscriptionMode.Manual);

 Presence subscribe = new Presence(Presence.Type.Subscribe);
 subscribe.To = jid;
 conn.SendPacket(subscribe);
}

Когда Боб вошел в систему, он получает всплывающее окно, в котором сообщается, хотите ли вы добавить или нет в следующем методе.

public void ProcessPacket (Packet p0)
{
 Presence presence = p0.JavaCast<presence> ();
 var a = presence;
}
</presence>

Но мне нужно реализовать функциональность "Добавить позже". Я не знаю, как сохранить сообщения на сервере, а также как получить все из них

2 ответа

Вы можете отложить подписку столько, сколько хотите, нет необходимости сохранять пакеты подписки на сервере. И для того, чтобы запросить отсроченные подписки запросов, просто запросить список для подписки не в режиме both.

Одно замечание относительно вашего кода: Roster.createEntry(String, String, String[] автоматически отправит пакет присутствия. Не нужно отправлять его снова.


Не нужно ничего сохранять на сервере, поскольку он автоматически поддерживает запросы на подписку, т.е. всякий раз, когда вы заходите на сервер позже, запрос на подписку будет перенаправлен вам (если раньше он не рассматривался). Поэтому просто сохраните запрос подписки локально в своем приложении в списке или что-то всякий раз, когда вы его получите с сервера, и покажите этот список локальных запросов пользователю как страницу "Страница запроса друга", чтобы пользователь мог принять/отклонить. Если жизненный цикл приложения перезагрузится, он снова получит все ожидающие ожидания подписчика с сервера (или всякий раз, когда он снова войдет в систему). Дайте мне знать, если это сработает для вас.

licensed under cc by-sa 3.0 with attribution.