擅长:python、mysql、java
<p>你需要做的是:</p>
<ol>
<li>连接。在</li>
<li>声明状态处理程序。该处理程序为每个联系人的状态保存一个缓存(请参阅下面的详细信息)</li>
<li>将初始状态发送到服务器,这将触发从所有联机联系人接收状态状态,进而触发处理程序。在</li>
<li>方法的status_of()读取缓存并立即推断联系人的状态。在</li>
</ol>
<p>现在,这取决于你需要什么状态信息。为了简单起见,假设您只需要一个“online”/“offline”值。缓存将是一个字典,其键是裸(无资源)JID,值是该JID的一组连接的资源。例如:</p>
<pre><code>{'foo@bar.com': set(['work', 'notebook']), 'bob@example.net': set(['gtalk'])}
</code></pre>
<p>现在,当您收到来自某个JID/资源的“可用”状态时:</p>
^{pr2}$
<p>反过来,当您收到“不可用”状态时:</p>
<pre><code>if jid in cache: # bad people send "unavailable" just to make your app crash
cache[jid].discard(resource)
if 0 == len(cache[jid]):
del cache[jid]
</code></pre>
<p>现在:</p>
<pre><code>def is_online(jid):
return jid in cache
</code></pre>
<p>当然,如果您想要更详细的信息,您不仅可以维护联系人的可用资源列表,还可以维护每个资源的状态、状态消息、优先级等。在</p>