Browse Source

!107 修复几个bug

Merge pull request !107 from blue/v_3.0.0
master
blue 2 years ago
committed by Gitee
parent
commit
48af793cee
No known key found for this signature in database GPG Key ID: 173E9B9CA92EEF8F
  1. 2
      .gitignore
  2. 2
      db/im-platform.sql
  3. 2
      im-client/pom.xml
  4. 2
      im-common/pom.xml
  5. 0
      im-common/src/main/java/com/bx/imcommon/contant/IMConstant.java
  6. 0
      im-common/src/main/java/com/bx/imcommon/contant/IMRedisKey.java
  7. 0
      im-common/src/main/java/com/bx/imcommon/enums/IMCmdType.java
  8. 0
      im-common/src/main/java/com/bx/imcommon/enums/IMListenerType.java
  9. 0
      im-common/src/main/java/com/bx/imcommon/enums/IMSendCode.java
  10. 0
      im-common/src/main/java/com/bx/imcommon/enums/IMTerminalType.java
  11. 0
      im-common/src/main/java/com/bx/imcommon/model/IMGroupMessage.java
  12. 0
      im-common/src/main/java/com/bx/imcommon/model/IMHeartbeatInfo.java
  13. 0
      im-common/src/main/java/com/bx/imcommon/model/IMLoginInfo.java
  14. 0
      im-common/src/main/java/com/bx/imcommon/model/IMPrivateMessage.java
  15. 0
      im-common/src/main/java/com/bx/imcommon/model/IMRecvInfo.java
  16. 0
      im-common/src/main/java/com/bx/imcommon/model/IMSendInfo.java
  17. 0
      im-common/src/main/java/com/bx/imcommon/model/IMSendResult.java
  18. 0
      im-common/src/main/java/com/bx/imcommon/model/IMSessionInfo.java
  19. 0
      im-common/src/main/java/com/bx/imcommon/model/IMSystemMessage.java
  20. 0
      im-common/src/main/java/com/bx/imcommon/model/IMUserInfo.java
  21. 0
      im-common/src/main/java/com/bx/imcommon/mq/RedisMQConfig.java
  22. 0
      im-common/src/main/java/com/bx/imcommon/mq/RedisMQConsumer.java
  23. 0
      im-common/src/main/java/com/bx/imcommon/mq/RedisMQListener.java
  24. 7
      im-common/src/main/java/com/bx/imcommon/mq/RedisMQPullTask.java
  25. 16
      im-common/src/main/java/com/bx/imcommon/mq/RedisMQTemplate.java
  26. 0
      im-common/src/main/java/com/bx/imcommon/serializer/DateToLongSerializer.java
  27. 0
      im-common/src/main/java/com/bx/imcommon/util/CommaTextUtils.java
  28. 0
      im-common/src/main/java/com/bx/imcommon/util/JwtUtil.java
  29. 0
      im-common/src/main/java/com/bx/imcommon/util/ThreadPoolExecutorFactory.java
  30. 27
      im-platform/src/main/java/com/bx/implatform/config/TaskSchedulerConfig.java
  31. 2
      im-platform/src/main/java/com/bx/implatform/entity/Group.java
  32. 3
      im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java
  33. 4
      im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java
  34. 2
      im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java
  35. 2
      im-platform/src/main/java/com/bx/implatform/task/consumer/GroupBannedConsumerTask.java
  36. 2
      im-platform/src/main/java/com/bx/implatform/task/consumer/GroupUnbanConsumerTask.java
  37. 2
      im-platform/src/main/java/com/bx/implatform/task/consumer/UserBannedConsumerTask.java
  38. 26
      im-platform/src/main/java/com/bx/implatform/task/schedule/ReloadSensitiveWordTask.java
  39. 39
      im-platform/src/main/java/com/bx/implatform/util/SensitiveFilterUtil.java
  40. 4
      im-platform/src/main/java/com/bx/implatform/vo/GroupVO.java
  41. 2
      im-server/pom.xml
  42. 29
      im-server/src/main/java/com/bx/imserver/netty/processor/ProcessorFactory.java
  43. 40
      im-server/src/main/java/com/bx/imserver/netty/processor/SystemMessageProcessor.java
  44. 7
      im-uniapp/manifest.json
  45. 2
      pom.xml

2
.gitignore

@ -7,7 +7,7 @@
/im-platform/src/main/resources/logback-prod.xml /im-platform/src/main/resources/logback-prod.xml
/im-server/src/main/resources/application-prod.yml /im-server/src/main/resources/application-prod.yml
/im-server/src/main/resources/logback-prod.xml /im-server/src/main/resources/logback-prod.xml
/im-commom/im-commom.iml /im-common/im-common.iml
/im-uniapp/node_modules/ /im-uniapp/node_modules/
/im-web/package-lock.json /im-web/package-lock.json
/im-uniapp/unpackage/ /im-uniapp/unpackage/

2
db/im-platform.sql

@ -49,7 +49,7 @@ create table `im_group`(
`notice` varchar(1024) default '' comment '群公告', `notice` varchar(1024) default '' comment '群公告',
`is_banned` tinyint(1) default 0 comment '是否被封禁 0:否 1:是', `is_banned` tinyint(1) default 0 comment '是否被封禁 0:否 1:是',
`reason` varchar(255) default '' comment '被封禁原因', `reason` varchar(255) default '' comment '被封禁原因',
`deleted` tinyint(1) default 0 comment '是否已删除', `dissolve` tinyint(1) default 0 comment '是否已解散',
`created_time` datetime default CURRENT_TIMESTAMP comment '创建时间' `created_time` datetime default CURRENT_TIMESTAMP comment '创建时间'
)ENGINE=InnoDB CHARSET=utf8mb4 comment ''; )ENGINE=InnoDB CHARSET=utf8mb4 comment '';

2
im-client/pom.xml

@ -14,7 +14,7 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.bx</groupId> <groupId>com.bx</groupId>
<artifactId>im-commom</artifactId> <artifactId>im-common</artifactId>
<version>3.0.0</version> <version>3.0.0</version>
</dependency> </dependency>
</dependencies> </dependencies>

2
im-commom/pom.xml → im-common/pom.xml

@ -8,7 +8,7 @@
<version>3.0.0</version> <version>3.0.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>im-commom</artifactId> <artifactId>im-common</artifactId>
<packaging>jar</packaging> <packaging>jar</packaging>
<dependencies> <dependencies>
<dependency> <dependency>

0
im-commom/src/main/java/com/bx/imcommon/contant/IMConstant.java → im-common/src/main/java/com/bx/imcommon/contant/IMConstant.java

0
im-commom/src/main/java/com/bx/imcommon/contant/IMRedisKey.java → im-common/src/main/java/com/bx/imcommon/contant/IMRedisKey.java

0
im-commom/src/main/java/com/bx/imcommon/enums/IMCmdType.java → im-common/src/main/java/com/bx/imcommon/enums/IMCmdType.java

0
im-commom/src/main/java/com/bx/imcommon/enums/IMListenerType.java → im-common/src/main/java/com/bx/imcommon/enums/IMListenerType.java

0
im-commom/src/main/java/com/bx/imcommon/enums/IMSendCode.java → im-common/src/main/java/com/bx/imcommon/enums/IMSendCode.java

0
im-commom/src/main/java/com/bx/imcommon/enums/IMTerminalType.java → im-common/src/main/java/com/bx/imcommon/enums/IMTerminalType.java

0
im-commom/src/main/java/com/bx/imcommon/model/IMGroupMessage.java → im-common/src/main/java/com/bx/imcommon/model/IMGroupMessage.java

0
im-commom/src/main/java/com/bx/imcommon/model/IMHeartbeatInfo.java → im-common/src/main/java/com/bx/imcommon/model/IMHeartbeatInfo.java

0
im-commom/src/main/java/com/bx/imcommon/model/IMLoginInfo.java → im-common/src/main/java/com/bx/imcommon/model/IMLoginInfo.java

0
im-commom/src/main/java/com/bx/imcommon/model/IMPrivateMessage.java → im-common/src/main/java/com/bx/imcommon/model/IMPrivateMessage.java

0
im-commom/src/main/java/com/bx/imcommon/model/IMRecvInfo.java → im-common/src/main/java/com/bx/imcommon/model/IMRecvInfo.java

0
im-commom/src/main/java/com/bx/imcommon/model/IMSendInfo.java → im-common/src/main/java/com/bx/imcommon/model/IMSendInfo.java

0
im-commom/src/main/java/com/bx/imcommon/model/IMSendResult.java → im-common/src/main/java/com/bx/imcommon/model/IMSendResult.java

0
im-commom/src/main/java/com/bx/imcommon/model/IMSessionInfo.java → im-common/src/main/java/com/bx/imcommon/model/IMSessionInfo.java

0
im-commom/src/main/java/com/bx/imcommon/model/IMSystemMessage.java → im-common/src/main/java/com/bx/imcommon/model/IMSystemMessage.java

0
im-commom/src/main/java/com/bx/imcommon/model/IMUserInfo.java → im-common/src/main/java/com/bx/imcommon/model/IMUserInfo.java

0
im-commom/src/main/java/com/bx/imcommon/mq/RedisMQConfig.java → im-common/src/main/java/com/bx/imcommon/mq/RedisMQConfig.java

0
im-commom/src/main/java/com/bx/imcommon/mq/RedisMQConsumer.java → im-common/src/main/java/com/bx/imcommon/mq/RedisMQConsumer.java

0
im-commom/src/main/java/com/bx/imcommon/mq/RedisMQListener.java → im-common/src/main/java/com/bx/imcommon/mq/RedisMQListener.java

7
im-commom/src/main/java/com/bx/imcommon/mq/RedisMQPullTask.java → im-common/src/main/java/com/bx/imcommon/mq/RedisMQPullTask.java

@ -52,11 +52,6 @@ public class RedisMQPullTask implements CommandLineRunner {
public void run() { public void run() {
List<Object> datas = new LinkedList<>(); List<Object> datas = new LinkedList<>();
try { try {
if(redisMQTemplate.isClose()){
// 如果redis未初始化或已断开,3s后再重新尝试消费
EXECUTOR.schedule(this, 3, TimeUnit.SECONDS);
return;
}
if (consumer.isReady()) { if (consumer.isReady()) {
String key = consumer.generateKey(); String key = consumer.generateKey();
// 拉取一个批次的数据 // 拉取一个批次的数据
@ -75,6 +70,8 @@ public class RedisMQPullTask implements CommandLineRunner {
} }
} catch (Exception e) { } catch (Exception e) {
log.error("数据消费异常,队列:{}", queue, e); log.error("数据消费异常,队列:{}", queue, e);
// 出现异常,10s后再重新尝试消费
EXECUTOR.schedule(this, 10, TimeUnit.SECONDS);
return; return;
} }
// 继续消费数据 // 继续消费数据

16
im-commom/src/main/java/com/bx/imcommon/mq/RedisMQTemplate.java → im-common/src/main/java/com/bx/imcommon/mq/RedisMQTemplate.java

@ -2,10 +2,9 @@ package com.bx.imcommon.mq;
import org.apache.logging.log4j.util.Strings; import org.apache.logging.log4j.util.Strings;
import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisConnectionUtils;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import java.util.Objects;
import java.util.Properties; import java.util.Properties;
/** /**
@ -19,9 +18,10 @@ public class RedisMQTemplate extends RedisTemplate<String, Object> {
public String getVersion() { public String getVersion() {
if (version.isEmpty()) { if (version.isEmpty()) {
RedisConnection redisConnection = this.getConnectionFactory().getConnection(); RedisConnection connection = RedisConnectionUtils.getConnection(getConnectionFactory());
Properties properties = redisConnection.info(); Properties properties = connection.info();
version = properties.getProperty("redis_version"); version = properties.getProperty("redis_version");
RedisConnectionUtils.releaseConnection(connection,getConnectionFactory());
} }
return version; return version;
} }
@ -41,12 +41,4 @@ public class RedisMQTemplate extends RedisTemplate<String, Object> {
return firVersion > 6 || (firVersion == 6 && secVersion >= 2); return firVersion > 6 || (firVersion == 6 && secVersion >= 2);
} }
Boolean isClose(){
try {
return getConnectionFactory().getConnection().isClosed();
}catch (Exception e){
return true;
}
}
} }

0
im-commom/src/main/java/com/bx/imcommon/serializer/DateToLongSerializer.java → im-common/src/main/java/com/bx/imcommon/serializer/DateToLongSerializer.java

0
im-commom/src/main/java/com/bx/imcommon/util/CommaTextUtils.java → im-common/src/main/java/com/bx/imcommon/util/CommaTextUtils.java

0
im-commom/src/main/java/com/bx/imcommon/util/JwtUtil.java → im-common/src/main/java/com/bx/imcommon/util/JwtUtil.java

0
im-commom/src/main/java/com/bx/imcommon/util/ThreadPoolExecutorFactory.java → im-common/src/main/java/com/bx/imcommon/util/ThreadPoolExecutorFactory.java

27
im-platform/src/main/java/com/bx/implatform/config/TaskSchedulerConfig.java

@ -0,0 +1,27 @@
package com.bx.implatform.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
/**
* @author: Blue
* @date: 2024-09-01
* @version: 1.0
*/
@EnableScheduling
@Configuration
public class TaskSchedulerConfig {
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(10); // 设置线程池大小
taskScheduler.setThreadNamePrefix("scheduled-task-");
taskScheduler.initialize();
return taskScheduler;
}
}

2
im-platform/src/main/java/com/bx/implatform/entity/Group.java

@ -65,7 +65,7 @@ public class Group {
/** /**
* 是否已删除 * 是否已删除
*/ */
private Boolean deleted; private Boolean dissolve;

3
im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java

@ -73,11 +73,12 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
msg.setSendTime(new Date()); msg.setSendTime(new Date());
msg.setSendNickName(member.getShowNickName()); msg.setSendNickName(member.getShowNickName());
msg.setAtUserIds(CommaTextUtils.asText(dto.getAtUserIds())); msg.setAtUserIds(CommaTextUtils.asText(dto.getAtUserIds()));
this.save(msg);
// 过滤内容中的敏感词 // 过滤内容中的敏感词
if(MessageType.TEXT.code().equals(dto.getType())){ if(MessageType.TEXT.code().equals(dto.getType())){
msg.setContent(sensitiveFilterUtil.filter(dto.getContent())); msg.setContent(sensitiveFilterUtil.filter(dto.getContent()));
} }
this.save(msg);
// 群发 // 群发
GroupMessageVO msgInfo = BeanUtils.copyProperties(msg, GroupMessageVO.class); GroupMessageVO msgInfo = BeanUtils.copyProperties(msg, GroupMessageVO.class);
msgInfo.setAtUserIds(dto.getAtUserIds()); msgInfo.setAtUserIds(dto.getAtUserIds());

4
im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java

@ -114,7 +114,7 @@ public class GroupServiceImpl extends ServiceImpl<GroupMapper, Group> implements
// 群聊用户id // 群聊用户id
List<Long> userIds = groupMemberService.findUserIdsByGroupId(groupId); List<Long> userIds = groupMemberService.findUserIdsByGroupId(groupId);
// 逻辑删除群数据 // 逻辑删除群数据
group.setDeleted(true); group.setDissolve(true);
this.updateById(group); this.updateById(group);
// 删除成员数据 // 删除成员数据
groupMemberService.removeByGroupId(groupId); groupMemberService.removeByGroupId(groupId);
@ -190,7 +190,7 @@ public class GroupServiceImpl extends ServiceImpl<GroupMapper, Group> implements
if (Objects.isNull(group)) { if (Objects.isNull(group)) {
throw new GlobalException("群组不存在"); throw new GlobalException("群组不存在");
} }
if (group.getDeleted()) { if (group.getDissolve()) {
throw new GlobalException("群组'" + group.getName() + "'已解散"); throw new GlobalException("群组'" + group.getName() + "'已解散");
} }
if (group.getIsBanned()) { if (group.getIsBanned()) {

2
im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java

@ -56,11 +56,11 @@ public class PrivateMessageServiceImpl extends ServiceImpl<PrivateMessageMapper,
msg.setSendId(session.getUserId()); msg.setSendId(session.getUserId());
msg.setStatus(MessageStatus.UNSEND.code()); msg.setStatus(MessageStatus.UNSEND.code());
msg.setSendTime(new Date()); msg.setSendTime(new Date());
this.save(msg);
// 过滤内容中的敏感词 // 过滤内容中的敏感词
if (MessageType.TEXT.code().equals(dto.getType())) { if (MessageType.TEXT.code().equals(dto.getType())) {
msg.setContent(sensitiveFilterUtil.filter(dto.getContent())); msg.setContent(sensitiveFilterUtil.filter(dto.getContent()));
} }
this.save(msg);
// 推送消息 // 推送消息
PrivateMessageVO msgInfo = BeanUtils.copyProperties(msg, PrivateMessageVO.class); PrivateMessageVO msgInfo = BeanUtils.copyProperties(msg, PrivateMessageVO.class);
IMPrivateMessage<PrivateMessageVO> sendMessage = new IMPrivateMessage<>(); IMPrivateMessage<PrivateMessageVO> sendMessage = new IMPrivateMessage<>();

2
im-platform/src/main/java/com/bx/implatform/task/GroupBannedConsumerTask.java → im-platform/src/main/java/com/bx/implatform/task/consumer/GroupBannedConsumerTask.java

@ -1,4 +1,4 @@
package com.bx.implatform.task; package com.bx.implatform.task.consumer;
import com.bx.imclient.IMClient; import com.bx.imclient.IMClient;
import com.bx.imcommon.enums.IMTerminalType; import com.bx.imcommon.enums.IMTerminalType;

2
im-platform/src/main/java/com/bx/implatform/task/GroupUnbanConsumerTask.java → im-platform/src/main/java/com/bx/implatform/task/consumer/GroupUnbanConsumerTask.java

@ -1,4 +1,4 @@
package com.bx.implatform.task; package com.bx.implatform.task.consumer;
import com.bx.imclient.IMClient; import com.bx.imclient.IMClient;
import com.bx.imcommon.enums.IMTerminalType; import com.bx.imcommon.enums.IMTerminalType;

2
im-platform/src/main/java/com/bx/implatform/task/UserBannedConsumerTask.java → im-platform/src/main/java/com/bx/implatform/task/consumer/UserBannedConsumerTask.java

@ -1,4 +1,4 @@
package com.bx.implatform.task; package com.bx.implatform.task.consumer;
import com.bx.imclient.IMClient; import com.bx.imclient.IMClient;
import com.bx.imcommon.model.IMSystemMessage; import com.bx.imcommon.model.IMSystemMessage;

26
im-platform/src/main/java/com/bx/implatform/task/schedule/ReloadSensitiveWordTask.java

@ -0,0 +1,26 @@
package com.bx.implatform.task.schedule;
import com.bx.implatform.util.SensitiveFilterUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
* @author: Blue
* @date: 2024-09-01
* @version: 1.0
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class ReloadSensitiveWordTask {
private final SensitiveFilterUtil sensitiveFilterUtil;
@Scheduled(fixedRate = 60000)
public void run() {
log.info("【定时任务】重新装载敏感词...");
sensitiveFilterUtil.reload();
}
}

39
im-platform/src/main/java/com/bx/implatform/util/SensitiveFilterUtil.java

@ -14,7 +14,6 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/** /**
* 敏感词过滤器SensitiveFilter * 敏感词过滤器SensitiveFilter
@ -35,7 +34,7 @@ public final class SensitiveFilterUtil {
/** /**
* 根节点 * 根节点
*/ */
private static final TrieNode ROOT_NODE = new TrieNode(); private static TrieNode ROOT_NODE = new TrieNode();
/** /**
* 线程池 * 线程池
@ -86,41 +85,41 @@ public final class SensitiveFilterUtil {
* @date 2023/12/4 11:18 * @date 2023/12/4 11:18
*/ */
@PostConstruct @PostConstruct
public void init() { public void reload() {
// 每120s装载一次敏感词 // 使用copy on write的方式,防止出现并发问题
EXECUTOR_SERVICE.scheduleAtFixedRate(() -> { TrieNode newNode = new TrieNode();
List<String> keywords = sensitiveWordService.findAllEnabledWords(); List<String> keywords = sensitiveWordService.findAllEnabledWords();
keywords.forEach(keyword->{ keywords.forEach(keyword -> {
if(StrUtil.isNotEmpty(keyword)){ if (StrUtil.isNotEmpty(keyword)) {
// 添加到前缀树 // 添加到前缀树
addKeyword(keyword); addKeyword(newNode,keyword);
} }
}); });
},0,120, TimeUnit.SECONDS); ROOT_NODE = newNode;
} }
/** /**
* 3将一个敏感词添加到前缀树中 * 3将一个敏感词添加到前缀树中
* *
* @param node
* @param keyword * @param keyword
* @author NXY * @author NXY
* @date 2023/12/4 11:15 * @date 2023/12/4 11:15
*/ */
private void addKeyword(String keyword) { private void addKeyword(TrieNode node, String keyword) {
TrieNode tempNode = ROOT_NODE;
for (int i = 0; i < keyword.length(); i++) { for (int i = 0; i < keyword.length(); i++) {
char c = keyword.charAt(i); char c = keyword.charAt(i);
TrieNode subNode = tempNode.getSubNode(c); TrieNode subNode = node.getSubNode(c);
if (subNode == null) { if (subNode == null) {
// 初始化子节点 // 初始化子节点
subNode = new TrieNode(); subNode = new TrieNode();
tempNode.addSubNode(c, subNode); node.addSubNode(c, subNode);
} }
// 指向子节点,进入下一轮循环 // 指向子节点,进入下一轮循环
tempNode = subNode; node = subNode;
// 设置结束标识 // 设置结束标识
if (i == keyword.length() - 1) { if (i == keyword.length() - 1) {
tempNode.setKeywordEnd(true); node.setKeywordEnd(true);
} }
} }
} }
@ -195,9 +194,9 @@ public final class SensitiveFilterUtil {
/** /**
* 判断是否为符号 特殊符号 * 判断是否为符号 特殊符号
* *
* @return boolean
* @author NXY * @author NXY
* @date 2023/12/4 11:17 * @date 2023/12/4 11:17
* @return boolean
*/ */
private boolean isSymbol(Character c) { private boolean isSymbol(Character c) {
// 0x2E80~0x9FFF 是东亚文字范围 // 0x2E80~0x9FFF 是东亚文字范围

4
im-platform/src/main/java/com/bx/implatform/vo/GroupVO.java

@ -44,8 +44,8 @@ public class GroupVO {
@Schema(description = "群名备注") @Schema(description = "群名备注")
private String remarkGroupName; private String remarkGroupName;
@Schema(description = "是否已删除") @Schema(description = "是否已解散")
private Boolean deleted; private Boolean dissolve;
@Schema(description = "是否已退出") @Schema(description = "是否已退出")
private Boolean quit; private Boolean quit;

2
im-server/pom.xml

@ -15,7 +15,7 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.bx</groupId> <groupId>com.bx</groupId>
<artifactId>im-commom</artifactId> <artifactId>im-common</artifactId>
<version>3.0.0</version> <version>3.0.0</version>
</dependency> </dependency>
<dependency> <dependency>

29
im-server/src/main/java/com/bx/imserver/netty/processor/ProcessorFactory.java

@ -6,27 +6,14 @@ import com.bx.imserver.util.SpringContextHolder;
public class ProcessorFactory { public class ProcessorFactory {
public static AbstractMessageProcessor createProcessor(IMCmdType cmd) { public static AbstractMessageProcessor createProcessor(IMCmdType cmd) {
AbstractMessageProcessor processor = null; return switch (cmd) {
switch (cmd) { case LOGIN->SpringContextHolder.getApplicationContext().getBean(LoginProcessor.class);
case LOGIN: case HEART_BEAT -> SpringContextHolder.getApplicationContext().getBean(HeartbeatProcessor.class);
processor = SpringContextHolder.getApplicationContext().getBean(LoginProcessor.class); case PRIVATE_MESSAGE->SpringContextHolder.getApplicationContext().getBean(PrivateMessageProcessor.class);
break; case GROUP_MESSAGE->SpringContextHolder.getApplicationContext().getBean(GroupMessageProcessor.class);
case HEART_BEAT: case SYSTEM_MESSAGE->SpringContextHolder.getApplicationContext().getBean(SystemMessageProcessor.class);
processor = SpringContextHolder.getApplicationContext().getBean(HeartbeatProcessor.class); default -> null;
break; };
case PRIVATE_MESSAGE:
processor = SpringContextHolder.getApplicationContext().getBean(PrivateMessageProcessor.class);
break;
case GROUP_MESSAGE:
processor = SpringContextHolder.getApplicationContext().getBean(GroupMessageProcessor.class);
break;
case SYSTEM_MESSAGE:
processor = SpringContextHolder.getApplicationContext().getBean(SystemMessageProcessor.class);
break;
default:
break;
}
return processor;
} }
} }

40
im-server/src/main/java/com/bx/imserver/netty/processor/SystemMessageProcessor.java

@ -26,27 +26,29 @@ public class SystemMessageProcessor extends AbstractMessageProcessor<IMRecvInfo>
@Override @Override
public void process(IMRecvInfo recvInfo) { public void process(IMRecvInfo recvInfo) {
IMUserInfo receiver = recvInfo.getReceivers().get(0); log.info("接收到系统消息,接收用户数量:{},内容:{}", recvInfo.getReceivers().size(), recvInfo.getData());
log.info("接收到系统消息,接收者:{},内容:{}", receiver.getId(), recvInfo.getData()); for (IMUserInfo receiver : recvInfo.getReceivers()) {
try { try {
ChannelHandlerContext channelCtx = UserChannelCtxMap.getChannelCtx(receiver.getId(), receiver.getTerminal()); ChannelHandlerContext channelCtx =
if (!Objects.isNull(channelCtx)) { UserChannelCtxMap.getChannelCtx(receiver.getId(), receiver.getTerminal());
// 推送消息到用户 if (!Objects.isNull(channelCtx)) {
IMSendInfo<Object> sendInfo = new IMSendInfo<>(); // 推送消息到用户
sendInfo.setCmd(IMCmdType.SYSTEM_MESSAGE.code()); IMSendInfo<Object> sendInfo = new IMSendInfo<>();
sendInfo.setData(recvInfo.getData()); sendInfo.setCmd(IMCmdType.SYSTEM_MESSAGE.code());
channelCtx.channel().writeAndFlush(sendInfo); sendInfo.setData(recvInfo.getData());
// 消息发送成功确认 channelCtx.channel().writeAndFlush(sendInfo);
sendResult(recvInfo, IMSendCode.SUCCESS); // 消息发送成功确认
} else { sendResult(recvInfo, IMSendCode.SUCCESS);
} else {
// 消息推送失败确认
sendResult(recvInfo, IMSendCode.NOT_FIND_CHANNEL);
log.error("未找到channel,接收者:{},内容:{}", receiver.getId(), recvInfo.getData());
}
} catch (Exception e) {
// 消息推送失败确认 // 消息推送失败确认
sendResult(recvInfo, IMSendCode.NOT_FIND_CHANNEL); sendResult(recvInfo, IMSendCode.UNKONW_ERROR);
log.error("未找到channel,接收者:{},内容:{}",receiver.getId(), recvInfo.getData()); log.error("发送异常,,接收者:{},内容:{}", receiver.getId(), recvInfo.getData(), e);
} }
} catch (Exception e) {
// 消息推送失败确认
sendResult(recvInfo, IMSendCode.UNKONW_ERROR);
log.error("发送异常,,接收者:{},内容:{}", receiver.getId(), recvInfo.getData(), e);
} }
} }

7
im-uniapp/manifest.json

@ -2,8 +2,8 @@
"name" : "盒子IM", "name" : "盒子IM",
"appid" : "__UNI__69DD57A", "appid" : "__UNI__69DD57A",
"description" : "", "description" : "",
"versionName" : "1.0.7", "versionName" : "3.0.0",
"versionCode" : 107, "versionCode" : 300,
"transformPx" : false, "transformPx" : false,
/* 5+App */ /* 5+App */
"app-plus" : { "app-plus" : {
@ -54,7 +54,8 @@
"privacyDescription" : { "privacyDescription" : {
"NSMicrophoneUsageDescription" : "", "NSMicrophoneUsageDescription" : "",
"NSCameraUsageDescription" : "" "NSCameraUsageDescription" : ""
} },
"idfa" : false
}, },
/* SDK */ /* SDK */
"sdkConfigs" : { "sdkConfigs" : {

2
pom.xml

@ -17,7 +17,7 @@
<modules> <modules>
<module>im-platform</module> <module>im-platform</module>
<module>im-server</module> <module>im-server</module>
<module>im-commom</module> <module>im-common</module>
<module>im-client</module> <module>im-client</module>
</modules> </modules>

Loading…
Cancel
Save