用戶發送查詢iq消息后,再發送presence消息創建聊天室:
處理的時序圖如下:
1. 用戶發送的presence 消息被路由到ChatService中處理。
2.ChatService中保存有一張本地聊天室中所有用戶的視圖,如果用戶之前已經加入過聊天室,可以從這里快速地查找到相應的信息。
第一次創建聊天室時是不存在相應的用戶的。所以會在這里創建,並加入到視圖中。
3.新建MUC用戶后就將此消息交由他來處理,每個MUC用戶會保持一張自己所在room 和相應角色(role) 的對應關系表,處理消息時先去獲取這個角色。初次是NULL。
4. 5.6在ChatService中沒有找到已有room的情況下會創建一個,同時試圖從數據庫中加載之前的配置,並將自己加入到owners中。
7.8.在獲取到room后就將自己正式地加入到room中,與剛才不同這里會為user生成相應的role。
9.將自己加入到room后就獲取所有已有的參與者的狀態。
10.再將自己的狀態廣播給所有參與者。
11.在未明確規定不需要歷史聊天記錄的情況下獲取歷史記錄。
12.13 更新room中參與者最后的活動時間。
房間創建完成后服務器返回相應的通知:
如此只是創建了一個默認配置的初始房間,狀態為locked,如果創建者需要一個長期存在的房間就需要進行配置。
首先查詢配置所需的參數:
服務器返回所有所需配置項:
客戶端根據以上配置項發送相應的配置信息到服務器:
配置完后成服務器會發送相應的result結果,並將房間狀態設置為unlock,這樣其它人就可以加入房間了。
PS:也可以創建臨時房間,具體可參見相應的XMPP協議。