0

让我们假设 Alice 使用下一个代码向 Bob 发送订阅请求。

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);
}

Bob 登录后,它会收到一个弹出窗口,告诉您是否要在下一个方法中添加。

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

但我需要实现“稍后添加”功能。我不知道如何将消息保存在服务器中以及如何接收所有消息

4

2 回答 2

1

您可以随意延迟订阅,无需将订阅数据包保存在服务器上。为了查询延迟订阅请求,只需在名单中查询不在 mode 中的订阅both

关于您的代码的一句话:Roster.createEntry(String, String, String[]将自动发送存在包。无需再次发送。

于 2013-09-11T11:05:21.180 回答
0

无需在服务器上保存任何内容,因为它会自动维护挂起的订阅请求,即。每当您稍后登录服务器时,订阅请求都会再次推送给您(如果之前没有处理过)。因此,只要您从服务器接收到订阅请求,只需将其本地保存在应用程序中的列表或其他内容中,并将本地请求列表作为“好友请求页面”显示给用户,供用户接受/拒绝。如果您的应用程序的生命周期重新启动,它将再次从服务器接收所有挂起的订阅存在(或每当它重新登录时)。让我知道这是否适合您。

于 2014-01-29T08:16:32.267 回答