大體流程先記錄下皂吮,后面慢慢完善
登錄流程
- http 登錄 -> 返回 token傀蓉,服務(wù)器時(shí)間 (并根據(jù)本地時(shí)間計(jì)算與服務(wù)器時(shí)間差量 D)
- 建立tcp長(zhǎng)連接秽梅,發(fā)送握手包
- http 拉取好友id列表
- http 拉取群聊id列表
D = 服務(wù)器時(shí)間 - 本地時(shí)間
以上過程完成后,進(jìn)入消息列表界面
拉取消息流程
- 獲取上次拉取消息的時(shí)間 T(本地時(shí)間+與服務(wù)器時(shí)間的差量),若沒有則默認(rèn)為當(dāng)前時(shí)間減去一天的時(shí)間
- http 攜帶 T 拉取離線消息感耙,并將 T 更新為本次拉取消息的時(shí)間
- 根據(jù)返回結(jié)果的時(shí)間戳對(duì)消息列表進(jìn)行倒排序(即將最新消息的item放到第一個(gè))
進(jìn)入好友列表界面
- 展開組,判斷此組內(nèi)的好友最后拉取時(shí)間是否是在登錄時(shí)間之前
- http 若在此次登錄時(shí)間之前持隧,則拉取當(dāng)前組好友的頭像即硼、簽名、昵稱屡拨、狀態(tài)等只酥,并更新此次拉取時(shí)間;若在此次登錄之后呀狼,則不拉取
- 此后好友狀態(tài)變化可通過推送獲取
進(jìn)入聊天界面
- http 用戶在此界面下拉裂允,首先展示客戶端本地存儲(chǔ)的歷史消息,當(dāng)本地歷史消息讀取完了哥艇,則從服務(wù)器拉取最長(zhǎng)不超過一個(gè)月的消息記錄
- 若進(jìn)入的聊天界面是群聊叫胖,則需要輪詢拉取此群聊界面的好友狀態(tài),直至用戶關(guān)閉或者返回該聊天界面
發(fā)送聊天消息
- 用戶首先輸入消息她奥,客戶端根據(jù)消息內(nèi)容組成相應(yīng)的包
- http 客戶端向服務(wù)端獲取一個(gè)消息id
- tcp 客戶端將新獲取到的消息id設(shè)置成該消息包的id,發(fā)送到服務(wù)端怎棱,并響應(yīng)服務(wù)端的返回結(jié)果
- 消息包組裝分類
- 文本消息哩俭,直接組包發(fā)送
- 語言消息,需要先將語言文件上傳到oss拳恋,然后將oss返回的結(jié)果凡资,組裝成消息包發(fā)送
- 圖片消息,與語音消息處理過程大體相同
- 視頻谬运、短視頻消息隙赁,與語音消息不同的是,還需要上傳視頻的縮略圖梆暖,即上傳兩個(gè)資源
- 鏈接消息伞访,目前直接當(dāng)文本消息處理
發(fā)送消息撤銷指令
- 客戶端判斷該消息發(fā)送是否已超過2分鐘,若超過2分鐘轰驳,不允許撤回
消息指令響應(yīng)
- 聊天響應(yīng)消息指令厚掷,若返回失敗,客戶端需要表現(xiàn)出來
- 聊天消息推送指令级解,客戶需要將該消息展示到對(duì)應(yīng)的聊天界面冒黑,并且做好本地存儲(chǔ),同時(shí)還要回復(fù)服務(wù)器一條已收到消息的指令
- 撤銷消息指令勤哗,客戶端根據(jù)消息id抡爹,從聊天界面移除,并且展示撤銷痕跡芒划,同時(shí)從本地?cái)?shù)據(jù)庫中刪除該消息
- 加入群聊響應(yīng)指令冬竟,將結(jié)果展示給用戶欧穴,并處理一些其它邏輯
- 加入群聊通知指令,在群聊界面展示
- 退出群聊響應(yīng)指令诱咏,退出成功不做處理苔可,退出失敗將原因展示給用戶
- 退出群聊通知指令,在群聊界面展示
- 其他更多指令開發(fā)中繼續(xù)擴(kuò)展袋狞。焚辅。。