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