Browse Source

Merge remote-tracking branch 'origin/v_2.0.0' into v_2.0.0

master
blue 2 years ago
parent
commit
ecd7dcf285
  1. 6
      im-commom/src/main/java/com/bx/imcommon/enums/IMTerminalType.java
  2. 6
      im-platform/src/main/java/com/bx/implatform/dto/LoginDTO.java
  3. 1
      im-platform/src/main/resources/application.yml
  4. 9
      im-ui/src/api/wssocket.js
  5. 11
      im-ui/src/view/Home.vue
  6. 2
      im-ui/src/view/Login.vue
  7. 20
      im-uniapp/App.vue
  8. 7
      im-uniapp/common/wssocket.js

6
im-commom/src/main/java/com/bx/imcommon/enums/IMTerminalType.java

@ -16,7 +16,11 @@ public enum IMTerminalType {
/** /**
* app * app
*/ */
APP(1, "app"); APP(1, "app"),
/**
* pc
*/
PC(2, "pc");
private final Integer code; private final Integer code;

6
im-platform/src/main/java/com/bx/implatform/dto/LoginDTO.java

@ -13,10 +13,10 @@ import javax.validation.constraints.NotNull;
@ApiModel("用户登录DTO") @ApiModel("用户登录DTO")
public class LoginDTO { public class LoginDTO {
@Max(value = 1, message = "登录终端类型取值范围:0,1") @Max(value = 2, message = "登录终端类型取值范围:0,2")
@Min(value = 0, message = "登录终端类型取值范围:0,1") @Min(value = 0, message = "登录终端类型取值范围:0,2")
@NotNull(message = "登录终端类型不可为空") @NotNull(message = "登录终端类型不可为空")
@ApiModelProperty(value = "登录终端 0:web 1:app") @ApiModelProperty(value = "登录终端 0:web 1:app 2:pc")
private Integer terminal; private Integer terminal;
@NotEmpty(message = "用户名不可为空") @NotEmpty(message = "用户名不可为空")

1
im-platform/src/main/resources/application.yml

@ -54,3 +54,4 @@ jwt:
refreshToken: refreshToken:
expireIn: 604800 #7天 expireIn: 604800 #7天
secret: IKDiqVmn0VFU secret: IKDiqVmn0VFU

9
im-ui/src/api/wssocket.js

@ -1,6 +1,7 @@
var websock = null; var websock = null;
let rec; //断线重连后,延迟5秒重新创建WebSocket连接 rec用来存储延迟请求的代码 let rec; //断线重连后,延迟5秒重新创建WebSocket连接 rec用来存储延迟请求的代码
let isConnect = false; //连接标识 避免重复连接 let isConnect = false; //连接标识 避免重复连接
let connectCallBack= null;
let messageCallBack = null; let messageCallBack = null;
let closeCallBack = null let closeCallBack = null
@ -16,6 +17,8 @@ let connect = (wsurl,accessToken) => {
let sendInfo = JSON.parse(e.data) let sendInfo = JSON.parse(e.data)
if (sendInfo.cmd == 0) { if (sendInfo.cmd == 0) {
heartCheck.start() heartCheck.start()
// 登录成功才算真正完成连接
connectCallBack && connectCallBack();
console.log('WebSocket登录成功') console.log('WebSocket登录成功')
} else if (sendInfo.cmd == 1) { } else if (sendInfo.cmd == 1) {
// 重新开启心跳定时 // 重新开启心跳定时
@ -119,6 +122,9 @@ let sendMessage = (agentData) => {
} }
} }
let onConnect = (callback) => {
connectCallBack = callback;
}
let onMessage = (callback) => { let onMessage = (callback) => {
messageCallBack = callback; messageCallBack = callback;
@ -134,6 +140,7 @@ export {
reconnect, reconnect,
close, close,
sendMessage, sendMessage,
onConnect,
onMessage, onMessage,
onClose onClose,
} }

11
im-ui/src/view/Home.vue

@ -80,11 +80,14 @@
methods: { methods: {
init() { init() {
this.$store.dispatch("load").then(() => { this.$store.dispatch("load").then(() => {
// 线
this.loadPrivateMessage(this.$store.state.chatStore.privateMsgMaxId);
this.loadGroupMessage(this.$store.state.chatStore.groupMsgMaxId);
// ws // ws
this.$wsApi.connect(process.env.VUE_APP_WS_URL, sessionStorage.getItem("accessToken")); 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) => { this.$wsApi.onMessage((cmd, msgInfo) => {
if (cmd == 2) { if (cmd == 2) {
// ws // ws
@ -104,7 +107,7 @@
// //
this.handleGroupMessage(msgInfo); this.handleGroupMessage(msgInfo);
} }
}) });
this.$wsApi.onClose((e) => { this.$wsApi.onClose((e) => {
console.log(e); console.log(e);
if (e.code != 3000) { if (e.code != 3000) {

2
im-ui/src/view/Login.vue

@ -35,7 +35,7 @@
<a class="login-icon" href="https://gitee.com/bluexsx/box-im" target="_blank"> <a class="login-icon" href="https://gitee.com/bluexsx/box-im" target="_blank">
<img src="https://gitee.com/bluexsx/box-im/badge/star.svg" /> <img src="https://gitee.com/bluexsx/box-im/badge/star.svg" />
</a> </a>
<a class="login-icon" href="https://gitee.com/bluexsx/box-im" target="_blank"> <a class="login-icon" href="https://github.com/bluexsx/box-im" target="_blank">
<img src="https://img.shields.io/github/stars/bluexsx/box-im.svg?style=flat&logo=GitHub" /> <img src="https://img.shields.io/github/stars/bluexsx/box-im.svg?style=flat&logo=GitHub" />
</a> </a>

20
im-uniapp/App.vue

@ -18,9 +18,6 @@
this.initAudit(); this.initAudit();
// websocket // websocket
this.initWebSocket(); this.initWebSocket();
// 线
this.loadPrivateMessage(store.state.chatStore.privateMsgMaxId);
this.loadGroupMessage(store.state.chatStore.groupMsgMaxId);
}).catch((e) => { }).catch((e) => {
console.log(e); console.log(e);
this.exit(); this.exit();
@ -30,6 +27,11 @@
let loginInfo = uni.getStorageSync("loginInfo") let loginInfo = uni.getStorageSync("loginInfo")
wsApi.init(); wsApi.init();
wsApi.connect(process.env.WS_URL, loginInfo.accessToken); 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) => { wsApi.onMessage((cmd, msgInfo) => {
if (cmd == 2) { if (cmd == 2) {
// 线 // 线
@ -69,8 +71,8 @@
msgInfo.selfSend = msgInfo.sendId == store.state.userStore.userInfo.id; msgInfo.selfSend = msgInfo.sendId == store.state.userStore.userInfo.id;
let friendId = msgInfo.selfSend ? msgInfo.recvId : msgInfo.sendId; let friendId = msgInfo.selfSend ? msgInfo.recvId : msgInfo.sendId;
let friend = store.state.friendStore.friends.find((f) => f.id == friendId); let friend = store.state.friendStore.friends.find((f) => f.id == friendId);
if(friend){ if (friend) {
this.insertPrivateMessage(friend,msgInfo); this.insertPrivateMessage(friend, msgInfo);
} }
}) })
if (msgInfos.length == 100) { if (msgInfos.length == 100) {
@ -91,8 +93,8 @@
msgInfo.selfSend = msgInfo.sendId == store.state.userStore.userInfo.id; msgInfo.selfSend = msgInfo.sendId == store.state.userStore.userInfo.id;
let groupId = msgInfo.groupId; let groupId = msgInfo.groupId;
let group = store.state.groupStore.groups.find((g) => g.id == groupId); let group = store.state.groupStore.groups.find((g) => g.id == groupId);
if(group){ if (group) {
this.insertGroupMessage(group,msgInfo); this.insertGroupMessage(group, msgInfo);
} }
}) })
if (msgInfos.length == 100) { if (msgInfos.length == 100) {
@ -119,7 +121,9 @@
store.commit("resetUnreadCount", chatInfo) store.commit("resetUnreadCount", chatInfo)
} else { } else {
// //
store.commit("readedMessage", {friendId:friendId}) store.commit("readedMessage", {
friendId: friendId
})
} }
return; return;

7
im-uniapp/common/wssocket.js

@ -2,6 +2,7 @@ let wsurl = "";
let accessToken = ""; let accessToken = "";
let messageCallBack = null; let messageCallBack = null;
let closeCallBack = null; let closeCallBack = null;
let connectCallBack = null;
let isConnect = false; //连接标识 避免重复连接 let isConnect = false; //连接标识 避免重复连接
let rec = null; let rec = null;
let isInit = false; let isInit = false;
@ -31,6 +32,7 @@ let init = () => {
let sendInfo = JSON.parse(res.data) let sendInfo = JSON.parse(res.data)
if (sendInfo.cmd == 0) { if (sendInfo.cmd == 0) {
heartCheck.start() heartCheck.start()
connectCallBack && connectCallBack();
console.log('WebSocket登录成功') console.log('WebSocket登录成功')
} else if (sendInfo.cmd == 1) { } else if (sendInfo.cmd == 1) {
// 重新开启心跳定时 // 重新开启心跳定时
@ -145,6 +147,10 @@ function sendMessage(agentData) {
}) })
} }
let onConnect = (callback) => {
connectCallBack = callback;
}
function onMessage(callback) { function onMessage(callback) {
messageCallBack = callback; messageCallBack = callback;
@ -163,6 +169,7 @@ export {
reconnect, reconnect,
close, close,
sendMessage, sendMessage,
onConnect,
onMessage, onMessage,
onClose onClose
} }
Loading…
Cancel
Save