diff --git a/im-client/src/main/java/com/bx/imclient/sender/IMSender.java b/im-client/src/main/java/com/bx/imclient/sender/IMSender.java index 6fc1297..1e0a7f6 100644 --- a/im-client/src/main/java/com/bx/imclient/sender/IMSender.java +++ b/im-client/src/main/java/com/bx/imclient/sender/IMSender.java @@ -30,30 +30,33 @@ public class IMSender { public void sendPrivateMessage(IMPrivateMessage message) { List results = new LinkedList<>(); - for (Integer terminal : message.getRecvTerminals()) { - // 获取对方连接的channelId - String key = String.join(":", IMRedisKey.IM_USER_SERVER_ID, message.getRecvId().toString(), terminal.toString()); - Integer serverId = (Integer)redisTemplate.opsForValue().get(key); - // 如果对方在线,将数据存储至redis,等待拉取推送 - if (serverId != null) { - String sendKey = String.join(":", IMRedisKey.IM_MESSAGE_PRIVATE_QUEUE, serverId.toString()); - IMRecvInfo recvInfo = new IMRecvInfo(); - recvInfo.setCmd(IMCmdType.PRIVATE_MESSAGE.code()); - recvInfo.setSendResult(message.getSendResult()); - recvInfo.setServiceName(appName); - recvInfo.setSender(message.getSender()); - recvInfo.setReceivers(Collections.singletonList(new IMUserInfo(message.getRecvId(), terminal))); - recvInfo.setData(message.getData()); - redisTemplate.opsForList().rightPush(sendKey, recvInfo); - } else { - IMSendResult result = new IMSendResult(); - result.setSender(message.getSender()); - result.setReceiver(new IMUserInfo(message.getRecvId(), terminal)); - result.setCode(IMSendCode.NOT_ONLINE.code()); - result.setData(message.getData()); - results.add(result); + if(!Objects.isNull(message.getRecvId())){ + for (Integer terminal : message.getRecvTerminals()) { + // 获取对方连接的channelId + String key = String.join(":", IMRedisKey.IM_USER_SERVER_ID, message.getRecvId().toString(), terminal.toString()); + Integer serverId = (Integer)redisTemplate.opsForValue().get(key); + // 如果对方在线,将数据存储至redis,等待拉取推送 + if (serverId != null) { + String sendKey = String.join(":", IMRedisKey.IM_MESSAGE_PRIVATE_QUEUE, serverId.toString()); + IMRecvInfo recvInfo = new IMRecvInfo(); + recvInfo.setCmd(IMCmdType.PRIVATE_MESSAGE.code()); + recvInfo.setSendResult(message.getSendResult()); + recvInfo.setServiceName(appName); + recvInfo.setSender(message.getSender()); + recvInfo.setReceivers(Collections.singletonList(new IMUserInfo(message.getRecvId(), terminal))); + recvInfo.setData(message.getData()); + redisTemplate.opsForList().rightPush(sendKey, recvInfo); + } else { + IMSendResult result = new IMSendResult(); + result.setSender(message.getSender()); + result.setReceiver(new IMUserInfo(message.getRecvId(), terminal)); + result.setCode(IMSendCode.NOT_ONLINE.code()); + result.setData(message.getData()); + results.add(result); + } } } + // 推送给自己的其他终端 if(message.getSendToSelf()){ for (Integer terminal : IMTerminalType.codes()) { diff --git a/im-platform/src/main/java/com/bx/implatform/controller/GroupMessageController.java b/im-platform/src/main/java/com/bx/implatform/controller/GroupMessageController.java index b7e7e94..9a0f959 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/GroupMessageController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/GroupMessageController.java @@ -37,7 +37,7 @@ public class GroupMessageController { @GetMapping("/loadMessage") - @ApiOperation(value = "拉取消息", notes = "拉取消息,一次最多拉取100条") + @ApiOperation(value = "拉取消息(已废弃)", notes = "拉取消息,一次最多拉取100条") public Result> loadMessage(@RequestParam Long minId) { return ResultUtils.success(groupMessageService.loadMessage(minId)); } diff --git a/im-platform/src/main/java/com/bx/implatform/controller/PrivateMessageController.java b/im-platform/src/main/java/com/bx/implatform/controller/PrivateMessageController.java index 8c30239..758c86f 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/PrivateMessageController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/PrivateMessageController.java @@ -38,7 +38,7 @@ public class PrivateMessageController { @GetMapping("/loadMessage") - @ApiOperation(value = "拉取消息", notes = "拉取消息,一次最多拉取100条") + @ApiOperation(value = "拉取消息(已废弃)", notes = "拉取消息,一次最多拉取100条") public Result> loadMessage(@RequestParam Long minId) { return ResultUtils.success(privateMessageService.loadMessage(minId)); } diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java index b785de9..2faa946 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java @@ -206,12 +206,13 @@ public class GroupMessageServiceImpl extends ServiceImpl members = groupMemberService.findByUserId(session.getUserId()); Map groupMemberMap = CollStreamUtil.toIdentityMap(members, GroupMember::getGroupId); Set groupIds = groupMemberMap.keySet(); if(CollectionUtil.isEmpty(groupIds)){ + // 关闭加载中标志 + this.sendLoadingMessage(false); return; } // 开启加载中标志 diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java index 0d9c2e3..415e438 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java @@ -182,10 +182,11 @@ public class PrivateMessageServiceImpl extends ServiceImpl friends = friendService.findFriendByUserId(session.getUserId()); if (friends.isEmpty()) { + // 关闭加载中标志 + this.sendLoadingMessage(false); return; } // 开启加载中标志 @@ -237,8 +238,7 @@ public class PrivateMessageServiceImpl extends ServiceImpl sendMessage = new IMPrivateMessage<>(); sendMessage.setData(msgInfo); sendMessage.setSender(new IMUserInfo(session.getUserId(), session.getTerminal())); - sendMessage.setRecvId(session.getUserId()); - sendMessage.setSendToSelf(false); + sendMessage.setSendToSelf(true); sendMessage.setSendResult(false); imClient.sendPrivateMessage(sendMessage); // 推送回执消息给对方,更新已读状态 diff --git a/im-platform/src/main/java/com/bx/implatform/util/SensitiveFilterUtil.java b/im-platform/src/main/java/com/bx/implatform/util/SensitiveFilterUtil.java index 78158c2..bad68c1 100644 --- a/im-platform/src/main/java/com/bx/implatform/util/SensitiveFilterUtil.java +++ b/im-platform/src/main/java/com/bx/implatform/util/SensitiveFilterUtil.java @@ -79,11 +79,10 @@ public final class SensitiveFilterUtil { */ @PostConstruct public void init() { - try ( - // 类加载器 - InputStream is = this.getClass().getClassLoader().getResourceAsStream("sensitive-words.txt"); - BufferedReader reader = new BufferedReader(new InputStreamReader(is)); - ) { + try { + // 类加载器 + InputStream is = this.getClass().getClassLoader().getResourceAsStream("sensitive-words.txt"); + BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String keyword; while ((keyword = reader.readLine()) != null) { // 添加到前缀树 diff --git a/im-ui/src/components/common/HeadImage.vue b/im-ui/src/components/common/HeadImage.vue index 0ca2985..ce438de 100644 --- a/im-ui/src/components/common/HeadImage.vue +++ b/im-ui/src/components/common/HeadImage.vue @@ -84,7 +84,7 @@ .avatar-text{ background-color: #f2f2f2; /* 默认背景色 */ - border-radius: 50%; /* 圆角效果 */ + border-radius: 10%; /* 圆角效果 */ display: flex; align-items: center; justify-content: center; diff --git a/im-ui/src/store/chatStore.js b/im-ui/src/store/chatStore.js index 0e626fa..9a240be 100644 --- a/im-ui/src/store/chatStore.js +++ b/im-ui/src/store/chatStore.js @@ -176,9 +176,8 @@ export default { } // 根据id顺序插入,防止消息乱序 let insertPos = chat.messages.length; - - if(msgInfo.id>0){ - //防止 图片、文件 在发送方 显示 在顶端 因为还没存库,id=0 + // 防止 图片、文件 在发送方 显示 在顶端 因为还没存库,id=0 + if(msgInfo.id && msgInfo.id > 0){ for (let idx in chat.messages) { if (chat.messages[idx].id && msgInfo.id < chat.messages[idx].id) { insertPos = idx; @@ -187,8 +186,6 @@ export default { } } } - - chat.messages.splice(insertPos, 0, msgInfo); this.commit("saveToStorage"); }, diff --git a/im-ui/src/view/Login.vue b/im-ui/src/view/Login.vue index f3d8b2f..c64b6d4 100644 --- a/im-ui/src/view/Login.vue +++ b/im-ui/src/view/Login.vue @@ -20,7 +20,7 @@
  • web端音视频功能优化:支持语音呼叫、会话中加入通话状态消息
  • uniapp端支持音视频通话,并与web端打通
  • uniapp端音视频源码通话源码暂未开源,需付费获取: - uniapp端音视频通源码购买说明 + uniapp端音视频通源码购买说明
  • diff --git a/im-uniapp/App.vue b/im-uniapp/App.vue index 5a3a7fe..ab6121d 100644 --- a/im-uniapp/App.vue +++ b/im-uniapp/App.vue @@ -15,8 +15,6 @@ init() { // 加载数据 store.dispatch("load").then(() => { - // 审核 - this.initAudit(); // 初始化websocket this.initWebSocket(); }).catch((e) => { @@ -63,16 +61,22 @@ }) }, pullPrivateOfflineMessage(minId) { + store.commit("loadingPrivateMsg",true) http({ url: "/message/private/pullOfflineMessage?minId=" + minId, - method: 'get' - }); + method: 'GET' + }).catch(()=>{ + store.commit("loadingPrivateMsg",false) + }) }, pullGroupOfflineMessage(minId) { + store.commit("loadingGroupMsg",true) http({ url: "/message/group/pullOfflineMessage?minId=" + minId, - method: 'get' - }); + method: 'GET' + }).catch(()=>{ + store.commit("loadingGroupMsg",false) + }) }, handlePrivateMessage(msg) { // 消息加载标志 @@ -195,13 +199,13 @@ }, loadFriendInfo(id) { return new Promise((resolve, reject) => { - let friend = store.state.friendStore.friends.find((f) => f.id == id); + let friend = store.getters.findFriend(id); if (friend) { resolve(friend); } else { http({ url: `/friend/find/${id}`, - method: 'get' + method: 'GET' }).then((friend) => { store.commit("addFriend", friend); resolve(friend) @@ -217,7 +221,7 @@ } else { http({ url: `/group/find/${id}`, - method: 'get' + method: 'GET' }).then((group) => { resolve(group) store.commit("addGroup", group); @@ -239,21 +243,6 @@ // this.audioTip = uni.createInnerAudioContext(); // this.audioTip.src = "/static/audio/tip.wav"; // this.audioTip.play(); - }, - initAudit() { - if (store.state.userStore.userInfo.type == 1) { - // 显示群组功能 - uni.setTabBarItem({ - index: 2, - text: "群聊" - }) - } else { - // 隐藏群组功能 - uni.setTabBarItem({ - index: 2, - text: "搜索" - }) - } } }, onLaunch() { diff --git a/im-uniapp/common/emotion.js b/im-uniapp/common/emotion.js index 06b509a..7e567e3 100644 --- a/im-uniapp/common/emotion.js +++ b/im-uniapp/common/emotion.js @@ -25,7 +25,7 @@ let textToImg = (emoText) => { // 微信小程序不能有前面的'/' path = path.slice(1); // #endif - let img = ``; return img; } diff --git a/im-uniapp/components/chat-item/chat-item.vue b/im-uniapp/components/chat-item/chat-item.vue index 8b8e2f5..aade43c 100644 --- a/im-uniapp/components/chat-item/chat-item.vue +++ b/im-uniapp/components/chat-item/chat-item.vue @@ -1,5 +1,5 @@ @@ -129,6 +133,9 @@ } }) }, + onHideMenu(){ + this.menu.show = false; + }, onSendFail() { uni.showToast({ title: "该文件已发送失败,目前不支持自动重新发送,建议手动重新发送", diff --git a/im-uniapp/components/chat-record/chat-record.vue b/im-uniapp/components/chat-record/chat-record.vue index 623333a..77de146 100644 --- a/im-uniapp/components/chat-record/chat-record.vue +++ b/im-uniapp/components/chat-record/chat-record.vue @@ -1,7 +1,10 @@