openfire presence研究

   當有客戶端的狀態更新時都會給服務器發送presence消息,從而觸發PresenceUpdateHandler中的process方法,此方法首先判斷presence包中的type,分爲以下幾種方案:

   1.type爲空

        說明是第一次發送狀態消息,

          首先,服務器調用broadcastUpdate方法廣播該消息給所有的好友,由於我們項目中不需要了解用戶的在線狀態,故將broadcastUpdate方法註釋掉,

          然後,是初始化session的過程,initSession方法中首先檢測該用戶所有好友的在線狀態,然後發送給該用戶,此步驟無用,故註釋掉,

          之後,從數據庫中提取用戶的離線消息,發送給用戶,該方法我們做了聊天服務器,用戶發送presence信息時將最後一次收到消息的時間發送給服務器,服務器截取之後的離線消息發送給用戶

         最後,將type設置爲available

   2.type爲unavailable

      說明用戶下線,發送廣播通知所有好友該用戶下線,此步驟無用,故註釋

private void broadcastUpdate(Presence update) {
    	// 取消廣播發送在線消息
//        if (update.getFrom() == null) {
//            return;
//        }
//        if (localServer.isLocal(update.getFrom())) {
//            // Do nothing if roster service is disabled
//          ...
    }

    之後會把該session的狀態設置爲available,並調用SessionManager中的方法通知該id的其他resource此狀態,此步驟無用,故注視

         

private void broadcastPresenceOfOtherResource(LocalClientSession session) {
//        if (!SessionManager.isOtherResourcePresenceEnabled()) {
//            return;
//        }
//        ...
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章