0

我想确定 Google Talk(又名 gchat)联系人是否离开、可用、dnd 或不可用(我认为这些是 gchat 上唯一可用的类型)。

到目前为止,我一直在使用 slimxmpp 与 gchat 交互并读取 xml 等...问题是联系人经常使用同一个帐户(例如电话和计算机)登录多个资源,每个资源都有自己的优先级和可用性。所以我想确定谁是“顶级 dawg”,我的意思是,我应该使用他们的哪些已签署资源来确定他们的可用性。

我认为这与优先级有很大关系,但我不确定如何,据我所知,两个资源可以具有相同的优先级和不同的可用性。

我意识到找到他们的“真实”可用性不会有一个完美的解决方案,但我认为谷歌会根据任何算法决定在联系人旁边显示什么颜色的可用性图标,所以我可以尝试弄清楚这一点也出来了。

4

2 回答 2

2

这完全取决于您,没有标准答案(通常协议规范试图避免规定用户界面设计)。

您可以在界面中单独显示每个连接,也可以尝试巧妙地合并它们。您最终如何合并它们取决于您,但与 Robin 的回答(实际上是正确的)相反,我建议使用优先级,因为它反映了将成为用户发送给该联系人的任何消息的接收者的实际资源的状态。

例如,如果联系人有一个优先级为 5 的资源“dnd”,而另一个资源是“离开”优先级为 0,则显示“dnd”是有意义的,即使“离开”是更“可用”的状态. 这是因为当您向联系人的裸 JID 发送消息时,他们会将消息接收到“dnd”资源。

在优先级相同(具有相同优先级的两个资源)的情况下,您还有另一个选择。我建议将权重附加到每个可能的状态并显示“最可用”。我会以这种方式订购它们,例如:

  1. 聊天 | dnd
  2. (无 - 标准“可用”)
  3. 离开
  4. xa

这仍然留下了“聊天”和“dnd”的边缘情况。它们都是关于用户可用性的强烈(但相互矛盾的)陈述(即“跟我说话!”和“走开!”),因此可能应该优先于其他人。

确实,如果联系人在“dnd”和“聊天”中有两个具有相同优先级的资源,那么您就没有更多可以做的了,除非让最后收到的存在优先 - 因为这通常会指示他们的资源最近活跃于。

于 2012-05-16T02:33:25.210 回答
1

那么,如果所有连接都显示为不可用,它们不会被视为不可用。如果他们有任何连接显示它们可用,那么它们在某些容量中可用。优先级与可用性无关。

当消息发往裸 JID(无特定连接)时,优先级对服务器路由消息起作用。如果用户有多个连接,服务器会将消息传递给具有最高优先级的连接。具有相同优先级的多个连接的行为可能不同,具体取决于服务器及其配置。例如,我相信 Google 将交付给所有资源,而 Openfire(默认情况下)将只交付给其中一个,基于内部算法。根据规范,这两种行为都是有效的。

于 2012-05-15T15:59:38.873 回答