From 9df8fa3f9731be4a2accd79b4b67dc85e4eb0fd0 Mon Sep 17 00:00:00 2001 From: xsx <825657193@qq.com> Date: Sun, 14 Jan 2024 21:24:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=96=AD=E7=BA=BF=E9=87=8D?= =?UTF-8?q?=E8=BF=9E=E6=9C=9F=E9=97=B4=E6=B6=88=E6=81=AF=E4=B8=A2=E5=A4=B1?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- im-ui/src/api/wssocket.js | 9 ++++++++- im-ui/src/view/Home.vue | 11 +++++++---- im-ui/src/view/Login.vue | 2 +- im-uniapp/App.vue | 24 ++++++++++++++---------- im-uniapp/common/wssocket.js | 7 +++++++ 5 files changed, 37 insertions(+), 16 deletions(-) diff --git a/im-ui/src/api/wssocket.js b/im-ui/src/api/wssocket.js index e89988d..2cb4198 100644 --- a/im-ui/src/api/wssocket.js +++ b/im-ui/src/api/wssocket.js @@ -1,6 +1,7 @@ var websock = null; let rec; //断线重连后,延迟5秒重新创建WebSocket连接 rec用来存储延迟请求的代码 let isConnect = false; //连接标识 避免重复连接 +let connectCallBack= null; let messageCallBack = null; let closeCallBack = null @@ -16,6 +17,8 @@ let connect = (wsurl,accessToken) => { let sendInfo = JSON.parse(e.data) if (sendInfo.cmd == 0) { heartCheck.start() + // 登录成功才算真正完成连接 + connectCallBack && connectCallBack(); console.log('WebSocket登录成功') } else if (sendInfo.cmd == 1) { // 重新开启心跳定时 @@ -119,6 +122,9 @@ let sendMessage = (agentData) => { } } +let onConnect = (callback) => { + connectCallBack = callback; +} let onMessage = (callback) => { messageCallBack = callback; @@ -134,6 +140,7 @@ export { reconnect, close, sendMessage, + onConnect, onMessage, - onClose + onClose, } diff --git a/im-ui/src/view/Home.vue b/im-ui/src/view/Home.vue index 7112d48..7ed9b81 100644 --- a/im-ui/src/view/Home.vue +++ b/im-ui/src/view/Home.vue @@ -80,11 +80,14 @@ methods: { init() { this.$store.dispatch("load").then(() => { - // 加载离线消息 - this.loadPrivateMessage(this.$store.state.chatStore.privateMsgMaxId); - this.loadGroupMessage(this.$store.state.chatStore.groupMsgMaxId); + // ws初始化 this.$wsApi.connect(process.env.VUE_APP_WS_URL, sessionStorage.getItem("accessToken")); + this.$wsApi.onConnect(()=>{ + // 加载离线消息 + this.loadPrivateMessage(this.$store.state.chatStore.privateMsgMaxId); + this.loadGroupMessage(this.$store.state.chatStore.groupMsgMaxId); + }); this.$wsApi.onMessage((cmd, msgInfo) => { if (cmd == 2) { // 关闭ws @@ -104,7 +107,7 @@ // 插入群聊消息 this.handleGroupMessage(msgInfo); } - }) + }); this.$wsApi.onClose((e) => { console.log(e); if (e.code != 3000) { diff --git a/im-ui/src/view/Login.vue b/im-ui/src/view/Login.vue index 72da81f..1b60d81 100644 --- a/im-ui/src/view/Login.vue +++ b/im-ui/src/view/Login.vue @@ -35,7 +35,7 @@ - + diff --git a/im-uniapp/App.vue b/im-uniapp/App.vue index 70db41a..4f2de1e 100644 --- a/im-uniapp/App.vue +++ b/im-uniapp/App.vue @@ -18,9 +18,6 @@ this.initAudit(); // 初始化websocket this.initWebSocket(); - // 加载离线消息 - this.loadPrivateMessage(store.state.chatStore.privateMsgMaxId); - this.loadGroupMessage(store.state.chatStore.groupMsgMaxId); }).catch((e) => { console.log(e); this.exit(); @@ -30,6 +27,11 @@ let loginInfo = uni.getStorageSync("loginInfo") wsApi.init(); wsApi.connect(process.env.WS_URL, loginInfo.accessToken); + wsApi.onConnect(() => { + // 加载离线消息 + this.loadPrivateMessage(store.state.chatStore.privateMsgMaxId); + this.loadGroupMessage(store.state.chatStore.groupMsgMaxId); + }); wsApi.onMessage((cmd, msgInfo) => { if (cmd == 2) { // 异地登录,强制下线 @@ -69,9 +71,9 @@ msgInfo.selfSend = msgInfo.sendId == store.state.userStore.userInfo.id; let friendId = msgInfo.selfSend ? msgInfo.recvId : msgInfo.sendId; let friend = store.state.friendStore.friends.find((f) => f.id == friendId); - if(friend){ - this.insertPrivateMessage(friend,msgInfo); - } + if (friend) { + this.insertPrivateMessage(friend, msgInfo); + } }) if (msgInfos.length == 100) { // 继续拉取 @@ -91,8 +93,8 @@ msgInfo.selfSend = msgInfo.sendId == store.state.userStore.userInfo.id; let groupId = msgInfo.groupId; let group = store.state.groupStore.groups.find((g) => g.id == groupId); - if(group){ - this.insertGroupMessage(group,msgInfo); + if (group) { + this.insertGroupMessage(group, msgInfo); } }) if (msgInfos.length == 100) { @@ -119,8 +121,10 @@ store.commit("resetUnreadCount", chatInfo) } else { // 对方已读我的消息,修改消息状态为已读 - store.commit("readedMessage", {friendId:friendId}) - + store.commit("readedMessage", { + friendId: friendId + }) + } return; } diff --git a/im-uniapp/common/wssocket.js b/im-uniapp/common/wssocket.js index deedfae..be7ff7f 100644 --- a/im-uniapp/common/wssocket.js +++ b/im-uniapp/common/wssocket.js @@ -2,6 +2,7 @@ let wsurl = ""; let accessToken = ""; let messageCallBack = null; let closeCallBack = null; +let connectCallBack = null; let isConnect = false; //连接标识 避免重复连接 let rec = null; let isInit = false; @@ -31,6 +32,7 @@ let init = () => { let sendInfo = JSON.parse(res.data) if (sendInfo.cmd == 0) { heartCheck.start() + connectCallBack && connectCallBack(); console.log('WebSocket登录成功') } else if (sendInfo.cmd == 1) { // 重新开启心跳定时 @@ -145,6 +147,10 @@ function sendMessage(agentData) { }) } +let onConnect = (callback) => { + connectCallBack = callback; +} + function onMessage(callback) { messageCallBack = callback; @@ -163,6 +169,7 @@ export { reconnect, close, sendMessage, + onConnect, onMessage, onClose } \ No newline at end of file