客戶端在登錄 Openfire 時都會收到自己訂閱的好友狀態,那么這個好友狀態是怎么下發下去的呢?
用戶在登錄后會發送一個<presence> 來更新自己的狀態,在PresenceRouter 中進行處理。
這個presence 交由PresenceUpdateHandler 處理,在判斷用戶為注冊用戶后使用RosterManager.getRoster() 來獲取所有已經訂閱的其他用戶。
針對每個用戶判斷關系類型,如果為SUB_FROM,SUB_BOTH 則說明此用戶為訂閱了自己的。
先向訂閱了自己的用戶廣播狀態更新消息。調用initSesion(),從中取出SUB關糸為SUB_TO 和 SUB_BOTH的,調用PresenceManagerImpl 中的probPresence() 方法來處理每個被訂閱者。probPresence()通過sessionManager獲取每個用戶的在線情況,組裝presence並發送給登錄用戶。