我正在使用PaulFreunds XMPP库编写Windows 8聊天程序 - PaulFreund/XMPP
我有两个问题: 首先 - 我需要手动绑定我的资源。我不知道在代码中放置绑定资源标记的位置。它需要在客户端连接时发送,但我无法到达那个地方。客户端连接后发送标签给我一个错误。标记:
public void bindResource()
{
var iq = new XMPP.tags.jabber.client.iq();
iq.type = XMPP.tags.jabber.client.iq.typeEnum.set;
var bind = new XMPP.tags.xmpp_bind.bind();
var resource = new XMPP.tags.xmpp_bind.resource();
resource.Add("myresource");
bind.Add(resource);
iq.Add(bind);
Client.Send(iq);
}
第二个也是订单棘手。我想根据我的要求获取我的朋友列表:
public void getFriends()
{
var iq = new XMPP.tags.jabber.iq.roster.query();
var tag = new XMPP.tags.jabber.client.iq();
tag.type = XMPP.tags.jabber.client.iq.typeEnum.get;
tag.Add(iq);
Client.Send(tag);
}
一切正常。但是在我从服务器获得有关状态的存在后,我也希望能够完成这一过程。 (让我们称之为服务器,因为我们都知道它来自我们列表中的每个朋友)这是因为我在我的联系人列表中设置了在线价值。我可以像现在一样按顺序执行:第一个状态第二个朋友列表,但我需要制作一些我不想制作的缓存文件。我试着把它放在OnConnected
事件中,但是火炬的存在也在我的名单之前出现。
答案 0 :(得分:0)
该库实现了一个状态机,在您开始连接后,它应该在到达BindingState后自动向服务器发送绑定请求,请参阅States。资源绑定成功后,您将通过OnReceive事件收到结果。
对于你的第二个问题,虽然它可能在技术上是可能的,但它并不打算。 XMPP存在对发布者订阅者模型起作用,并且模拟订阅者的客户端无法控制发布者何时发送新信息。即使服务器在连接时不会发布联系人的当前存在集,联系人也可能在此时连接,并且客户端将收到在线状态通知。 名册管理是一项可选功能,不能取代您从在场状态收集的信息(例如,名册不会告诉您联系人的状态)。
为了提供有关用户联系人的所有信息,您需要创建一个包含两者的数据结构,附加的名册信息和联系人的状态。
作为参考,您可以查看我对Windows 8 Messenger Chat的实现,即使它不完美也应该让您了解如何管理XMPP连接