From 0058391a4db50bfc3fca7819da03eeb679b87fa6 Mon Sep 17 00:00:00 2001 From: "xie.bx" Date: Fri, 18 Nov 2022 17:04:07 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E8=81=8A=E5=A4=A9=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- commom/pom.xml | 5 + .../bx/common/model/im/GroupMessageInfo.java | 3 + .../common/model/im/PrivateMessageInfo.java | 3 + .../serializer/DateToLongSerializer.java | 28 +++ .../controller/GroupMessageController.java | 9 + .../controller/PrivateMessageController.java | 12 ++ .../service/IGroupMessageService.java | 5 + .../service/IPrivateMessageService.java | 5 + .../service/impl/FriendServiceImpl.java | 4 + .../service/impl/GroupMessageServiceImpl.java | 38 +++- .../service/impl/GroupServiceImpl.java | 14 +- .../impl/PrivateMessageServiceImpl.java | 103 +++++++---- .../service/impl/UserServiceImpl.java | 4 + .../service/thirdparty/FileService.java | 8 +- .../java/com/bx/implatform/util/FileUtil.java | 2 +- .../src/main/resources/application.yml | 2 +- .../endecode/MessageProtocolEncoder.java | 1 + im-ui/src/components/chat/ChatBox.vue | 21 ++- im-ui/src/components/chat/ChatHistory.vue | 170 ++++++++++++++++++ im-ui/src/components/chat/MessageItem.vue | 6 +- 20 files changed, 397 insertions(+), 46 deletions(-) create mode 100644 commom/src/main/java/com/bx/common/serializer/DateToLongSerializer.java create mode 100644 im-ui/src/components/chat/ChatHistory.vue diff --git a/commom/pom.xml b/commom/pom.xml index c269593..bec5ea0 100644 --- a/commom/pom.xml +++ b/commom/pom.xml @@ -58,5 +58,10 @@ velocity ${velocity.version} + + com.fasterxml.jackson.datatype + jackson-datatype-joda + 2.9.10 + \ No newline at end of file diff --git a/commom/src/main/java/com/bx/common/model/im/GroupMessageInfo.java b/commom/src/main/java/com/bx/common/model/im/GroupMessageInfo.java index caaab76..67f08a7 100644 --- a/commom/src/main/java/com/bx/common/model/im/GroupMessageInfo.java +++ b/commom/src/main/java/com/bx/common/model/im/GroupMessageInfo.java @@ -1,5 +1,7 @@ package com.bx.common.model.im; +import com.bx.common.serializer.DateToLongSerializer; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import lombok.Data; import java.util.Date; @@ -20,5 +22,6 @@ public class GroupMessageInfo { private Integer type; + @JsonSerialize(using = DateToLongSerializer.class) private Date sendTime; } diff --git a/commom/src/main/java/com/bx/common/model/im/PrivateMessageInfo.java b/commom/src/main/java/com/bx/common/model/im/PrivateMessageInfo.java index fbc4b49..1a20b3f 100644 --- a/commom/src/main/java/com/bx/common/model/im/PrivateMessageInfo.java +++ b/commom/src/main/java/com/bx/common/model/im/PrivateMessageInfo.java @@ -1,5 +1,7 @@ package com.bx.common.model.im; +import com.bx.common.serializer.DateToLongSerializer; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import lombok.Data; import java.util.Date; @@ -17,5 +19,6 @@ public class PrivateMessageInfo { private Integer type; + @JsonSerialize(using = DateToLongSerializer.class) private Date sendTime; } diff --git a/commom/src/main/java/com/bx/common/serializer/DateToLongSerializer.java b/commom/src/main/java/com/bx/common/serializer/DateToLongSerializer.java new file mode 100644 index 0000000..ad97b82 --- /dev/null +++ b/commom/src/main/java/com/bx/common/serializer/DateToLongSerializer.java @@ -0,0 +1,28 @@ +package com.bx.common.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.core.type.WritableTypeId; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.jsontype.TypeSerializer; + +import java.io.IOException; +import java.util.Date; + +public class DateToLongSerializer extends JsonSerializer { + + @Override + public void serialize(Date date, JsonGenerator jsonGenerator, + SerializerProvider serializerProvider) throws IOException { + jsonGenerator.writeNumber(date.getTime()); + } + + @Override + public void serializeWithType(Date value, JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException { + WritableTypeId typeIdDef = typeSer.writeTypePrefix(gen, + typeSer.typeId(value, JsonToken.VALUE_STRING)); + serialize(value, gen, serializers); + typeSer.writeTypeSuffix(gen, typeIdDef); + } +} 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 99bac42..68b882b 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 @@ -1,6 +1,7 @@ package com.bx.implatform.controller; +import com.bx.common.model.im.GroupMessageInfo; import com.bx.common.result.Result; import com.bx.common.result.ResultUtils; import com.bx.implatform.service.IGroupMessageService; @@ -12,6 +13,7 @@ import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import javax.validation.constraints.NotNull; +import java.util.List; @Api(tags = "群聊消息") @@ -43,5 +45,12 @@ public class GroupMessageController { return ResultUtils.success(); } + @GetMapping("/history") + @ApiOperation(value = "查询聊天记录",notes="查询聊天记录") + public Result> recallMessage(@NotNull(message = "群聊id不能为空") @RequestParam Long groupId, + @NotNull(message = "页码不能为空") @RequestParam Long page, + @NotNull(message = "size不能为空") @RequestParam Long size){ + return ResultUtils.success( groupMessageService.findHistoryMessage(groupId,page,size)); + } } 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 5fd0286..662c2d8 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 @@ -1,6 +1,7 @@ package com.bx.implatform.controller; +import com.bx.common.model.im.PrivateMessageInfo; import com.bx.common.result.Result; import com.bx.common.result.ResultUtils; import com.bx.implatform.service.IPrivateMessageService; @@ -12,6 +13,7 @@ import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import javax.validation.constraints.NotNull; +import java.util.List; @Api(tags = "私聊消息") @RestController @@ -42,5 +44,15 @@ public class PrivateMessageController { privateMessageService.pullUnreadMessage(); return ResultUtils.success(); } + + + @GetMapping("/history") + @ApiOperation(value = "查询聊天记录",notes="查询聊天记录") + public Result> recallMessage(@NotNull(message = "好友id不能为空") @RequestParam Long friendId, + @NotNull(message = "页码不能为空") @RequestParam Long page, + @NotNull(message = "size不能为空") @RequestParam Long size){ + return ResultUtils.success( privateMessageService.findHistoryMessage(friendId,page,size)); + } + } diff --git a/im-platform/src/main/java/com/bx/implatform/service/IGroupMessageService.java b/im-platform/src/main/java/com/bx/implatform/service/IGroupMessageService.java index 0bd85fb..7bb582e 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/IGroupMessageService.java +++ b/im-platform/src/main/java/com/bx/implatform/service/IGroupMessageService.java @@ -1,9 +1,12 @@ package com.bx.implatform.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.bx.common.model.im.GroupMessageInfo; import com.bx.implatform.entity.GroupMessage; import com.bx.implatform.vo.GroupMessageVO; +import java.util.List; + public interface IGroupMessageService extends IService { @@ -13,4 +16,6 @@ public interface IGroupMessageService extends IService { void recallMessage(Long id); void pullUnreadMessage(); + + List findHistoryMessage(Long groupId, Long page, Long size); } diff --git a/im-platform/src/main/java/com/bx/implatform/service/IPrivateMessageService.java b/im-platform/src/main/java/com/bx/implatform/service/IPrivateMessageService.java index e6c8069..0b1cc37 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/IPrivateMessageService.java +++ b/im-platform/src/main/java/com/bx/implatform/service/IPrivateMessageService.java @@ -1,9 +1,12 @@ package com.bx.implatform.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.bx.common.model.im.PrivateMessageInfo; import com.bx.implatform.entity.PrivateMessage; import com.bx.implatform.vo.PrivateMessageVO; +import java.util.List; + public interface IPrivateMessageService extends IService { @@ -11,6 +14,8 @@ public interface IPrivateMessageService extends IService { void recallMessage(Long id); + List findHistoryMessage(Long friendId, Long page,Long size); + void pullUnreadMessage(); } diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/FriendServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/FriendServiceImpl.java index 89faeca..f5df55a 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/FriendServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/FriendServiceImpl.java @@ -13,6 +13,7 @@ import com.bx.implatform.service.IUserService; import com.bx.implatform.session.SessionContext; import com.bx.implatform.session.UserSession; import com.bx.implatform.vo.FriendVO; +import lombok.extern.slf4j.Slf4j; import org.springframework.aop.framework.AopContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; @@ -24,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; +@Slf4j @CacheConfig(cacheNames= RedisKey.IM_CACHE_FRIEND) @Service public class FriendServiceImpl extends ServiceImpl implements IFriendService { @@ -63,6 +65,7 @@ public class FriendServiceImpl extends ServiceImpl impleme FriendServiceImpl proxy = (FriendServiceImpl)AopContext.currentProxy(); proxy.bindFriend(userId,friendId); proxy.bindFriend(friendId,userId); + log.info("添加好友,用户id:{},好友id:{}",userId,friendId); } @@ -80,6 +83,7 @@ public class FriendServiceImpl extends ServiceImpl impleme FriendServiceImpl proxy = (FriendServiceImpl)AopContext.currentProxy(); proxy.unbindFriend(userId,friendId); proxy.unbindFriend(friendId,userId); + log.info("删除好友,用户id:{},好友id:{}",userId,friendId); } 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 3036dab..f2f40c6 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 @@ -46,7 +46,7 @@ public class GroupMessageServiceImpl extends ServiceImpl findHistoryMessage(Long groupId, Long page, Long size) { + page = page > 0 ? page:1; + size = size > 0 ? size:10; + Long userId = SessionContext.getSession().getId(); + Long stIdx = (page-1)* size; + // 群聊成员信息 + GroupMember member = groupMemberService.findByGroupAndUserId(groupId,userId); + if(member == null || member.getQuit()){ + throw new GlobalException(ResultCode.PROGRAM_ERROR,"您已不在群聊中"); + } + // 查询聊天记录,只查询加入群聊时间之后的消息 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.lambda().eq(GroupMessage::getGroupId,groupId) + .gt(GroupMessage::getSendTime,member.getCreatedTime()) + .ne(GroupMessage::getStatus,MessageStatusEnum.RECALL.getCode()) + .orderByDesc(GroupMessage::getId) + .last("limit "+stIdx + ","+size); + + List messages = this.list(wrapper); + List messageInfos = messages.stream().map(m->{ + GroupMessageInfo info = BeanUtils.copyProperties(m, GroupMessageInfo.class); + return info; + }).collect(Collectors.toList()); + log.info("拉取群聊记录,用户id:{},群聊id:{},数量:{}",userId,groupId,messageInfos.size()); + return messageInfos; + } + private void sendMessage(List userIds, GroupMessageInfo msgInfo){ // 根据群聊每个成员所连的IM-server,进行分组 Map> serverMap = new ConcurrentHashMap<>(); diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java index 65da723..d286a43 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java @@ -21,6 +21,7 @@ import com.bx.implatform.session.UserSession; import com.bx.implatform.vo.GroupInviteVO; import com.bx.implatform.vo.GroupMemberVO; import com.bx.implatform.vo.GroupVO; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; @@ -36,6 +37,7 @@ import java.util.Optional; import java.util.stream.Collectors; +@Slf4j @CacheConfig(cacheNames = RedisKey.IM_CACHE_GROUP) @Service public class GroupServiceImpl extends ServiceImpl implements IGroupService { @@ -79,6 +81,7 @@ public class GroupServiceImpl extends ServiceImpl implements GroupVO vo = BeanUtils.copyProperties(group, GroupVO.class); vo.setAliasName(user.getNickName()); vo.setRemark(groupName); + log.info("创建群聊,群聊id:{},群聊名称:{}",group.getId(),group.getName()); return vo; } @@ -109,6 +112,7 @@ public class GroupServiceImpl extends ServiceImpl implements member.setAliasName(StringUtils.isEmpty(vo.getAliasName())?session.getNickName():vo.getAliasName()); member.setRemark(StringUtils.isEmpty(vo.getRemark())?group.getName():vo.getRemark()); groupMemberService.updateById(member); + log.info("修改群聊,群聊id:{},群聊名称:{}",group.getId(),group.getName()); return vo; } @@ -131,6 +135,7 @@ public class GroupServiceImpl extends ServiceImpl implements // 逻辑删除群数据 group.setDeleted(true); this.updateById(group); + log.info("删除群聊,群聊id:{},群聊名称:{}",group.getId(),group.getName()); } @@ -142,13 +147,14 @@ public class GroupServiceImpl extends ServiceImpl implements */ @Override public void quitGroup(Long groupId) { - UserSession session = SessionContext.getSession(); + Long userId = SessionContext.getSession().getId(); Group group = this.getById(groupId); - if(group.getOwnerId() == session.getId()){ + if(group.getOwnerId() == userId){ throw new GlobalException(ResultCode.PROGRAM_ERROR,"您是群主,不可退出群聊"); } // 删除群聊成员 - groupMemberService.removeByGroupAndUserId(groupId,session.getId()); + groupMemberService.removeByGroupAndUserId(groupId,userId); + log.info("退出群聊,群聊id:{},群聊名称:{},用户id:{}",group.getId(),group.getName(),userId); } @@ -171,6 +177,7 @@ public class GroupServiceImpl extends ServiceImpl implements } // 删除群聊成员 groupMemberService.removeByGroupAndUserId(groupId,userId); + log.info("踢出群聊,群聊id:{},群聊名称:{},用户id:{}",group.getId(),group.getName(),userId); } @Override @@ -281,6 +288,7 @@ public class GroupServiceImpl extends ServiceImpl implements if(!groupMembers.isEmpty()) { groupMemberService.saveOrUpdateBatch(group.getId(),groupMembers); } + log.info("邀请进入群聊,群聊id:{},群聊名称:{},被邀请用户id:{}",group.getId(),group.getName(),vo.getFriendIds()); } /** 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 95265a3..5bfdcb1 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 @@ -32,7 +32,7 @@ public class PrivateMessageServiceImpl extends ServiceImpl redisTemplate; + private RedisTemplate redisTemplate; /** * 发送私聊消息 @@ -43,9 +43,9 @@ public class PrivateMessageServiceImpl extends ServiceImpl Constant.ALLOW_RECALL_SECOND * 1000){ - throw new GlobalException(ResultCode.PROGRAM_ERROR,"消息已发送超过5分钟,无法撤回"); + if (System.currentTimeMillis() - msg.getSendTime().getTime() > Constant.ALLOW_RECALL_SECOND * 1000) { + throw new GlobalException(ResultCode.PROGRAM_ERROR, "消息已发送超过5分钟,无法撤回"); } // 修改消息状态 msg.setStatus(MessageStatusEnum.RECALL.getCode()); this.updateById(msg); // 获取对方连接的channelId - String key = RedisKey.IM_USER_SERVER_ID+msg.getRecvId(); - Integer serverId = (Integer)redisTemplate.opsForValue().get(key); + String key = RedisKey.IM_USER_SERVER_ID + msg.getRecvId(); + Integer serverId = (Integer) redisTemplate.opsForValue().get(key); // 如果对方在线,将数据存储至redis,等待拉取推送 - if(serverId != null){ - String sendKey = RedisKey.IM_UNREAD_PRIVATE_MESSAGE + serverId; + if (serverId != null) { + String sendKey = RedisKey.IM_UNREAD_PRIVATE_MESSAGE + serverId; PrivateMessageInfo msgInfo = BeanUtils.copyProperties(msg, PrivateMessageInfo.class); msgInfo.setType(MessageTypeEnum.TIP.getCode()); msgInfo.setSendTime(new Date()); msgInfo.setContent("对方撤回了一条消息"); - redisTemplate.opsForList().rightPush(sendKey,msgInfo); + redisTemplate.opsForList().rightPush(sendKey, msgInfo); } - log.info("撤回私聊消息,发送id:{},接收id:{},内容:{}",msg.getSendId(),msg.getRecvId(),msg.getContent()); + log.info("撤回私聊消息,发送id:{},接收id:{},内容:{}", msg.getSendId(), msg.getRecvId(), msg.getContent()); + } + + + /** + * 拉取历史聊天记录 + * + * @param friendId 好友id + * @param page 页码 + * @param size 页码大小 + * @return 聊天记录列表 + */ + @Override + public List findHistoryMessage(Long friendId, Long page, Long size) { + page = page > 0 ? page : 1; + size = size > 0 ? size : 10; + Long userId = SessionContext.getSession().getId(); + Long stIdx = (page - 1) * size; + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.lambda().and(wrap -> wrap.and( + wp -> wp.eq(PrivateMessage::getSendId, userId) + .eq(PrivateMessage::getRecvId, friendId)) + .or(wp -> wp.eq(PrivateMessage::getRecvId, userId) + .eq(PrivateMessage::getSendId, friendId))) + .ne(PrivateMessage::getStatus, MessageStatusEnum.RECALL.getCode()) + .orderByDesc(PrivateMessage::getId) + .last("limit " + stIdx + "," + size); + + List messages = this.list(wrapper); + List messageInfos = messages.stream().map(m -> { + PrivateMessageInfo info = BeanUtils.copyProperties(m, PrivateMessageInfo.class); + return info; + }).collect(Collectors.toList()); + + log.info("拉取聊天记录,用户id:{},好友id:{},数量:{}", userId, friendId, messageInfos.size()); + return messageInfos; } /** @@ -111,25 +146,25 @@ public class PrivateMessageServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); - queryWrapper.lambda().eq(PrivateMessage::getRecvId,userId) - .eq(PrivateMessage::getStatus,MessageStatusEnum.UNREAD); + queryWrapper.lambda().eq(PrivateMessage::getRecvId, userId) + .eq(PrivateMessage::getStatus, MessageStatusEnum.UNREAD); List messages = this.list(queryWrapper); // 上传至redis,等待推送 - if(!messages.isEmpty()){ - List infos = messages.stream().map(m->{ + if (!messages.isEmpty()) { + List infos = messages.stream().map(m -> { PrivateMessageInfo msgInfo = BeanUtils.copyProperties(m, PrivateMessageInfo.class); - return msgInfo; + return msgInfo; }).collect(Collectors.toList()); - String sendKey = RedisKey.IM_UNREAD_PRIVATE_MESSAGE + serverId; - redisTemplate.opsForList().rightPushAll(sendKey,infos.toArray()); - log.info("拉取未读私聊消息,用户id:{},数量:{}",userId,infos.size()); + String sendKey = RedisKey.IM_UNREAD_PRIVATE_MESSAGE + serverId; + redisTemplate.opsForList().rightPushAll(sendKey, infos.toArray()); + log.info("拉取未读私聊消息,用户id:{},数量:{}", userId, infos.size()); } } } diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java index 8f1945e..70e7ce0 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java @@ -17,6 +17,7 @@ import com.bx.implatform.session.SessionContext; import com.bx.implatform.session.UserSession; import com.bx.implatform.vo.RegisterVO; import com.bx.implatform.vo.UserVO; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.security.crypto.password.PasswordEncoder; @@ -28,6 +29,7 @@ import java.util.List; import java.util.stream.Collectors; +@Slf4j @Service public class UserServiceImpl extends ServiceImpl implements IUserService { @@ -58,6 +60,7 @@ public class UserServiceImpl extends ServiceImpl implements IU user = BeanUtils.copyProperties(vo,User.class); user.setPassword(passwordEncoder.encode(user.getPassword())); this.save(user); + log.info("注册用户,用户id:{},用户名:{},昵称:{}",user.getId(),vo.getUserName(),vo.getNickName()); } /** @@ -116,6 +119,7 @@ public class UserServiceImpl extends ServiceImpl implements IU user.setHeadImage(vo.getHeadImage()); user.setHeadImageThumb(vo.getHeadImageThumb()); this.updateById(user); + log.info("用户信息更新,用户:{}}",user.toString()); } diff --git a/im-platform/src/main/java/com/bx/implatform/service/thirdparty/FileService.java b/im-platform/src/main/java/com/bx/implatform/service/thirdparty/FileService.java index ee503ed..404f54a 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/thirdparty/FileService.java +++ b/im-platform/src/main/java/com/bx/implatform/service/thirdparty/FileService.java @@ -4,6 +4,7 @@ import com.bx.common.contant.Constant; import com.bx.common.enums.FileTypeEnum; import com.bx.common.enums.ResultCode; import com.bx.implatform.exception.GlobalException; +import com.bx.implatform.session.SessionContext; import com.bx.implatform.util.FileUtil; import com.bx.implatform.util.ImageUtil; import com.bx.implatform.util.MinioUtil; @@ -50,6 +51,7 @@ public class FileService { public String uploadFile(MultipartFile file){ + Long userId = SessionContext.getSession().getId(); // 大小校验 if(file.getSize() > Constant.MAX_FILE_SIZE){ throw new GlobalException(ResultCode.PROGRAM_ERROR,"文件大小不能超过10M"); @@ -59,11 +61,14 @@ public class FileService { if(StringUtils.isEmpty(fileName)){ throw new GlobalException(ResultCode.PROGRAM_ERROR,"文件上传失败"); } - return generUrl(FileTypeEnum.FILE,fileName); + String url = generUrl(FileTypeEnum.FILE,fileName); + log.info("文件文件成功,用户id:{},url:{}",userId,url); + return url; } public UploadImageVO uploadImage(MultipartFile file){ try { + Long userId = SessionContext.getSession().getId(); // 大小校验 if(file.getSize() > Constant.MAX_IMAGE_SIZE){ throw new GlobalException(ResultCode.PROGRAM_ERROR,"图片大小不能超过5M"); @@ -86,6 +91,7 @@ public class FileService { throw new GlobalException(ResultCode.PROGRAM_ERROR,"图片上传失败"); } vo.setThumbUrl(generUrl(FileTypeEnum.IMAGE,fileName)); + log.info("文件图片成功,用户id:{},url:{}",userId,vo.getOriginUrl()); return vo; } catch (IOException e) { log.error("上传图片失败,{}",e.getMessage(),e); diff --git a/im-platform/src/main/java/com/bx/implatform/util/FileUtil.java b/im-platform/src/main/java/com/bx/implatform/util/FileUtil.java index b83d45d..8e7347a 100644 --- a/im-platform/src/main/java/com/bx/implatform/util/FileUtil.java +++ b/im-platform/src/main/java/com/bx/implatform/util/FileUtil.java @@ -21,7 +21,7 @@ public class FileUtil { */ public static boolean isImage(String fileName) { String extension = getFileExtension(fileName); - String[] imageExtension = new String[]{"jpeg", "jpg", "bmp", "png","webp"}; + String[] imageExtension = new String[]{"jpeg", "jpg", "bmp", "png","webp","gif"}; for (String e : imageExtension){ if (extension.toLowerCase().equals(e)) { return true; diff --git a/im-platform/src/main/resources/application.yml b/im-platform/src/main/resources/application.yml index bb22378..71a18c9 100644 --- a/im-platform/src/main/resources/application.yml +++ b/im-platform/src/main/resources/application.yml @@ -23,7 +23,7 @@ mybatis-plus: configuration: # 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射 map-underscore-to-camel-case: false - # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # mapper mapper-locations: # *.xml的具体路径 diff --git a/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolEncoder.java b/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolEncoder.java index 328f02a..4ecf528 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolEncoder.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolEncoder.java @@ -14,6 +14,7 @@ public class MessageProtocolEncoder extends MessageToMessageEncoder { protected void encode(ChannelHandlerContext channelHandlerContext, SendInfo sendInfo, List list) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); String text = objectMapper.writeValueAsString(sendInfo); + TextWebSocketFrame frame = new TextWebSocketFrame(text); list.add(frame); } diff --git a/im-ui/src/components/chat/ChatBox.vue b/im-ui/src/components/chat/ChatBox.vue index e515f46..8228bce 100644 --- a/im-ui/src/components/chat/ChatBox.vue +++ b/im-ui/src/components/chat/ChatBox.vue @@ -40,7 +40,7 @@
-
+
@@ -57,6 +57,9 @@ + @@ -66,7 +69,9 @@ import FileUpload from "../common/FileUpload.vue"; import Emotion from "../common/Emotion.vue"; import ChatVoice from "./ChatVoice.vue"; - + import ChatHistory from "./ChatHistory.vue"; + + export default { name: "chatPrivate", components: { @@ -74,7 +79,8 @@ FileUpload, ChatGroupSide, Emotion, - ChatVoice + ChatVoice, + ChatHistory }, props: { chat: { @@ -93,7 +99,8 @@ emoBoxPos: { // emoji表情弹出位置 x: 0, y: 0 - } + }, + showHistory: false // 是否显示历史聊天记录 } }, methods: { @@ -211,6 +218,12 @@ closeVoiceBox() { this.showVoice = false; }, + showHistoryBox(){ + this.showHistory = true; + }, + closeHistoryBox(){ + this.showHistory = false; + }, handleSendVoice(data) { let msgInfo = { content: JSON.stringify(data), diff --git a/im-ui/src/components/chat/ChatHistory.vue b/im-ui/src/components/chat/ChatHistory.vue new file mode 100644 index 0000000..1c1c30e --- /dev/null +++ b/im-ui/src/components/chat/ChatHistory.vue @@ -0,0 +1,170 @@ + + + + + diff --git a/im-ui/src/components/chat/MessageItem.vue b/im-ui/src/components/chat/MessageItem.vue index 88d0317..400bf24 100644 --- a/im-ui/src/components/chat/MessageItem.vue +++ b/im-ui/src/components/chat/MessageItem.vue @@ -37,7 +37,7 @@ - @@ -70,6 +70,10 @@ msgInfo: { type: Object, required: true + }, + menu:{ + type: Boolean, + default: true } }, data() { From 8cfeffae5018b3990c3f1e68155a4a1a9b89ad47 Mon Sep 17 00:00:00 2001 From: "xie.bx" Date: Sat, 19 Nov 2022 17:22:46 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E5=B0=81=E8=A3=85im-client?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- commom/pom.xml | 20 +--- .../java/com/bx/common/contant/Constant.java | 7 -- .../java/com/bx/common/contant/RedisKey.java | 21 ++-- .../{FileTypeEnum.java => FileType.java} | 8 +- .../enums/{WSCmdEnum.java => IMCmdType.java} | 8 +- .../com/bx/common/enums/ListenerType.java | 24 ++++ ...sageStatusEnum.java => MessageStatus.java} | 8 +- ...{MessageTypeEnum.java => MessageType.java} | 13 +- .../com/bx/common/enums/SendResultType.java | 25 ++++ .../bx/common/model/im/GroupMessageInfo.java | 3 - .../com/bx/common/model/im/IMRecvInfo.java | 17 +++ .../com/bx/common/model/im/SendResult.java | 17 +++ im-client/pom.xml | 26 ++++ .../com/bx/imclient/IMAutoConfiguration.java | 12 ++ .../main/java/com/bx/imclient/IMClient.java | 30 +++++ .../bx/imclient/annotation/IMListener.java | 18 +++ .../com/bx/imclient/config/RedisConfig.java | 49 ++++++++ .../bx/imclient/listener/MessageListener.java | 10 ++ .../listener/MessageListenerMulticaster.java | 28 +++++ .../java/com/bx/imclient/sender/IMSender.java | 112 ++++++++++++++++++ .../task/AbstractPullMessageTask.java | 47 ++++++++ .../task/PullSendResultGroupMessageTask.java | 33 ++++++ .../PullSendResultPrivateMessageTask.java | 38 ++++++ .../main/resources/META-INF/spring.factories | 2 + im-platform/pom.xml | 7 +- .../java/com/bx/implatform/ImplatformApp.java | 2 - .../implatform/config/WebSecurityConfg.java | 6 +- .../com/bx/implatform/contant/Constant.java | 12 ++ .../com/bx/implatform/contant/RedisKey.java | 16 +++ .../implatform/controller/FileController.java | 4 +- .../controller/FriendController.java | 5 +- .../controller/GroupController.java | 4 +- .../controller/GroupMessageController.java | 4 +- .../controller/PrivateMessageController.java | 4 +- .../controller/RegisterController.java | 4 +- .../implatform/controller/UserController.java | 7 +- .../com/bx/implatform}/enums/ResultCode.java | 2 +- .../implatform/exception/GlobalException.java | 2 +- .../exception/GlobalExceptionHandler.java | 6 +- .../implatform}/generator/CodeGenerator.java | 2 +- .../listener/GroupMessageListener.java | 34 ++++++ .../listener/PrivateMessageListener.java | 40 +++++++ .../com/bx/implatform}/result/Result.java | 2 +- .../bx/implatform}/result/ResultUtils.java | 6 +- .../service/impl/FriendServiceImpl.java | 4 +- .../service/impl/GroupMemberServiceImpl.java | 2 +- .../service/impl/GroupMessageServiceImpl.java | 66 ++++------- .../service/impl/GroupServiceImpl.java | 8 +- .../impl/PrivateMessageServiceImpl.java | 54 ++++----- .../impl/SecurityUserDetailsServiceImpl.java | 2 +- .../service/impl/UserServiceImpl.java | 4 +- .../service/thirdparty/FileService.java | 14 +-- .../task/PullAlreadyReadMessageTask.java | 74 ------------ .../com/bx/implatform}/util/BeanUtils.java | 3 +- .../bx/implatform}/util/DateTimeUtils.java | 2 +- .../com/bx/implatform/util/MinioUtil.java | 1 - .../src/main/resources/application.yml | 2 +- .../task/PullUnreadGroupMessageTask.java | 11 +- .../task/PullUnreadPrivateMessageTask.java | 11 +- .../imserver/websocket/WebSocketHandler.java | 4 +- .../processor/GroupMessageProcessor.java | 72 +++++++---- .../processor/HeartbeatProcessor.java | 4 +- .../websocket/processor/LoginProcessor.java | 6 +- .../processor/PrivateMessageProcessor.java | 64 ++++++---- .../websocket/processor/ProcessorFactory.java | 4 +- pom.xml | 1 + 66 files changed, 827 insertions(+), 331 deletions(-) rename commom/src/main/java/com/bx/common/enums/{FileTypeEnum.java => FileType.java} (73%) rename commom/src/main/java/com/bx/common/enums/{WSCmdEnum.java => IMCmdType.java} (77%) create mode 100644 commom/src/main/java/com/bx/common/enums/ListenerType.java rename commom/src/main/java/com/bx/common/enums/{MessageStatusEnum.java => MessageStatus.java} (70%) rename commom/src/main/java/com/bx/common/enums/{MessageTypeEnum.java => MessageType.java} (54%) create mode 100644 commom/src/main/java/com/bx/common/enums/SendResultType.java create mode 100644 commom/src/main/java/com/bx/common/model/im/IMRecvInfo.java create mode 100644 commom/src/main/java/com/bx/common/model/im/SendResult.java create mode 100644 im-client/pom.xml create mode 100644 im-client/src/main/java/com/bx/imclient/IMAutoConfiguration.java create mode 100644 im-client/src/main/java/com/bx/imclient/IMClient.java create mode 100644 im-client/src/main/java/com/bx/imclient/annotation/IMListener.java create mode 100644 im-client/src/main/java/com/bx/imclient/config/RedisConfig.java create mode 100644 im-client/src/main/java/com/bx/imclient/listener/MessageListener.java create mode 100644 im-client/src/main/java/com/bx/imclient/listener/MessageListenerMulticaster.java create mode 100644 im-client/src/main/java/com/bx/imclient/sender/IMSender.java create mode 100644 im-client/src/main/java/com/bx/imclient/task/AbstractPullMessageTask.java create mode 100644 im-client/src/main/java/com/bx/imclient/task/PullSendResultGroupMessageTask.java create mode 100644 im-client/src/main/java/com/bx/imclient/task/PullSendResultPrivateMessageTask.java create mode 100644 im-client/src/main/resources/META-INF/spring.factories create mode 100644 im-platform/src/main/java/com/bx/implatform/contant/Constant.java create mode 100644 im-platform/src/main/java/com/bx/implatform/contant/RedisKey.java rename {commom/src/main/java/com/bx/common => im-platform/src/main/java/com/bx/implatform}/enums/ResultCode.java (96%) rename {commom/src/main/java/com/bx/common => im-platform/src/main/java/com/bx/implatform}/generator/CodeGenerator.java (99%) create mode 100644 im-platform/src/main/java/com/bx/implatform/listener/GroupMessageListener.java create mode 100644 im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java rename {commom/src/main/java/com/bx/common => im-platform/src/main/java/com/bx/implatform}/result/Result.java (79%) rename {commom/src/main/java/com/bx/common => im-platform/src/main/java/com/bx/implatform}/result/ResultUtils.java (94%) delete mode 100644 im-platform/src/main/java/com/bx/implatform/task/PullAlreadyReadMessageTask.java rename {commom/src/main/java/com/bx/common => im-platform/src/main/java/com/bx/implatform}/util/BeanUtils.java (99%) rename {commom/src/main/java/com/bx/common => im-platform/src/main/java/com/bx/implatform}/util/DateTimeUtils.java (99%) diff --git a/commom/pom.xml b/commom/pom.xml index bec5ea0..6641d62 100644 --- a/commom/pom.xml +++ b/commom/pom.xml @@ -34,25 +34,11 @@ org.apache.commons commons-lang3 - - com.baomidou - mybatis-plus-generator - 3.3.2 - - - mysql - mysql-connector-java - compile - + org.springframework spring-beans - - - org.springframework.boot - spring-boot-starter-data-redis - org.apache.velocity velocity @@ -63,5 +49,9 @@ jackson-datatype-joda 2.9.10 + + org.springframework + spring-context + \ No newline at end of file diff --git a/commom/src/main/java/com/bx/common/contant/Constant.java b/commom/src/main/java/com/bx/common/contant/Constant.java index 6c5f130..296e054 100644 --- a/commom/src/main/java/com/bx/common/contant/Constant.java +++ b/commom/src/main/java/com/bx/common/contant/Constant.java @@ -1,15 +1,8 @@ package com.bx.common.contant; - public class Constant { - // 最大图片上传大小 - public static final long MAX_IMAGE_SIZE = 5*1024*1024; - // 最大上传文件大小 - public static final long MAX_FILE_SIZE = 10*1024*1024; - // 群聊最大人数 - public static final long MAX_GROUP_MEMBER = 500; // 在线状态过期时间 600s public static final long ONLINE_TIMEOUT_SECOND = 600; // 消息允许撤回时间 300s diff --git a/commom/src/main/java/com/bx/common/contant/RedisKey.java b/commom/src/main/java/com/bx/common/contant/RedisKey.java index ff0c04d..2a68dd7 100644 --- a/commom/src/main/java/com/bx/common/contant/RedisKey.java +++ b/commom/src/main/java/com/bx/common/contant/RedisKey.java @@ -7,20 +7,13 @@ public class RedisKey { // 用户ID所连接的IM-server的ID public final static String IM_USER_SERVER_ID = "im:user:server_id:"; // 未读私聊消息队列 - public final static String IM_UNREAD_PRIVATE_MESSAGE = "im:unread:private:"; + public final static String IM_UNREAD_PRIVATE_QUEUE = "im:unread:private:"; // 未读群聊消息队列 - public final static String IM_UNREAD_GROUP_MESSAGE = "im:unread:group:"; - // 已读私聊消息id队列 - public final static String IM_READED_PRIVATE_MESSAGE_ID = "im:readed:private:id"; - // 已读群聊消息位置(已读最大id) - public final static String IM_GROUP_READED_POSITION = "im:readed:group:position:"; - // 缓存前缀 - public final static String IM_CACHE = "im:cache:"; - // 缓存是否好友:bool - public final static String IM_CACHE_FRIEND = IM_CACHE+"friend"; - // 缓存群聊信息 - public final static String IM_CACHE_GROUP = IM_CACHE+"group"; - // 缓存群聊成员id - public final static String IM_CACHE_GROUP_MEMBER_ID = IM_CACHE+"group_member_ids"; + public final static String IM_UNREAD_GROUP_QUEUE = "im:unread:group:"; + // 私聊消息发送结果队列 + public final static String IM_RESULT_PRIVATE_QUEUE = "im:result:private"; + // 群聊消息发送结果队列 + public final static String IM_RESULT_GROUP_QUEUE = "im:result:group"; + } diff --git a/commom/src/main/java/com/bx/common/enums/FileTypeEnum.java b/commom/src/main/java/com/bx/common/enums/FileType.java similarity index 73% rename from commom/src/main/java/com/bx/common/enums/FileTypeEnum.java rename to commom/src/main/java/com/bx/common/enums/FileType.java index a41ac1f..afe3e5b 100644 --- a/commom/src/main/java/com/bx/common/enums/FileTypeEnum.java +++ b/commom/src/main/java/com/bx/common/enums/FileType.java @@ -1,6 +1,6 @@ package com.bx.common.enums; -public enum FileTypeEnum { +public enum FileType { FILE(0,"文件"), IMAGE(1,"图片"), @@ -13,13 +13,13 @@ public enum FileTypeEnum { private String desc; - FileTypeEnum(Integer index, String desc) { + FileType(Integer index, String desc) { this.code =index; this.desc=desc; } - public static FileTypeEnum fromCode(Integer code){ - for (FileTypeEnum typeEnum:values()) { + public static FileType fromCode(Integer code){ + for (FileType typeEnum:values()) { if (typeEnum.code.equals(code)) { return typeEnum; } diff --git a/commom/src/main/java/com/bx/common/enums/WSCmdEnum.java b/commom/src/main/java/com/bx/common/enums/IMCmdType.java similarity index 77% rename from commom/src/main/java/com/bx/common/enums/WSCmdEnum.java rename to commom/src/main/java/com/bx/common/enums/IMCmdType.java index 587ae04..f0233db 100644 --- a/commom/src/main/java/com/bx/common/enums/WSCmdEnum.java +++ b/commom/src/main/java/com/bx/common/enums/IMCmdType.java @@ -1,6 +1,6 @@ package com.bx.common.enums; -public enum WSCmdEnum { +public enum IMCmdType { LOGIN(0,"登陆"), HEART_BEAT(1,"心跳"), @@ -13,13 +13,13 @@ public enum WSCmdEnum { private String desc; - WSCmdEnum(Integer index, String desc) { + IMCmdType(Integer index, String desc) { this.code =index; this.desc=desc; } - public static WSCmdEnum fromCode(Integer code){ - for (WSCmdEnum typeEnum:values()) { + public static IMCmdType fromCode(Integer code){ + for (IMCmdType typeEnum:values()) { if (typeEnum.code.equals(code)) { return typeEnum; } diff --git a/commom/src/main/java/com/bx/common/enums/ListenerType.java b/commom/src/main/java/com/bx/common/enums/ListenerType.java new file mode 100644 index 0000000..d0cbb64 --- /dev/null +++ b/commom/src/main/java/com/bx/common/enums/ListenerType.java @@ -0,0 +1,24 @@ +package com.bx.common.enums; + +public enum ListenerType { + + PRIVATE_MESSAGE(0,"私聊消息"), + GROUP_MESSAGE(1,"群聊消息"); + + private Integer code; + + private String desc; + + ListenerType(Integer index, String desc) { + this.code =index; + this.desc=desc; + } + + public String getDesc() { + return desc; + } + + public Integer getCode(){ + return this.code; + } +} diff --git a/commom/src/main/java/com/bx/common/enums/MessageStatusEnum.java b/commom/src/main/java/com/bx/common/enums/MessageStatus.java similarity index 70% rename from commom/src/main/java/com/bx/common/enums/MessageStatusEnum.java rename to commom/src/main/java/com/bx/common/enums/MessageStatus.java index be6997b..f36c303 100644 --- a/commom/src/main/java/com/bx/common/enums/MessageStatusEnum.java +++ b/commom/src/main/java/com/bx/common/enums/MessageStatus.java @@ -1,7 +1,7 @@ package com.bx.common.enums; -public enum MessageStatusEnum { +public enum MessageStatus { UNREAD(0,"未读"), ALREADY_READ(1,"已读"), @@ -11,13 +11,13 @@ public enum MessageStatusEnum { private String desc; - MessageStatusEnum(Integer index, String desc) { + MessageStatus(Integer index, String desc) { this.code =index; this.desc=desc; } - public static MessageStatusEnum fromCode(Integer code){ - for (MessageStatusEnum typeEnum:values()) { + public static MessageStatus fromCode(Integer code){ + for (MessageStatus typeEnum:values()) { if (typeEnum.code.equals(code)) { return typeEnum; } diff --git a/commom/src/main/java/com/bx/common/enums/MessageTypeEnum.java b/commom/src/main/java/com/bx/common/enums/MessageType.java similarity index 54% rename from commom/src/main/java/com/bx/common/enums/MessageTypeEnum.java rename to commom/src/main/java/com/bx/common/enums/MessageType.java index de53313..9060809 100644 --- a/commom/src/main/java/com/bx/common/enums/MessageTypeEnum.java +++ b/commom/src/main/java/com/bx/common/enums/MessageType.java @@ -1,7 +1,7 @@ package com.bx.common.enums; -public enum MessageTypeEnum { +public enum MessageType { TEXT(0,"文字"), FILE(1,"文件"), @@ -13,20 +13,11 @@ public enum MessageTypeEnum { private String desc; - MessageTypeEnum(Integer index, String desc) { + MessageType(Integer index, String desc) { this.code =index; this.desc=desc; } - public static MessageTypeEnum fromCode(Integer code){ - for (MessageTypeEnum typeEnum:values()) { - if (typeEnum.code.equals(code)) { - return typeEnum; - } - } - return null; - } - public String getDesc() { return desc; diff --git a/commom/src/main/java/com/bx/common/enums/SendResultType.java b/commom/src/main/java/com/bx/common/enums/SendResultType.java new file mode 100644 index 0000000..cfbf124 --- /dev/null +++ b/commom/src/main/java/com/bx/common/enums/SendResultType.java @@ -0,0 +1,25 @@ +package com.bx.common.enums; + + +public enum SendResultType { + + SUCCESS(0,"发送成功"), + FAIL(1,"发送失败"); + + private int code; + private String msg; + + // 构造方法 + SendResultType(int code, String msg) { + this.code = code; + this.msg = msg; + } + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + +} diff --git a/commom/src/main/java/com/bx/common/model/im/GroupMessageInfo.java b/commom/src/main/java/com/bx/common/model/im/GroupMessageInfo.java index 67f08a7..b471fe7 100644 --- a/commom/src/main/java/com/bx/common/model/im/GroupMessageInfo.java +++ b/commom/src/main/java/com/bx/common/model/im/GroupMessageInfo.java @@ -5,7 +5,6 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import lombok.Data; import java.util.Date; -import java.util.List; @Data public class GroupMessageInfo { @@ -16,8 +15,6 @@ public class GroupMessageInfo { private Long sendId; - private List recvIds; - private String content; private Integer type; diff --git a/commom/src/main/java/com/bx/common/model/im/IMRecvInfo.java b/commom/src/main/java/com/bx/common/model/im/IMRecvInfo.java new file mode 100644 index 0000000..e0d8e89 --- /dev/null +++ b/commom/src/main/java/com/bx/common/model/im/IMRecvInfo.java @@ -0,0 +1,17 @@ +package com.bx.common.model.im; + +import lombok.Data; + +import java.util.List; + +@Data +public class IMRecvInfo { + + private Integer cmd; + + private List recvIds; + + private T data; +} + + diff --git a/commom/src/main/java/com/bx/common/model/im/SendResult.java b/commom/src/main/java/com/bx/common/model/im/SendResult.java new file mode 100644 index 0000000..c655b2f --- /dev/null +++ b/commom/src/main/java/com/bx/common/model/im/SendResult.java @@ -0,0 +1,17 @@ +package com.bx.common.model.im; + +import com.bx.common.enums.SendResultType; +import lombok.Data; + +@Data +public class SendResult { + + private Long recvId; + + private SendResultType result; + + private String failReason=""; + + private T messageInfo; + +} diff --git a/im-client/pom.xml b/im-client/pom.xml new file mode 100644 index 0000000..73f33b8 --- /dev/null +++ b/im-client/pom.xml @@ -0,0 +1,26 @@ + + + + box-im + com.bx + 1.0.0 + + 4.0.0 + + im-client + + + + com.bx + commom + 1.0.0 + + + + org.springframework.boot + spring-boot-starter-data-redis + + + \ No newline at end of file diff --git a/im-client/src/main/java/com/bx/imclient/IMAutoConfiguration.java b/im-client/src/main/java/com/bx/imclient/IMAutoConfiguration.java new file mode 100644 index 0000000..b3a93fc --- /dev/null +++ b/im-client/src/main/java/com/bx/imclient/IMAutoConfiguration.java @@ -0,0 +1,12 @@ +package com.bx.imclient; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + + +@Slf4j +@Configuration +@ComponentScan("com.bx.imclient") +public class IMAutoConfiguration { +} diff --git a/im-client/src/main/java/com/bx/imclient/IMClient.java b/im-client/src/main/java/com/bx/imclient/IMClient.java new file mode 100644 index 0000000..dbe03a3 --- /dev/null +++ b/im-client/src/main/java/com/bx/imclient/IMClient.java @@ -0,0 +1,30 @@ +package com.bx.imclient; + +import com.bx.common.model.im.GroupMessageInfo; +import com.bx.common.model.im.PrivateMessageInfo; +import com.bx.imclient.listener.MessageListenerMulticaster; +import com.bx.imclient.sender.IMSender; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; + +import java.util.List; + +@Configuration +public class IMClient { + + @Autowired + private MessageListenerMulticaster listenerMulticaster; + + @Autowired + private IMSender imSender; + + public void sendPrivateMessage(Long userId, PrivateMessageInfo... messageInfo){ + imSender.sendPrivateMessage(userId,messageInfo); + } + + public void sendGroupMessage(List userTokens, GroupMessageInfo... messageInfo){ + imSender.sendGroupMessage(userTokens,messageInfo); + } + + +} diff --git a/im-client/src/main/java/com/bx/imclient/annotation/IMListener.java b/im-client/src/main/java/com/bx/imclient/annotation/IMListener.java new file mode 100644 index 0000000..8e86edf --- /dev/null +++ b/im-client/src/main/java/com/bx/imclient/annotation/IMListener.java @@ -0,0 +1,18 @@ +package com.bx.imclient.annotation; + +import com.bx.common.enums.ListenerType; +import org.springframework.stereotype.Component; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.TYPE,ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Component +public @interface IMListener { + + ListenerType type(); + +} diff --git a/im-client/src/main/java/com/bx/imclient/config/RedisConfig.java b/im-client/src/main/java/com/bx/imclient/config/RedisConfig.java new file mode 100644 index 0000000..23fac7c --- /dev/null +++ b/im-client/src/main/java/com/bx/imclient/config/RedisConfig.java @@ -0,0 +1,49 @@ +package com.bx.imclient.config; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +import javax.annotation.Resource; + +@Configuration("IMRedisConfig") +public class RedisConfig { + + @Resource + private RedisConnectionFactory factory; + + @Bean("IMRedisTemplate") + public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate redisTemplate = new RedisTemplate(); + redisTemplate.setConnectionFactory(redisConnectionFactory); + // 设置值(value)的序列化采用jackson2JsonRedisSerializer + redisTemplate.setValueSerializer(jackson2JsonRedisSerializer()); + redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer()); + // 设置键(key)的序列化采用StringRedisSerializer。 + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setHashKeySerializer(new StringRedisSerializer()); + redisTemplate.afterPropertiesSet(); + return redisTemplate; + } + + @Bean + public Jackson2JsonRedisSerializer jackson2JsonRedisSerializer(){ + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); + ObjectMapper om = new ObjectMapper(); + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + // 解决jackson2无法反序列化LocalDateTime的问题 + om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); + jackson2JsonRedisSerializer.setObjectMapper(om); + return jackson2JsonRedisSerializer; + } + +} diff --git a/im-client/src/main/java/com/bx/imclient/listener/MessageListener.java b/im-client/src/main/java/com/bx/imclient/listener/MessageListener.java new file mode 100644 index 0000000..a223f34 --- /dev/null +++ b/im-client/src/main/java/com/bx/imclient/listener/MessageListener.java @@ -0,0 +1,10 @@ +package com.bx.imclient.listener; + + +import com.bx.common.model.im.SendResult; + +public interface MessageListener { + + void process(SendResult result); + +} diff --git a/im-client/src/main/java/com/bx/imclient/listener/MessageListenerMulticaster.java b/im-client/src/main/java/com/bx/imclient/listener/MessageListenerMulticaster.java new file mode 100644 index 0000000..0cf4516 --- /dev/null +++ b/im-client/src/main/java/com/bx/imclient/listener/MessageListenerMulticaster.java @@ -0,0 +1,28 @@ +package com.bx.imclient.listener; + + +import com.bx.common.enums.ListenerType; +import com.bx.common.model.im.SendResult; +import com.bx.imclient.annotation.IMListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Collections; +import java.util.List; + +@Component +public class MessageListenerMulticaster { + + + @Autowired(required = false) + private List messageListeners = Collections.emptyList(); + + public void multicast(ListenerType type, SendResult result){ + for(MessageListener listener:messageListeners){ + IMListener annotation = listener.getClass().getAnnotation(IMListener.class); + if(annotation.type().equals(type)){ + listener.process(result); + } + } + } +} 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 new file mode 100644 index 0000000..5c5c665 --- /dev/null +++ b/im-client/src/main/java/com/bx/imclient/sender/IMSender.java @@ -0,0 +1,112 @@ +package com.bx.imclient.sender; + +import com.bx.common.contant.RedisKey; +import com.bx.common.enums.IMCmdType; +import com.bx.common.enums.ListenerType; +import com.bx.common.enums.SendResultType; +import com.bx.common.model.im.GroupMessageInfo; +import com.bx.common.model.im.IMRecvInfo; +import com.bx.common.model.im.PrivateMessageInfo; +import com.bx.common.model.im.SendResult; +import com.bx.imclient.listener.MessageListenerMulticaster; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +@Service +public class IMSender { + + @Autowired + @Qualifier("IMRedisTemplate") + private RedisTemplate redisTemplate; + + @Autowired + private MessageListenerMulticaster listenerMulticaster; + + public void sendPrivateMessage(Long recvId, PrivateMessageInfo... messageInfos){ + // 获取对方连接的channelId + String key = RedisKey.IM_USER_SERVER_ID + recvId; + Integer serverId = (Integer) redisTemplate.opsForValue().get(key); + // 如果对方在线,将数据存储至redis,等待拉取推送 + if (serverId != null) { + String sendKey = RedisKey.IM_UNREAD_PRIVATE_QUEUE + serverId; + IMRecvInfo[] recvInfos = new IMRecvInfo[messageInfos.length]; + for (int i=0;i recvInfo = new IMRecvInfo<>(); + recvInfo.setCmd(IMCmdType.PRIVATE_MESSAGE.getCode()); + List recvIds = new LinkedList(); + recvIds.add(recvId); + recvInfo.setRecvIds(recvIds); + recvInfo.setData(messageInfos[i]); + recvInfos[i] = recvInfo; + } + redisTemplate.opsForList().rightPushAll(sendKey, recvInfos); + }else{ + // 回复消息状态 + for(PrivateMessageInfo messageInfo : messageInfos ) { + SendResult result = new SendResult(); + result.setMessageInfo(messageInfo); + result.setRecvId(recvId); + result.setResult(SendResultType.FAIL); + result.setFailReason("用户不在线"); + listenerMulticaster.multicast(ListenerType.PRIVATE_MESSAGE, result); + } + } + } + + public void sendGroupMessage(List recvIds, GroupMessageInfo... messageInfos){ + // 根据群聊每个成员所连的IM-server,进行分组 + List offLineIds = Collections.synchronizedList(new LinkedList()); + Map> serverMap = new ConcurrentHashMap<>(); + recvIds.parallelStream().forEach(id->{ + String key = RedisKey.IM_USER_SERVER_ID + id; + Integer serverId = (Integer)redisTemplate.opsForValue().get(key); + if(serverId != null){ + if(serverMap.containsKey(serverId)){ + serverMap.get(serverId).add(id); + }else { + // 此处需要加锁,否则list可以会被覆盖 + synchronized(serverMap){ + List list = Collections.synchronizedList(new LinkedList()); + list.add(id); + serverMap.put(serverId,list); + } + } + }else{ + offLineIds.add(id); + } + }); + // 逐个server发送 + for (Map.Entry> entry : serverMap.entrySet()) { + IMRecvInfo[] recvInfos = new IMRecvInfo[messageInfos.length]; + for (int i=0;i recvInfo = new IMRecvInfo<>(); + recvInfo.setCmd(IMCmdType.GROUP_MESSAGE.getCode()); + recvInfo.setRecvIds(new LinkedList<>(entry.getValue())); + recvInfo.setData(messageInfos[i]); + recvInfos[i] = recvInfo; + } + String key = RedisKey.IM_UNREAD_GROUP_QUEUE +entry.getKey(); + redisTemplate.opsForList().rightPushAll(key,recvInfos); + } + // 不在线的用户,回复消息状态 + for(GroupMessageInfo messageInfo:messageInfos ){ + for(Long id : offLineIds){ + // 回复消息状态 + SendResult result = new SendResult(); + result.setMessageInfo(messageInfo); + result.setRecvId(id); + result.setResult(SendResultType.FAIL); + result.setFailReason("用户不在线"); + listenerMulticaster.multicast(ListenerType.GROUP_MESSAGE,result); + } + } + } +} diff --git a/im-client/src/main/java/com/bx/imclient/task/AbstractPullMessageTask.java b/im-client/src/main/java/com/bx/imclient/task/AbstractPullMessageTask.java new file mode 100644 index 0000000..53b368f --- /dev/null +++ b/im-client/src/main/java/com/bx/imclient/task/AbstractPullMessageTask.java @@ -0,0 +1,47 @@ +package com.bx.imclient.task; + +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +@Slf4j +public abstract class AbstractPullMessageTask { + + private int threadNum = 8; + + private ExecutorService executorService = Executors.newFixedThreadPool(threadNum); + + @PostConstruct + public void init(){ + // 初始化定时器 + for(int i=0;i redisTemplate; + + @Autowired + private MessageListenerMulticaster listenerMulticaster; + + @Override + public void pullMessage() { + String key = RedisKey.IM_RESULT_GROUP_QUEUE; + SendResult result = (SendResult)redisTemplate.opsForList().leftPop(key,10, TimeUnit.SECONDS); + if(result != null) { + listenerMulticaster.multicast(ListenerType.GROUP_MESSAGE,result); + } + } + +} diff --git a/im-client/src/main/java/com/bx/imclient/task/PullSendResultPrivateMessageTask.java b/im-client/src/main/java/com/bx/imclient/task/PullSendResultPrivateMessageTask.java new file mode 100644 index 0000000..6f3042d --- /dev/null +++ b/im-client/src/main/java/com/bx/imclient/task/PullSendResultPrivateMessageTask.java @@ -0,0 +1,38 @@ +package com.bx.imclient.task; + +import com.bx.common.contant.RedisKey; +import com.bx.common.enums.ListenerType; +import com.bx.common.model.im.SendResult; +import com.bx.imclient.listener.MessageListenerMulticaster; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; + +; + +@Slf4j +@Component +public class PullSendResultPrivateMessageTask extends AbstractPullMessageTask{ + + + @Qualifier("IMRedisTemplate") + @Autowired + private RedisTemplate redisTemplate; + + @Autowired + private MessageListenerMulticaster listenerMulticaster; + + @Override + public void pullMessage() { + String key = RedisKey.IM_RESULT_PRIVATE_QUEUE; + SendResult result = (SendResult)redisTemplate.opsForList().leftPop(key,10, TimeUnit.SECONDS); + if(result != null) { + listenerMulticaster.multicast(ListenerType.PRIVATE_MESSAGE, result); + } + } + +} diff --git a/im-client/src/main/resources/META-INF/spring.factories b/im-client/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..801458e --- /dev/null +++ b/im-client/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.bx.imclient.IMAutoConfiguration \ No newline at end of file diff --git a/im-platform/pom.xml b/im-platform/pom.xml index c27f121..a963aee 100644 --- a/im-platform/pom.xml +++ b/im-platform/pom.xml @@ -15,7 +15,7 @@ com.bx - commom + im-client 1.0.0 @@ -101,6 +101,11 @@ thumbnailator 0.4.8 + + com.baomidou + mybatis-plus-generator + 3.3.2 + diff --git a/im-platform/src/main/java/com/bx/implatform/ImplatformApp.java b/im-platform/src/main/java/com/bx/implatform/ImplatformApp.java index 3743c93..15480c2 100644 --- a/im-platform/src/main/java/com/bx/implatform/ImplatformApp.java +++ b/im-platform/src/main/java/com/bx/implatform/ImplatformApp.java @@ -4,14 +4,12 @@ import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.EnableAspectJAutoProxy; @Slf4j @EnableAspectJAutoProxy(exposeProxy = true) @MapperScan(basePackages = {"com.bx.implatform.mapper"}) -@ComponentScan(basePackages={"com.bx"}) @SpringBootApplication public class ImplatformApp { diff --git a/im-platform/src/main/java/com/bx/implatform/config/WebSecurityConfg.java b/im-platform/src/main/java/com/bx/implatform/config/WebSecurityConfg.java index 9a3a218..7ef0d62 100644 --- a/im-platform/src/main/java/com/bx/implatform/config/WebSecurityConfg.java +++ b/im-platform/src/main/java/com/bx/implatform/config/WebSecurityConfg.java @@ -1,9 +1,9 @@ package com.bx.implatform.config; import com.alibaba.fastjson.JSON; -import com.bx.common.enums.ResultCode; -import com.bx.common.result.Result; -import com.bx.common.result.ResultUtils; +import com.bx.implatform.enums.ResultCode; +import com.bx.implatform.result.Result; +import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.IUserService; import com.bx.implatform.session.UserSession; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/im-platform/src/main/java/com/bx/implatform/contant/Constant.java b/im-platform/src/main/java/com/bx/implatform/contant/Constant.java new file mode 100644 index 0000000..77fab01 --- /dev/null +++ b/im-platform/src/main/java/com/bx/implatform/contant/Constant.java @@ -0,0 +1,12 @@ +package com.bx.implatform.contant; + + +public class Constant { + // 最大图片上传大小 + public static final long MAX_IMAGE_SIZE = 5*1024*1024; + // 最大上传文件大小 + public static final long MAX_FILE_SIZE = 10*1024*1024; + // 群聊最大人数 + public static final long MAX_GROUP_MEMBER = 500; + +} diff --git a/im-platform/src/main/java/com/bx/implatform/contant/RedisKey.java b/im-platform/src/main/java/com/bx/implatform/contant/RedisKey.java new file mode 100644 index 0000000..9d25026 --- /dev/null +++ b/im-platform/src/main/java/com/bx/implatform/contant/RedisKey.java @@ -0,0 +1,16 @@ +package com.bx.implatform.contant; + +public class RedisKey { + + // 已读群聊消息位置(已读最大id) + public final static String IM_GROUP_READED_POSITION = "im:readed:group:position:"; + // 缓存前缀 + public final static String IM_CACHE = "im:cache:"; + // 缓存是否好友:bool + public final static String IM_CACHE_FRIEND = IM_CACHE+"friend"; + // 缓存群聊信息 + public final static String IM_CACHE_GROUP = IM_CACHE+"group"; + // 缓存群聊成员id + public final static String IM_CACHE_GROUP_MEMBER_ID = IM_CACHE+"group_member_ids"; + +} diff --git a/im-platform/src/main/java/com/bx/implatform/controller/FileController.java b/im-platform/src/main/java/com/bx/implatform/controller/FileController.java index 901083f..0d50738 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/FileController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/FileController.java @@ -1,7 +1,7 @@ package com.bx.implatform.controller; -import com.bx.common.result.Result; -import com.bx.common.result.ResultUtils; +import com.bx.implatform.result.Result; +import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.thirdparty.FileService; import com.bx.implatform.vo.UploadImageVO; import io.swagger.annotations.Api; diff --git a/im-platform/src/main/java/com/bx/implatform/controller/FriendController.java b/im-platform/src/main/java/com/bx/implatform/controller/FriendController.java index e1d718e..9d97450 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/FriendController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/FriendController.java @@ -1,9 +1,8 @@ package com.bx.implatform.controller; - -import com.bx.common.result.Result; -import com.bx.common.result.ResultUtils; import com.bx.implatform.entity.Friend; +import com.bx.implatform.result.Result; +import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.IFriendService; import com.bx.implatform.session.SessionContext; import com.bx.implatform.vo.FriendVO; diff --git a/im-platform/src/main/java/com/bx/implatform/controller/GroupController.java b/im-platform/src/main/java/com/bx/implatform/controller/GroupController.java index aac8764..250ebbb 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/GroupController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/GroupController.java @@ -1,8 +1,8 @@ package com.bx.implatform.controller; -import com.bx.common.result.Result; -import com.bx.common.result.ResultUtils; +import com.bx.implatform.result.Result; +import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.IGroupService; import com.bx.implatform.vo.GroupInviteVO; import com.bx.implatform.vo.GroupMemberVO; 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 68b882b..540b2ac 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 @@ -2,8 +2,8 @@ package com.bx.implatform.controller; import com.bx.common.model.im.GroupMessageInfo; -import com.bx.common.result.Result; -import com.bx.common.result.ResultUtils; +import com.bx.implatform.result.Result; +import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.IGroupMessageService; import com.bx.implatform.vo.GroupMessageVO; import io.swagger.annotations.Api; 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 662c2d8..e07da66 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 @@ -2,8 +2,8 @@ package com.bx.implatform.controller; import com.bx.common.model.im.PrivateMessageInfo; -import com.bx.common.result.Result; -import com.bx.common.result.ResultUtils; +import com.bx.implatform.result.Result; +import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.IPrivateMessageService; import com.bx.implatform.vo.PrivateMessageVO; import io.swagger.annotations.Api; diff --git a/im-platform/src/main/java/com/bx/implatform/controller/RegisterController.java b/im-platform/src/main/java/com/bx/implatform/controller/RegisterController.java index 9a3e044..a1250b8 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/RegisterController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/RegisterController.java @@ -1,8 +1,8 @@ package com.bx.implatform.controller; -import com.bx.common.result.Result; -import com.bx.common.result.ResultUtils; +import com.bx.implatform.result.Result; +import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.IUserService; import com.bx.implatform.vo.RegisterVO; import io.swagger.annotations.Api; diff --git a/im-platform/src/main/java/com/bx/implatform/controller/UserController.java b/im-platform/src/main/java/com/bx/implatform/controller/UserController.java index 603c8ef..3cc5cdf 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/UserController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/UserController.java @@ -1,13 +1,12 @@ package com.bx.implatform.controller; - -import com.bx.common.result.Result; -import com.bx.common.result.ResultUtils; -import com.bx.common.util.BeanUtils; import com.bx.implatform.entity.User; +import com.bx.implatform.result.Result; +import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.IUserService; import com.bx.implatform.session.SessionContext; import com.bx.implatform.session.UserSession; +import com.bx.implatform.util.BeanUtils; import com.bx.implatform.vo.UserVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/commom/src/main/java/com/bx/common/enums/ResultCode.java b/im-platform/src/main/java/com/bx/implatform/enums/ResultCode.java similarity index 96% rename from commom/src/main/java/com/bx/common/enums/ResultCode.java rename to im-platform/src/main/java/com/bx/implatform/enums/ResultCode.java index ec41f5c..bc6f96c 100644 --- a/commom/src/main/java/com/bx/common/enums/ResultCode.java +++ b/im-platform/src/main/java/com/bx/implatform/enums/ResultCode.java @@ -1,4 +1,4 @@ -package com.bx.common.enums; +package com.bx.implatform.enums; /** * 响应码枚举 diff --git a/im-platform/src/main/java/com/bx/implatform/exception/GlobalException.java b/im-platform/src/main/java/com/bx/implatform/exception/GlobalException.java index b3deac0..fdd189d 100644 --- a/im-platform/src/main/java/com/bx/implatform/exception/GlobalException.java +++ b/im-platform/src/main/java/com/bx/implatform/exception/GlobalException.java @@ -1,6 +1,6 @@ package com.bx.implatform.exception; -import com.bx.common.enums.ResultCode; +import com.bx.implatform.enums.ResultCode; import lombok.Data; import java.io.Serializable; diff --git a/im-platform/src/main/java/com/bx/implatform/exception/GlobalExceptionHandler.java b/im-platform/src/main/java/com/bx/implatform/exception/GlobalExceptionHandler.java index 693ff39..0c44af8 100644 --- a/im-platform/src/main/java/com/bx/implatform/exception/GlobalExceptionHandler.java +++ b/im-platform/src/main/java/com/bx/implatform/exception/GlobalExceptionHandler.java @@ -1,9 +1,9 @@ package com.bx.implatform.exception; import cn.hutool.json.JSONException; -import com.bx.common.enums.ResultCode; -import com.bx.common.result.Result; -import com.bx.common.result.ResultUtils; +import com.bx.implatform.enums.ResultCode; +import com.bx.implatform.result.Result; +import com.bx.implatform.result.ResultUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.converter.HttpMessageNotReadableException; diff --git a/commom/src/main/java/com/bx/common/generator/CodeGenerator.java b/im-platform/src/main/java/com/bx/implatform/generator/CodeGenerator.java similarity index 99% rename from commom/src/main/java/com/bx/common/generator/CodeGenerator.java rename to im-platform/src/main/java/com/bx/implatform/generator/CodeGenerator.java index 7e94971..d0f423f 100644 --- a/commom/src/main/java/com/bx/common/generator/CodeGenerator.java +++ b/im-platform/src/main/java/com/bx/implatform/generator/CodeGenerator.java @@ -1,4 +1,4 @@ -package com.bx.common.generator; +package com.bx.implatform.generator; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.core.toolkit.StringPool; diff --git a/im-platform/src/main/java/com/bx/implatform/listener/GroupMessageListener.java b/im-platform/src/main/java/com/bx/implatform/listener/GroupMessageListener.java new file mode 100644 index 0000000..44b7ae6 --- /dev/null +++ b/im-platform/src/main/java/com/bx/implatform/listener/GroupMessageListener.java @@ -0,0 +1,34 @@ +package com.bx.implatform.listener; + +import com.bx.common.enums.ListenerType; +import com.bx.common.enums.MessageType; +import com.bx.common.model.im.GroupMessageInfo; +import com.bx.common.model.im.SendResult; +import com.bx.imclient.annotation.IMListener; +import com.bx.imclient.listener.MessageListener; +import com.bx.implatform.contant.RedisKey; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; + + +@Slf4j +@IMListener(type = ListenerType.GROUP_MESSAGE) +public class GroupMessageListener implements MessageListener { + + @Autowired + private RedisTemplate redisTemplate; + + @Override + public void process(SendResult result){ + GroupMessageInfo messageInfo = (GroupMessageInfo) result.getMessageInfo(); + if(messageInfo.getType().equals(MessageType.TIP)){ + // 提示类数据不记录 + return; + } + // 保存该用户已拉取的最大消息id + String key = RedisKey.IM_GROUP_READED_POSITION + messageInfo.getGroupId()+":"+result.getRecvId(); + redisTemplate.opsForValue().set(key,messageInfo.getId()); + } + +} diff --git a/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java b/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java new file mode 100644 index 0000000..49ad576 --- /dev/null +++ b/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java @@ -0,0 +1,40 @@ +package com.bx.implatform.listener; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.bx.common.enums.ListenerType; +import com.bx.common.enums.MessageStatus; +import com.bx.common.enums.MessageType; +import com.bx.common.model.im.PrivateMessageInfo; +import com.bx.common.model.im.SendResult; +import com.bx.imclient.annotation.IMListener; +import com.bx.imclient.listener.MessageListener; +import com.bx.implatform.entity.PrivateMessage; +import com.bx.implatform.service.IPrivateMessageService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; + + +@Slf4j +@IMListener(type = ListenerType.PRIVATE_MESSAGE) +public class PrivateMessageListener implements MessageListener { + + @Autowired + private IPrivateMessageService privateMessageService; + + @Override + public void process(SendResult result){ + PrivateMessageInfo messageInfo = (PrivateMessageInfo) result.getMessageInfo(); + if(messageInfo.getType().equals(MessageType.TIP)){ + // 提示类数据不记录 + return; + } + // 更新消息状态 + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.lambda().eq(PrivateMessage::getId,messageInfo.getId()) + .eq(PrivateMessage::getStatus, MessageStatus.UNREAD.getCode()) + .set(PrivateMessage::getStatus, MessageStatus.ALREADY_READ.getCode()); + privateMessageService.update(updateWrapper); + log.info("消息已读,消息id:{},发送者:{},接收者:{}",messageInfo.getId(),messageInfo.getSendId(),messageInfo.getRecvId()); + } + +} diff --git a/commom/src/main/java/com/bx/common/result/Result.java b/im-platform/src/main/java/com/bx/implatform/result/Result.java similarity index 79% rename from commom/src/main/java/com/bx/common/result/Result.java rename to im-platform/src/main/java/com/bx/implatform/result/Result.java index 08006a4..16e630b 100644 --- a/commom/src/main/java/com/bx/common/result/Result.java +++ b/im-platform/src/main/java/com/bx/implatform/result/Result.java @@ -1,4 +1,4 @@ -package com.bx.common.result; +package com.bx.implatform.result; import lombok.Data; diff --git a/commom/src/main/java/com/bx/common/result/ResultUtils.java b/im-platform/src/main/java/com/bx/implatform/result/ResultUtils.java similarity index 94% rename from commom/src/main/java/com/bx/common/result/ResultUtils.java rename to im-platform/src/main/java/com/bx/implatform/result/ResultUtils.java index 0accdca..50326fd 100644 --- a/commom/src/main/java/com/bx/common/result/ResultUtils.java +++ b/im-platform/src/main/java/com/bx/implatform/result/ResultUtils.java @@ -1,7 +1,7 @@ -package com.bx.common.result; +package com.bx.implatform.result; -import com.bx.common.enums.ResultCode; +import com.bx.implatform.enums.ResultCode; public class ResultUtils { @@ -50,7 +50,7 @@ public class ResultUtils { return result; } - public static final Result error(ResultCode resultCode, String messsage,T data){ + public static final Result error(ResultCode resultCode, String messsage, T data){ Result result=new Result(); result.setCode(resultCode.getCode()); result.setMessage(messsage); diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/FriendServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/FriendServiceImpl.java index f5df55a..f074d76 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/FriendServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/FriendServiceImpl.java @@ -2,10 +2,10 @@ package com.bx.implatform.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.bx.common.contant.RedisKey; -import com.bx.common.enums.ResultCode; +import com.bx.implatform.contant.RedisKey; import com.bx.implatform.entity.Friend; import com.bx.implatform.entity.User; +import com.bx.implatform.enums.ResultCode; import com.bx.implatform.exception.GlobalException; import com.bx.implatform.mapper.FriendMapper; import com.bx.implatform.service.IFriendService; diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMemberServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMemberServiceImpl.java index 69616b1..e62de44 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMemberServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMemberServiceImpl.java @@ -3,7 +3,7 @@ package com.bx.implatform.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.bx.common.contant.RedisKey; +import com.bx.implatform.contant.RedisKey; import com.bx.implatform.entity.GroupMember; import com.bx.implatform.mapper.GroupMemberMapper; import com.bx.implatform.service.IGroupMemberService; 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 f2f40c6..dea178a 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 @@ -3,29 +3,32 @@ package com.bx.implatform.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bx.common.contant.Constant; -import com.bx.common.contant.RedisKey; -import com.bx.common.enums.MessageStatusEnum; -import com.bx.common.enums.MessageTypeEnum; -import com.bx.common.enums.ResultCode; +import com.bx.common.enums.MessageStatus; +import com.bx.common.enums.MessageType; import com.bx.common.model.im.GroupMessageInfo; -import com.bx.common.util.BeanUtils; +import com.bx.imclient.IMClient; +import com.bx.implatform.contant.RedisKey; import com.bx.implatform.entity.Group; import com.bx.implatform.entity.GroupMember; import com.bx.implatform.entity.GroupMessage; +import com.bx.implatform.enums.ResultCode; import com.bx.implatform.exception.GlobalException; import com.bx.implatform.mapper.GroupMessageMapper; import com.bx.implatform.service.IGroupMemberService; import com.bx.implatform.service.IGroupMessageService; import com.bx.implatform.service.IGroupService; import com.bx.implatform.session.SessionContext; +import com.bx.implatform.util.BeanUtils; import com.bx.implatform.vo.GroupMessageVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; +import java.util.Collections; +import java.util.Date; +import java.util.LinkedList; +import java.util.List; import java.util.stream.Collectors; @Slf4j @@ -42,6 +45,9 @@ public class GroupMessageServiceImpl extends ServiceImpl redisTemplate; + @Autowired + private IMClient imClient; + /** * 发送群聊消息(与mysql所有交换都要进行缓存) * @@ -102,12 +108,12 @@ public class GroupMessageServiceImpl extends ServiceImpl userIds = groupMemberService.findUserIdsByGroupId(msg.getGroupId()); GroupMessageInfo msgInfo = BeanUtils.copyProperties(msg, GroupMessageInfo.class); - msgInfo.setType(MessageTypeEnum.TIP.getCode()); + msgInfo.setType(MessageType.TIP.getCode()); String content = String.format("'%s'撤回了一条消息",member.getAliasName()); msgInfo.setContent(content); msgInfo.setSendTime(new Date()); @@ -124,22 +130,17 @@ public class GroupMessageServiceImpl extends ServiceImpl recvIds = new LinkedList(); recvIds.add(userId); List members = groupMemberService.findByUserId(userId); for(GroupMember member:members){ // 获取群聊已读的最大消息id,只推送未读消息 - key = RedisKey.IM_GROUP_READED_POSITION + member.getGroupId()+":"+userId; + String key = RedisKey.IM_GROUP_READED_POSITION + member.getGroupId()+":"+userId; Integer maxReadedId = (Integer)redisTemplate.opsForValue().get(key); QueryWrapper wrapper = new QueryWrapper(); wrapper.lambda().eq(GroupMessage::getGroupId,member.getGroupId()) .gt(GroupMessage::getSendTime,member.getCreatedTime()) - .ne(GroupMessage::getStatus,MessageStatusEnum.RECALL.getCode()); + .ne(GroupMessage::getStatus, MessageStatus.RECALL.getCode()); if(maxReadedId!=null){ wrapper.lambda().gt(GroupMessage::getId,maxReadedId); } @@ -151,11 +152,11 @@ public class GroupMessageServiceImpl extends ServiceImpl messageInfos = messages.stream().map(m->{ GroupMessageInfo msgInfo = BeanUtils.copyProperties(m, GroupMessageInfo.class); - msgInfo.setRecvIds(recvIds); return msgInfo; }).collect(Collectors.toList()); - key = RedisKey.IM_UNREAD_GROUP_MESSAGE + serverId; - redisTemplate.opsForList().rightPushAll(key,messageInfos.toArray()); + // 发送消息 + GroupMessageInfo[] infoArr = messageInfos.toArray(new GroupMessageInfo[messageInfos.size()]); + imClient.sendGroupMessage(Collections.singletonList(userId), infoArr); log.info("拉取未读群聊消息,用户id:{},群聊id:{},数量:{}",userId,member.getGroupId(),messageInfos.size()); } @@ -184,7 +185,7 @@ public class GroupMessageServiceImpl extends ServiceImpl wrapper = new QueryWrapper<>(); wrapper.lambda().eq(GroupMessage::getGroupId,groupId) .gt(GroupMessage::getSendTime,member.getCreatedTime()) - .ne(GroupMessage::getStatus,MessageStatusEnum.RECALL.getCode()) + .ne(GroupMessage::getStatus, MessageStatus.RECALL.getCode()) .orderByDesc(GroupMessage::getId) .last("limit "+stIdx + ","+size); @@ -198,29 +199,6 @@ public class GroupMessageServiceImpl extends ServiceImpl userIds, GroupMessageInfo msgInfo){ - // 根据群聊每个成员所连的IM-server,进行分组 - Map> serverMap = new ConcurrentHashMap<>(); - userIds.parallelStream().forEach(id->{ - String key = RedisKey.IM_USER_SERVER_ID + id; - Integer serverId = (Integer)redisTemplate.opsForValue().get(key); - if(serverId != null){ - if(serverMap.containsKey(serverId)){ - serverMap.get(serverId).add(id); - }else { - // 此处需要加锁,否则list可以会被覆盖 - synchronized(serverMap){ - List list = Collections.synchronizedList(new LinkedList()); - list.add(id); - serverMap.put(serverId,list); - } - } - } - }); - // 逐个server发送 - for (Map.Entry> entry : serverMap.entrySet()) { - msgInfo.setRecvIds(new LinkedList<>(entry.getValue())); - String key = RedisKey.IM_UNREAD_GROUP_MESSAGE +entry.getKey(); - redisTemplate.opsForList().rightPush(key,msgInfo); - } + imClient.sendGroupMessage(userIds,msgInfo); } } diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java index d286a43..ab72d03 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java @@ -2,14 +2,13 @@ package com.bx.implatform.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.bx.common.contant.Constant; -import com.bx.common.contant.RedisKey; -import com.bx.common.enums.ResultCode; -import com.bx.common.util.BeanUtils; +import com.bx.implatform.contant.Constant; +import com.bx.implatform.contant.RedisKey; import com.bx.implatform.entity.Friend; import com.bx.implatform.entity.Group; import com.bx.implatform.entity.GroupMember; import com.bx.implatform.entity.User; +import com.bx.implatform.enums.ResultCode; import com.bx.implatform.exception.GlobalException; import com.bx.implatform.mapper.GroupMapper; import com.bx.implatform.service.IFriendService; @@ -18,6 +17,7 @@ import com.bx.implatform.service.IGroupService; import com.bx.implatform.service.IUserService; import com.bx.implatform.session.SessionContext; import com.bx.implatform.session.UserSession; +import com.bx.implatform.util.BeanUtils; import com.bx.implatform.vo.GroupInviteVO; import com.bx.implatform.vo.GroupMemberVO; import com.bx.implatform.vo.GroupVO; 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 5bfdcb1..5a4fd3b 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 @@ -4,17 +4,18 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bx.common.contant.Constant; import com.bx.common.contant.RedisKey; -import com.bx.common.enums.MessageStatusEnum; -import com.bx.common.enums.MessageTypeEnum; -import com.bx.common.enums.ResultCode; +import com.bx.common.enums.MessageStatus; +import com.bx.common.enums.MessageType; import com.bx.common.model.im.PrivateMessageInfo; -import com.bx.common.util.BeanUtils; +import com.bx.imclient.IMClient; import com.bx.implatform.entity.PrivateMessage; +import com.bx.implatform.enums.ResultCode; import com.bx.implatform.exception.GlobalException; import com.bx.implatform.mapper.PrivateMessageMapper; import com.bx.implatform.service.IFriendService; import com.bx.implatform.service.IPrivateMessageService; import com.bx.implatform.session.SessionContext; +import com.bx.implatform.util.BeanUtils; import com.bx.implatform.vo.PrivateMessageVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -33,7 +34,8 @@ public class PrivateMessageServiceImpl extends ServiceImpl redisTemplate; - + @Autowired + private IMClient imClient; /** * 发送私聊消息 * @@ -50,18 +52,12 @@ public class PrivateMessageServiceImpl extends ServiceImpl wp.eq(PrivateMessage::getRecvId, userId) .eq(PrivateMessage::getSendId, friendId))) - .ne(PrivateMessage::getStatus, MessageStatusEnum.RECALL.getCode()) + .ne(PrivateMessage::getStatus, MessageStatus.RECALL.getCode()) .orderByDesc(PrivateMessage::getId) .last("limit " + stIdx + "," + size); @@ -154,7 +144,7 @@ public class PrivateMessageServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(PrivateMessage::getRecvId, userId) - .eq(PrivateMessage::getStatus, MessageStatusEnum.UNREAD); + .eq(PrivateMessage::getStatus, MessageStatus.UNREAD); List messages = this.list(queryWrapper); // 上传至redis,等待推送 if (!messages.isEmpty()) { @@ -162,8 +152,8 @@ public class PrivateMessageServiceImpl extends ServiceImpl redisTemplate; - - @Autowired - private IPrivateMessageService privateMessageService; - - @PostConstruct - public void init(){ - for(int i=0;i updateWrapper = new UpdateWrapper<>(); - updateWrapper.lambda().eq(PrivateMessage::getId,msgId) - .eq(PrivateMessage::getStatus,MessageStatusEnum.UNREAD.getCode()) - .set(PrivateMessage::getStatus, MessageStatusEnum.ALREADY_READ.getCode()); - privateMessageService.update(updateWrapper); - log.info("消息已读,id:{}",msgId); - } - }catch (Exception e){ - log.error(e.getMessage()); - Thread.sleep(200); - }finally { - // 下一次循环 - if(!executorService.isShutdown()){ - executorService.submit(this); - } - } - } - } -} diff --git a/commom/src/main/java/com/bx/common/util/BeanUtils.java b/im-platform/src/main/java/com/bx/implatform/util/BeanUtils.java similarity index 99% rename from commom/src/main/java/com/bx/common/util/BeanUtils.java rename to im-platform/src/main/java/com/bx/implatform/util/BeanUtils.java index 5914212..9bc74be 100644 --- a/commom/src/main/java/com/bx/common/util/BeanUtils.java +++ b/im-platform/src/main/java/com/bx/implatform/util/BeanUtils.java @@ -1,4 +1,4 @@ -package com.bx.common.util; +package com.bx.implatform.util; import org.springframework.beans.BeanWrapper; import org.springframework.beans.BeanWrapperImpl; @@ -12,7 +12,6 @@ import java.util.Set; public class BeanUtils { - private static void handleReflectionException(Exception e) { ReflectionUtils.handleReflectionException(e); } diff --git a/commom/src/main/java/com/bx/common/util/DateTimeUtils.java b/im-platform/src/main/java/com/bx/implatform/util/DateTimeUtils.java similarity index 99% rename from commom/src/main/java/com/bx/common/util/DateTimeUtils.java rename to im-platform/src/main/java/com/bx/implatform/util/DateTimeUtils.java index 5d79b0f..4cad011 100644 --- a/commom/src/main/java/com/bx/common/util/DateTimeUtils.java +++ b/im-platform/src/main/java/com/bx/implatform/util/DateTimeUtils.java @@ -1,4 +1,4 @@ -package com.bx.common.util; +package com.bx.implatform.util; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; diff --git a/im-platform/src/main/java/com/bx/implatform/util/MinioUtil.java b/im-platform/src/main/java/com/bx/implatform/util/MinioUtil.java index bf4f1cd..ff62244 100644 --- a/im-platform/src/main/java/com/bx/implatform/util/MinioUtil.java +++ b/im-platform/src/main/java/com/bx/implatform/util/MinioUtil.java @@ -1,7 +1,6 @@ package com.bx.implatform.util; -import com.bx.common.util.DateTimeUtils; import io.minio.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; diff --git a/im-platform/src/main/resources/application.yml b/im-platform/src/main/resources/application.yml index 71a18c9..a75e938 100644 --- a/im-platform/src/main/resources/application.yml +++ b/im-platform/src/main/resources/application.yml @@ -23,7 +23,7 @@ mybatis-plus: configuration: # 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射 map-underscore-to-camel-case: false - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # mapper mapper-locations: # *.xml的具体路径 diff --git a/im-server/src/main/java/com/bx/imserver/task/PullUnreadGroupMessageTask.java b/im-server/src/main/java/com/bx/imserver/task/PullUnreadGroupMessageTask.java index 241cbb2..7e4b227 100644 --- a/im-server/src/main/java/com/bx/imserver/task/PullUnreadGroupMessageTask.java +++ b/im-server/src/main/java/com/bx/imserver/task/PullUnreadGroupMessageTask.java @@ -1,8 +1,9 @@ package com.bx.imserver.task; import com.bx.common.contant.RedisKey; -import com.bx.common.enums.WSCmdEnum; +import com.bx.common.enums.IMCmdType; import com.bx.common.model.im.GroupMessageInfo; +import com.bx.common.model.im.IMRecvInfo; import com.bx.imserver.websocket.WebsocketServer; import com.bx.imserver.websocket.processor.MessageProcessor; import com.bx.imserver.websocket.processor.ProcessorFactory; @@ -28,13 +29,13 @@ public class PullUnreadGroupMessageTask extends AbstractPullMessageTask { @Override public void pullMessage() { // 从redis拉取未读消息 - String key = RedisKey.IM_UNREAD_GROUP_MESSAGE + WSServer.getServerId(); + String key = RedisKey.IM_UNREAD_GROUP_QUEUE + WSServer.getServerId(); List messageInfos = redisTemplate.opsForList().range(key,0,-1); for(Object o: messageInfos){ redisTemplate.opsForList().leftPop(key); - GroupMessageInfo messageInfo = (GroupMessageInfo)o; - MessageProcessor processor = ProcessorFactory.createProcessor(WSCmdEnum.GROUP_MESSAGE); - processor.process(messageInfo); + IMRecvInfo recvInfo = (IMRecvInfo)o; + MessageProcessor processor = ProcessorFactory.createProcessor(IMCmdType.GROUP_MESSAGE); + processor.process(recvInfo); } } diff --git a/im-server/src/main/java/com/bx/imserver/task/PullUnreadPrivateMessageTask.java b/im-server/src/main/java/com/bx/imserver/task/PullUnreadPrivateMessageTask.java index bf515ef..a68038b 100644 --- a/im-server/src/main/java/com/bx/imserver/task/PullUnreadPrivateMessageTask.java +++ b/im-server/src/main/java/com/bx/imserver/task/PullUnreadPrivateMessageTask.java @@ -2,7 +2,8 @@ package com.bx.imserver.task; import com.bx.common.contant.RedisKey; -import com.bx.common.enums.WSCmdEnum; +import com.bx.common.enums.IMCmdType; +import com.bx.common.model.im.IMRecvInfo; import com.bx.common.model.im.PrivateMessageInfo; import com.bx.imserver.websocket.WebsocketServer; import com.bx.imserver.websocket.processor.MessageProcessor; @@ -28,13 +29,13 @@ public class PullUnreadPrivateMessageTask extends AbstractPullMessageTask { @Override public void pullMessage() { // 从redis拉取未读消息 - String key = RedisKey.IM_UNREAD_PRIVATE_MESSAGE + WSServer.getServerId(); + String key = RedisKey.IM_UNREAD_PRIVATE_QUEUE + WSServer.getServerId(); List messageInfos = redisTemplate.opsForList().range(key,0,-1); for(Object o: messageInfos){ redisTemplate.opsForList().leftPop(key); - PrivateMessageInfo messageInfo = (PrivateMessageInfo)o; - MessageProcessor processor = ProcessorFactory.createProcessor(WSCmdEnum.PRIVATE_MESSAGE); - processor.process(messageInfo); + IMRecvInfo recvInfo = (IMRecvInfo)o; + MessageProcessor processor = ProcessorFactory.createProcessor(IMCmdType.PRIVATE_MESSAGE); + processor.process(recvInfo); } } diff --git a/im-server/src/main/java/com/bx/imserver/websocket/WebSocketHandler.java b/im-server/src/main/java/com/bx/imserver/websocket/WebSocketHandler.java index 8e8e9f6..7012426 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/WebSocketHandler.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/WebSocketHandler.java @@ -1,7 +1,7 @@ package com.bx.imserver.websocket; import com.bx.common.contant.RedisKey; -import com.bx.common.enums.WSCmdEnum; +import com.bx.common.enums.IMCmdType; import com.bx.common.model.im.SendInfo; import com.bx.common.util.SpringContextHolder; import com.bx.imserver.websocket.processor.MessageProcessor; @@ -33,7 +33,7 @@ public class WebSocketHandler extends SimpleChannelInboundHandler { @Override protected void channelRead0(ChannelHandlerContext ctx, SendInfo sendInfo) throws Exception { // 创建处理器进行处理 - MessageProcessor processor = ProcessorFactory.createProcessor(WSCmdEnum.fromCode(sendInfo.getCmd())); + MessageProcessor processor = ProcessorFactory.createProcessor(IMCmdType.fromCode(sendInfo.getCmd())); processor.process(ctx,processor.transForm(sendInfo.getData())); } diff --git a/im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java b/im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java index 67ace27..0c9f531 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java @@ -1,10 +1,12 @@ package com.bx.imserver.websocket.processor; import com.bx.common.contant.RedisKey; -import com.bx.common.enums.MessageTypeEnum; -import com.bx.common.enums.WSCmdEnum; +import com.bx.common.enums.IMCmdType; +import com.bx.common.enums.SendResultType; import com.bx.common.model.im.GroupMessageInfo; +import com.bx.common.model.im.IMRecvInfo; import com.bx.common.model.im.SendInfo; +import com.bx.common.model.im.SendResult; import com.bx.imserver.websocket.WebsocketChannelCtxHolder; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; @@ -17,38 +19,58 @@ import java.util.List; @Slf4j @Component -public class GroupMessageProcessor extends MessageProcessor { +public class GroupMessageProcessor extends MessageProcessor> { @Autowired private RedisTemplate redisTemplate; @Async @Override - public void process(GroupMessageInfo data) { - log.info("接收到群消息,发送者:{},群id:{},接收id:{},内容:{}",data.getSendId(),data.getGroupId(),data.getRecvIds(),data.getContent()); - List recvIds = data.getRecvIds(); - // 接收者id列表不需要传输,节省带宽 - data.setRecvIds(null); + public void process(IMRecvInfo recvInfo) { + GroupMessageInfo messageInfo = recvInfo.getData(); + List recvIds = recvInfo.getRecvIds(); + log.info("接收到群消息,发送者:{},群id:{},接收id:{},内容:{}",messageInfo.getSendId(),messageInfo.getGroupId(),recvIds,messageInfo.getContent()); for(Long recvId:recvIds){ - ChannelHandlerContext channelCtx = WebsocketChannelCtxHolder.getChannelCtx(recvId); - if(channelCtx != null){ - // 自己发的消息不用推送 - if(recvId != data.getSendId()){ - // 推送消息到用户 - SendInfo sendInfo = new SendInfo(); - sendInfo.setCmd(WSCmdEnum.GROUP_MESSAGE.getCode()); - sendInfo.setData(data); - channelCtx.channel().writeAndFlush(sendInfo); + try { + ChannelHandlerContext channelCtx = WebsocketChannelCtxHolder.getChannelCtx(recvId); + if(channelCtx != null){ + // 自己发的消息不用推送 + if(recvId != messageInfo.getSendId()){ + // 推送消息到用户 + SendInfo sendInfo = new SendInfo(); + sendInfo.setCmd(IMCmdType.GROUP_MESSAGE.getCode()); + sendInfo.setData(messageInfo); + channelCtx.channel().writeAndFlush(sendInfo); + // 消息发送成功确认 + String key = RedisKey.IM_RESULT_GROUP_QUEUE; + SendResult sendResult = new SendResult(); + sendResult.setRecvId(recvId); + sendResult.setResult(SendResultType.SUCCESS); + sendResult.setMessageInfo(messageInfo); + redisTemplate.opsForList().rightPush(key,sendResult); + } + }else { + // 消息发送失败确认 + String key = RedisKey.IM_RESULT_GROUP_QUEUE; + SendResult sendResult = new SendResult(); + sendResult.setRecvId(recvId); + sendResult.setResult(SendResultType.FAIL); + sendResult.setFailReason("未找到WS连接"); + sendResult.setMessageInfo(messageInfo); + redisTemplate.opsForList().rightPush(key,sendResult); + log.error("未找到WS连接,发送者:{},群id:{},接收id:{},内容:{}",messageInfo.getSendId(),messageInfo.getGroupId(),recvIds,messageInfo.getContent()); } - if(data.getType() != MessageTypeEnum.TIP.getCode()){ - // 设置已读最大id - String key = RedisKey.IM_GROUP_READED_POSITION + data.getGroupId()+":"+recvId; - redisTemplate.opsForValue().set(key,data.getId()); - } - }else { - log.error("未找到WS连接,发送者:{},群id:{},接收id:{},内容:{}",data.getSendId(),data.getGroupId(),data.getRecvIds()); + }catch (Exception e){ + // 消息发送失败确认 + String key = RedisKey.IM_RESULT_GROUP_QUEUE; + SendResult sendResult = new SendResult(); + sendResult.setRecvId(recvId); + sendResult.setResult(SendResultType.FAIL); + sendResult.setFailReason("未知异常"); + sendResult.setMessageInfo(messageInfo); + redisTemplate.opsForList().rightPush(key,sendResult); + log.error("发送消息异常,发送者:{},群id:{},接收id:{},内容:{}",messageInfo.getSendId(),messageInfo.getGroupId(),recvIds,messageInfo.getContent()); } - } } diff --git a/im-server/src/main/java/com/bx/imserver/websocket/processor/HeartbeatProcessor.java b/im-server/src/main/java/com/bx/imserver/websocket/processor/HeartbeatProcessor.java index 1701299..0bbc743 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/processor/HeartbeatProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/processor/HeartbeatProcessor.java @@ -3,7 +3,7 @@ package com.bx.imserver.websocket.processor; import cn.hutool.core.bean.BeanUtil; import com.bx.common.contant.Constant; import com.bx.common.contant.RedisKey; -import com.bx.common.enums.WSCmdEnum; +import com.bx.common.enums.IMCmdType; import com.bx.common.model.im.HeartbeatInfo; import com.bx.common.model.im.SendInfo; import com.bx.imserver.websocket.WebsocketServer; @@ -32,7 +32,7 @@ public class HeartbeatProcessor extends MessageProcessor { public void process(ChannelHandlerContext ctx, HeartbeatInfo beatInfo) { // 响应ws SendInfo sendInfo = new SendInfo(); - sendInfo.setCmd(WSCmdEnum.HEART_BEAT.getCode()); + sendInfo.setCmd(IMCmdType.HEART_BEAT.getCode()); ctx.channel().writeAndFlush(sendInfo); // 设置属性 diff --git a/im-server/src/main/java/com/bx/imserver/websocket/processor/LoginProcessor.java b/im-server/src/main/java/com/bx/imserver/websocket/processor/LoginProcessor.java index 64bd23a..a241afd 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/processor/LoginProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/processor/LoginProcessor.java @@ -3,7 +3,7 @@ package com.bx.imserver.websocket.processor; import cn.hutool.core.bean.BeanUtil; import com.bx.common.contant.Constant; import com.bx.common.contant.RedisKey; -import com.bx.common.enums.WSCmdEnum; +import com.bx.common.enums.IMCmdType; import com.bx.common.model.im.LoginInfo; import com.bx.common.model.im.SendInfo; import com.bx.imserver.websocket.WebsocketChannelCtxHolder; @@ -36,7 +36,7 @@ public class LoginProcessor extends MessageProcessor { if(context != null){ // 不允许多地登录,强制下线 SendInfo sendInfo = new SendInfo(); - sendInfo.setCmd(WSCmdEnum.FORCE_LOGUT.getCode()); + sendInfo.setCmd(IMCmdType.FORCE_LOGUT.getCode()); context.channel().writeAndFlush(sendInfo); } // 绑定用户和channel @@ -52,7 +52,7 @@ public class LoginProcessor extends MessageProcessor { redisTemplate.opsForValue().set(key, WSServer.getServerId(), Constant.ONLINE_TIMEOUT_SECOND, TimeUnit.SECONDS); // 响应ws SendInfo sendInfo = new SendInfo(); - sendInfo.setCmd(WSCmdEnum.LOGIN.getCode()); + sendInfo.setCmd(IMCmdType.LOGIN.getCode()); ctx.channel().writeAndFlush(sendInfo); } diff --git a/im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java b/im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java index c8513ba..bd2b83c 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java @@ -1,10 +1,12 @@ package com.bx.imserver.websocket.processor; import com.bx.common.contant.RedisKey; -import com.bx.common.enums.MessageTypeEnum; -import com.bx.common.enums.WSCmdEnum; +import com.bx.common.enums.IMCmdType; +import com.bx.common.enums.SendResultType; +import com.bx.common.model.im.IMRecvInfo; import com.bx.common.model.im.PrivateMessageInfo; import com.bx.common.model.im.SendInfo; +import com.bx.common.model.im.SendResult; import com.bx.imserver.websocket.WebsocketChannelCtxHolder; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; @@ -14,30 +16,52 @@ import org.springframework.stereotype.Component; @Slf4j @Component -public class PrivateMessageProcessor extends MessageProcessor { +public class PrivateMessageProcessor extends MessageProcessor> { @Autowired private RedisTemplate redisTemplate; @Override - public void process(PrivateMessageInfo data) { - log.info("接收到消息,发送者:{},接收者:{},内容:{}",data.getSendId(),data.getRecvId(),data.getContent()); - // 一个用户可以同时登陆,所以有多个channel - ChannelHandlerContext channelCtx = WebsocketChannelCtxHolder.getChannelCtx(data.getRecvId()); - if(channelCtx != null ){ - // 推送消息到用户 - SendInfo sendInfo = new SendInfo(); - sendInfo.setCmd(WSCmdEnum.PRIVATE_MESSAGE.getCode()); - sendInfo.setData(data); - channelCtx.channel().writeAndFlush(sendInfo); - - if(data.getType() != MessageTypeEnum.TIP.getCode()) { - // 已读消息推送至redis,等待更新数据库 - String key = RedisKey.IM_READED_PRIVATE_MESSAGE_ID; - redisTemplate.opsForList().rightPush(key, data.getId()); + public void process(IMRecvInfo recvInfo) { + PrivateMessageInfo messageInfo = recvInfo.getData(); + Long recvId = recvInfo.getRecvIds().get(0); + log.info("接收到消息,发送者:{},接收者:{},内容:{}",messageInfo.getSendId(),recvId,messageInfo.getContent()); + try{ + ChannelHandlerContext channelCtx = WebsocketChannelCtxHolder.getChannelCtx(recvId); + if(channelCtx != null ){ + // 推送消息到用户 + SendInfo sendInfo = new SendInfo(); + sendInfo.setCmd(IMCmdType.PRIVATE_MESSAGE.getCode()); + sendInfo.setData(messageInfo); + channelCtx.channel().writeAndFlush(sendInfo); + // 消息发送成功确认 + String key = RedisKey.IM_RESULT_PRIVATE_QUEUE; + SendResult sendResult = new SendResult(); + sendResult.setRecvId(recvId); + sendResult.setResult(SendResultType.SUCCESS); + sendResult.setMessageInfo(messageInfo); + redisTemplate.opsForList().rightPush(key,sendResult); + }else{ + // 消息推送失败确认 + String key = RedisKey.IM_RESULT_PRIVATE_QUEUE; + SendResult sendResult = new SendResult(); + sendResult.setRecvId(recvId); + sendResult.setResult(SendResultType.FAIL); + sendResult.setFailReason("未找到WS连接"); + sendResult.setMessageInfo(messageInfo); + redisTemplate.opsForList().rightPush(key,sendResult); + log.error("未找到WS连接,发送者:{},接收者:{},内容:{}",messageInfo.getSendId(),recvId,messageInfo.getContent()); } - }else{ - log.error("未找到WS连接,发送者:{},接收者:{},内容:{}",data.getSendId(),data.getRecvId(),data.getContent()); + }catch (Exception e){ + // 消息推送失败确认 + String key = RedisKey.IM_RESULT_PRIVATE_QUEUE; + SendResult sendResult = new SendResult(); + sendResult.setRecvId(recvId); + sendResult.setResult(SendResultType.FAIL); + sendResult.setFailReason("未知异常"); + sendResult.setMessageInfo(messageInfo); + redisTemplate.opsForList().rightPush(key,sendResult); + log.error("发送异常,发送者:{},接收者:{},内容:{}",messageInfo.getSendId(),recvId,messageInfo.getContent(),e); } } diff --git a/im-server/src/main/java/com/bx/imserver/websocket/processor/ProcessorFactory.java b/im-server/src/main/java/com/bx/imserver/websocket/processor/ProcessorFactory.java index 7f86cae..c15ed32 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/processor/ProcessorFactory.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/processor/ProcessorFactory.java @@ -1,11 +1,11 @@ package com.bx.imserver.websocket.processor; -import com.bx.common.enums.WSCmdEnum; +import com.bx.common.enums.IMCmdType; import com.bx.common.util.SpringContextHolder; public class ProcessorFactory { - public static MessageProcessor createProcessor(WSCmdEnum cmd){ + public static MessageProcessor createProcessor(IMCmdType cmd){ MessageProcessor processor = null; switch (cmd){ case LOGIN: diff --git a/pom.xml b/pom.xml index fc15ee7..47b9492 100644 --- a/pom.xml +++ b/pom.xml @@ -13,6 +13,7 @@ im-platform im-server commom + im-client From 430db0f890a3fcfb28c216e13b804b98f3e89cd5 Mon Sep 17 00:00:00 2001 From: "xie.bx" Date: Sat, 19 Nov 2022 17:45:47 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E5=B0=81=E8=A3=85im-client?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + im-client/pom.xml | 6 ++--- .../main/java/com/bx/imclient/IMClient.java | 4 +-- .../bx/imclient/annotation/IMListener.java | 2 +- .../bx/imclient/listener/MessageListener.java | 2 +- .../listener/MessageListenerMulticaster.java | 4 +-- .../java/com/bx/imclient/sender/IMSender.java | 16 ++++++------ .../task/PullSendResultGroupMessageTask.java | 6 ++--- .../PullSendResultPrivateMessageTask.java | 6 ++--- {commom => im-commom}/pom.xml | 4 +-- .../com/bx/imcommon}/contant/Constant.java | 2 +- .../com/bx/imcommon}/contant/RedisKey.java | 2 +- .../java/com/bx/imcommon}/enums/FileType.java | 2 +- .../com/bx/imcommon}/enums/IMCmdType.java | 2 +- .../com/bx/imcommon}/enums/ListenerType.java | 2 +- .../com/bx/imcommon}/enums/MessageStatus.java | 2 +- .../com/bx/imcommon}/enums/MessageType.java | 2 +- .../bx/imcommon}/enums/SendResultType.java | 2 +- .../imcommon}/model/im/GroupMessageInfo.java | 4 +-- .../bx/imcommon}/model/im/HeartbeatInfo.java | 2 +- .../com/bx/imcommon}/model/im/IMRecvInfo.java | 2 +- .../com/bx/imcommon}/model/im/LoginInfo.java | 2 +- .../model/im/PrivateMessageInfo.java | 4 +-- .../com/bx/imcommon}/model/im/SendInfo.java | 2 +- .../com/bx/imcommon}/model/im/SendResult.java | 4 +-- .../serializer/DateToLongSerializer.java | 2 +- .../imcommon}/util/SpringContextHolder.java | 2 +- im-platform/pom.xml | 4 +-- .../controller/GroupMessageController.java | 2 +- .../controller/PrivateMessageController.java | 2 +- .../listener/GroupMessageListener.java | 16 +++++++----- .../listener/PrivateMessageListener.java | 25 +++++++++++-------- .../service/IGroupMessageService.java | 2 +- .../service/IPrivateMessageService.java | 2 +- .../service/impl/GroupMessageServiceImpl.java | 15 +++++------ .../impl/PrivateMessageServiceImpl.java | 19 +++++++------- .../service/impl/UserServiceImpl.java | 2 +- .../service/thirdparty/FileService.java | 2 +- im-server/pom.xml | 6 ++--- .../task/PullUnreadGroupMessageTask.java | 8 +++--- .../task/PullUnreadPrivateMessageTask.java | 8 +++--- .../imserver/websocket/WebSocketHandler.java | 8 +++--- .../imserver/websocket/WebsocketServer.java | 2 +- .../endecode/MessageProtocolDecoder.java | 2 +- .../endecode/MessageProtocolEncoder.java | 2 +- .../processor/GroupMessageProcessor.java | 14 +++++------ .../processor/HeartbeatProcessor.java | 10 ++++---- .../websocket/processor/LoginProcessor.java | 10 ++++---- .../processor/PrivateMessageProcessor.java | 14 +++++------ .../websocket/processor/ProcessorFactory.java | 4 +-- pom.xml | 4 +-- 51 files changed, 140 insertions(+), 134 deletions(-) rename {commom => im-commom}/pom.xml (95%) rename {commom/src/main/java/com/bx/common => im-commom/src/main/java/com/bx/imcommon}/contant/Constant.java (86%) rename {commom/src/main/java/com/bx/common => im-commom/src/main/java/com/bx/imcommon}/contant/RedisKey.java (95%) rename {commom/src/main/java/com/bx/common => im-commom/src/main/java/com/bx/imcommon}/enums/FileType.java (95%) rename {commom/src/main/java/com/bx/common => im-commom/src/main/java/com/bx/imcommon}/enums/IMCmdType.java (95%) rename {commom/src/main/java/com/bx/common => im-commom/src/main/java/com/bx/imcommon}/enums/ListenerType.java (92%) rename {commom/src/main/java/com/bx/common => im-commom/src/main/java/com/bx/imcommon}/enums/MessageStatus.java (95%) rename {commom/src/main/java/com/bx/common => im-commom/src/main/java/com/bx/imcommon}/enums/MessageType.java (93%) rename {commom/src/main/java/com/bx/common => im-commom/src/main/java/com/bx/imcommon}/enums/SendResultType.java (92%) rename {commom/src/main/java/com/bx/common => im-commom/src/main/java/com/bx/imcommon}/model/im/GroupMessageInfo.java (80%) rename {commom/src/main/java/com/bx/common => im-commom/src/main/java/com/bx/imcommon}/model/im/HeartbeatInfo.java (71%) rename {commom/src/main/java/com/bx/common => im-commom/src/main/java/com/bx/imcommon}/model/im/IMRecvInfo.java (82%) rename {commom/src/main/java/com/bx/common => im-commom/src/main/java/com/bx/imcommon}/model/im/LoginInfo.java (70%) rename {commom/src/main/java/com/bx/common => im-commom/src/main/java/com/bx/imcommon}/model/im/PrivateMessageInfo.java (80%) rename {commom/src/main/java/com/bx/common => im-commom/src/main/java/com/bx/imcommon}/model/im/SendInfo.java (76%) rename {commom/src/main/java/com/bx/common => im-commom/src/main/java/com/bx/imcommon}/model/im/SendResult.java (70%) rename {commom/src/main/java/com/bx/common => im-commom/src/main/java/com/bx/imcommon}/serializer/DateToLongSerializer.java (96%) rename {commom/src/main/java/com/bx/common => im-commom/src/main/java/com/bx/imcommon}/util/SpringContextHolder.java (97%) diff --git a/.gitignore b/.gitignore index 1aa5cb5..04a6707 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ /im-platform/src/main/resources/logback-prod.xml /im-server/src/main/resources/application-prod.yml /im-server/src/main/resources/logback-prod.xml +/im-commom/im-commom.iml diff --git a/im-client/pom.xml b/im-client/pom.xml index 73f33b8..9ef288f 100644 --- a/im-client/pom.xml +++ b/im-client/pom.xml @@ -5,7 +5,7 @@ box-im com.bx - 1.0.0 + 1.1.0 4.0.0 @@ -14,8 +14,8 @@ com.bx - commom - 1.0.0 + im-commom + 1.1.0 diff --git a/im-client/src/main/java/com/bx/imclient/IMClient.java b/im-client/src/main/java/com/bx/imclient/IMClient.java index dbe03a3..71c29c2 100644 --- a/im-client/src/main/java/com/bx/imclient/IMClient.java +++ b/im-client/src/main/java/com/bx/imclient/IMClient.java @@ -1,7 +1,7 @@ package com.bx.imclient; -import com.bx.common.model.im.GroupMessageInfo; -import com.bx.common.model.im.PrivateMessageInfo; +import com.bx.imcommon.model.im.GroupMessageInfo; +import com.bx.imcommon.model.im.PrivateMessageInfo; import com.bx.imclient.listener.MessageListenerMulticaster; import com.bx.imclient.sender.IMSender; import org.springframework.beans.factory.annotation.Autowired; diff --git a/im-client/src/main/java/com/bx/imclient/annotation/IMListener.java b/im-client/src/main/java/com/bx/imclient/annotation/IMListener.java index 8e86edf..6ea12ce 100644 --- a/im-client/src/main/java/com/bx/imclient/annotation/IMListener.java +++ b/im-client/src/main/java/com/bx/imclient/annotation/IMListener.java @@ -1,6 +1,6 @@ package com.bx.imclient.annotation; -import com.bx.common.enums.ListenerType; +import com.bx.imcommon.enums.ListenerType; import org.springframework.stereotype.Component; import java.lang.annotation.ElementType; diff --git a/im-client/src/main/java/com/bx/imclient/listener/MessageListener.java b/im-client/src/main/java/com/bx/imclient/listener/MessageListener.java index a223f34..222ab6e 100644 --- a/im-client/src/main/java/com/bx/imclient/listener/MessageListener.java +++ b/im-client/src/main/java/com/bx/imclient/listener/MessageListener.java @@ -1,7 +1,7 @@ package com.bx.imclient.listener; -import com.bx.common.model.im.SendResult; +import com.bx.imcommon.model.im.SendResult; public interface MessageListener { diff --git a/im-client/src/main/java/com/bx/imclient/listener/MessageListenerMulticaster.java b/im-client/src/main/java/com/bx/imclient/listener/MessageListenerMulticaster.java index 0cf4516..70cdbce 100644 --- a/im-client/src/main/java/com/bx/imclient/listener/MessageListenerMulticaster.java +++ b/im-client/src/main/java/com/bx/imclient/listener/MessageListenerMulticaster.java @@ -1,8 +1,8 @@ package com.bx.imclient.listener; -import com.bx.common.enums.ListenerType; -import com.bx.common.model.im.SendResult; +import com.bx.imcommon.enums.ListenerType; +import com.bx.imcommon.model.im.SendResult; import com.bx.imclient.annotation.IMListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; 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 5c5c665..e90cd2e 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 @@ -1,13 +1,13 @@ package com.bx.imclient.sender; -import com.bx.common.contant.RedisKey; -import com.bx.common.enums.IMCmdType; -import com.bx.common.enums.ListenerType; -import com.bx.common.enums.SendResultType; -import com.bx.common.model.im.GroupMessageInfo; -import com.bx.common.model.im.IMRecvInfo; -import com.bx.common.model.im.PrivateMessageInfo; -import com.bx.common.model.im.SendResult; +import com.bx.imcommon.contant.RedisKey; +import com.bx.imcommon.enums.IMCmdType; +import com.bx.imcommon.enums.ListenerType; +import com.bx.imcommon.enums.SendResultType; +import com.bx.imcommon.model.im.GroupMessageInfo; +import com.bx.imcommon.model.im.IMRecvInfo; +import com.bx.imcommon.model.im.PrivateMessageInfo; +import com.bx.imcommon.model.im.SendResult; import com.bx.imclient.listener.MessageListenerMulticaster; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; diff --git a/im-client/src/main/java/com/bx/imclient/task/PullSendResultGroupMessageTask.java b/im-client/src/main/java/com/bx/imclient/task/PullSendResultGroupMessageTask.java index 0b5466a..eba2978 100644 --- a/im-client/src/main/java/com/bx/imclient/task/PullSendResultGroupMessageTask.java +++ b/im-client/src/main/java/com/bx/imclient/task/PullSendResultGroupMessageTask.java @@ -1,8 +1,8 @@ package com.bx.imclient.task; -import com.bx.common.contant.RedisKey; -import com.bx.common.enums.ListenerType; -import com.bx.common.model.im.SendResult; +import com.bx.imcommon.contant.RedisKey; +import com.bx.imcommon.enums.ListenerType; +import com.bx.imcommon.model.im.SendResult; import com.bx.imclient.listener.MessageListenerMulticaster; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; diff --git a/im-client/src/main/java/com/bx/imclient/task/PullSendResultPrivateMessageTask.java b/im-client/src/main/java/com/bx/imclient/task/PullSendResultPrivateMessageTask.java index 6f3042d..a248765 100644 --- a/im-client/src/main/java/com/bx/imclient/task/PullSendResultPrivateMessageTask.java +++ b/im-client/src/main/java/com/bx/imclient/task/PullSendResultPrivateMessageTask.java @@ -1,8 +1,8 @@ package com.bx.imclient.task; -import com.bx.common.contant.RedisKey; -import com.bx.common.enums.ListenerType; -import com.bx.common.model.im.SendResult; +import com.bx.imcommon.contant.RedisKey; +import com.bx.imcommon.enums.ListenerType; +import com.bx.imcommon.model.im.SendResult; import com.bx.imclient.listener.MessageListenerMulticaster; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; diff --git a/commom/pom.xml b/im-commom/pom.xml similarity index 95% rename from commom/pom.xml rename to im-commom/pom.xml index 6641d62..f998bcf 100644 --- a/commom/pom.xml +++ b/im-commom/pom.xml @@ -5,10 +5,10 @@ box-im com.bx - 1.0.0 + 1.1.0 4.0.0 - commom + im-commom 8 diff --git a/commom/src/main/java/com/bx/common/contant/Constant.java b/im-commom/src/main/java/com/bx/imcommon/contant/Constant.java similarity index 86% rename from commom/src/main/java/com/bx/common/contant/Constant.java rename to im-commom/src/main/java/com/bx/imcommon/contant/Constant.java index 296e054..11c1e5d 100644 --- a/commom/src/main/java/com/bx/common/contant/Constant.java +++ b/im-commom/src/main/java/com/bx/imcommon/contant/Constant.java @@ -1,4 +1,4 @@ -package com.bx.common.contant; +package com.bx.imcommon.contant; public class Constant { diff --git a/commom/src/main/java/com/bx/common/contant/RedisKey.java b/im-commom/src/main/java/com/bx/imcommon/contant/RedisKey.java similarity index 95% rename from commom/src/main/java/com/bx/common/contant/RedisKey.java rename to im-commom/src/main/java/com/bx/imcommon/contant/RedisKey.java index 2a68dd7..e8c2d7e 100644 --- a/commom/src/main/java/com/bx/common/contant/RedisKey.java +++ b/im-commom/src/main/java/com/bx/imcommon/contant/RedisKey.java @@ -1,4 +1,4 @@ -package com.bx.common.contant; +package com.bx.imcommon.contant; public class RedisKey { diff --git a/commom/src/main/java/com/bx/common/enums/FileType.java b/im-commom/src/main/java/com/bx/imcommon/enums/FileType.java similarity index 95% rename from commom/src/main/java/com/bx/common/enums/FileType.java rename to im-commom/src/main/java/com/bx/imcommon/enums/FileType.java index afe3e5b..c0eaa3f 100644 --- a/commom/src/main/java/com/bx/common/enums/FileType.java +++ b/im-commom/src/main/java/com/bx/imcommon/enums/FileType.java @@ -1,4 +1,4 @@ -package com.bx.common.enums; +package com.bx.imcommon.enums; public enum FileType { diff --git a/commom/src/main/java/com/bx/common/enums/IMCmdType.java b/im-commom/src/main/java/com/bx/imcommon/enums/IMCmdType.java similarity index 95% rename from commom/src/main/java/com/bx/common/enums/IMCmdType.java rename to im-commom/src/main/java/com/bx/imcommon/enums/IMCmdType.java index f0233db..b8c2bc9 100644 --- a/commom/src/main/java/com/bx/common/enums/IMCmdType.java +++ b/im-commom/src/main/java/com/bx/imcommon/enums/IMCmdType.java @@ -1,4 +1,4 @@ -package com.bx.common.enums; +package com.bx.imcommon.enums; public enum IMCmdType { diff --git a/commom/src/main/java/com/bx/common/enums/ListenerType.java b/im-commom/src/main/java/com/bx/imcommon/enums/ListenerType.java similarity index 92% rename from commom/src/main/java/com/bx/common/enums/ListenerType.java rename to im-commom/src/main/java/com/bx/imcommon/enums/ListenerType.java index d0cbb64..26b14d7 100644 --- a/commom/src/main/java/com/bx/common/enums/ListenerType.java +++ b/im-commom/src/main/java/com/bx/imcommon/enums/ListenerType.java @@ -1,4 +1,4 @@ -package com.bx.common.enums; +package com.bx.imcommon.enums; public enum ListenerType { diff --git a/commom/src/main/java/com/bx/common/enums/MessageStatus.java b/im-commom/src/main/java/com/bx/imcommon/enums/MessageStatus.java similarity index 95% rename from commom/src/main/java/com/bx/common/enums/MessageStatus.java rename to im-commom/src/main/java/com/bx/imcommon/enums/MessageStatus.java index f36c303..07663ed 100644 --- a/commom/src/main/java/com/bx/common/enums/MessageStatus.java +++ b/im-commom/src/main/java/com/bx/imcommon/enums/MessageStatus.java @@ -1,4 +1,4 @@ -package com.bx.common.enums; +package com.bx.imcommon.enums; public enum MessageStatus { diff --git a/commom/src/main/java/com/bx/common/enums/MessageType.java b/im-commom/src/main/java/com/bx/imcommon/enums/MessageType.java similarity index 93% rename from commom/src/main/java/com/bx/common/enums/MessageType.java rename to im-commom/src/main/java/com/bx/imcommon/enums/MessageType.java index 9060809..2d130cb 100644 --- a/commom/src/main/java/com/bx/common/enums/MessageType.java +++ b/im-commom/src/main/java/com/bx/imcommon/enums/MessageType.java @@ -1,4 +1,4 @@ -package com.bx.common.enums; +package com.bx.imcommon.enums; public enum MessageType { diff --git a/commom/src/main/java/com/bx/common/enums/SendResultType.java b/im-commom/src/main/java/com/bx/imcommon/enums/SendResultType.java similarity index 92% rename from commom/src/main/java/com/bx/common/enums/SendResultType.java rename to im-commom/src/main/java/com/bx/imcommon/enums/SendResultType.java index cfbf124..c1905cf 100644 --- a/commom/src/main/java/com/bx/common/enums/SendResultType.java +++ b/im-commom/src/main/java/com/bx/imcommon/enums/SendResultType.java @@ -1,4 +1,4 @@ -package com.bx.common.enums; +package com.bx.imcommon.enums; public enum SendResultType { diff --git a/commom/src/main/java/com/bx/common/model/im/GroupMessageInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/im/GroupMessageInfo.java similarity index 80% rename from commom/src/main/java/com/bx/common/model/im/GroupMessageInfo.java rename to im-commom/src/main/java/com/bx/imcommon/model/im/GroupMessageInfo.java index b471fe7..d4c45af 100644 --- a/commom/src/main/java/com/bx/common/model/im/GroupMessageInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/im/GroupMessageInfo.java @@ -1,6 +1,6 @@ -package com.bx.common.model.im; +package com.bx.imcommon.model.im; -import com.bx.common.serializer.DateToLongSerializer; +import com.bx.imcommon.serializer.DateToLongSerializer; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import lombok.Data; diff --git a/commom/src/main/java/com/bx/common/model/im/HeartbeatInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/im/HeartbeatInfo.java similarity index 71% rename from commom/src/main/java/com/bx/common/model/im/HeartbeatInfo.java rename to im-commom/src/main/java/com/bx/imcommon/model/im/HeartbeatInfo.java index 55b6c09..93a75f5 100644 --- a/commom/src/main/java/com/bx/common/model/im/HeartbeatInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/im/HeartbeatInfo.java @@ -1,4 +1,4 @@ -package com.bx.common.model.im; +package com.bx.imcommon.model.im; import lombok.Data; diff --git a/commom/src/main/java/com/bx/common/model/im/IMRecvInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/im/IMRecvInfo.java similarity index 82% rename from commom/src/main/java/com/bx/common/model/im/IMRecvInfo.java rename to im-commom/src/main/java/com/bx/imcommon/model/im/IMRecvInfo.java index e0d8e89..95154f3 100644 --- a/commom/src/main/java/com/bx/common/model/im/IMRecvInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/im/IMRecvInfo.java @@ -1,4 +1,4 @@ -package com.bx.common.model.im; +package com.bx.imcommon.model.im; import lombok.Data; diff --git a/commom/src/main/java/com/bx/common/model/im/LoginInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/im/LoginInfo.java similarity index 70% rename from commom/src/main/java/com/bx/common/model/im/LoginInfo.java rename to im-commom/src/main/java/com/bx/imcommon/model/im/LoginInfo.java index 3636697..5d90581 100644 --- a/commom/src/main/java/com/bx/common/model/im/LoginInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/im/LoginInfo.java @@ -1,4 +1,4 @@ -package com.bx.common.model.im; +package com.bx.imcommon.model.im; import lombok.Data; diff --git a/commom/src/main/java/com/bx/common/model/im/PrivateMessageInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/im/PrivateMessageInfo.java similarity index 80% rename from commom/src/main/java/com/bx/common/model/im/PrivateMessageInfo.java rename to im-commom/src/main/java/com/bx/imcommon/model/im/PrivateMessageInfo.java index 1a20b3f..0544ffc 100644 --- a/commom/src/main/java/com/bx/common/model/im/PrivateMessageInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/im/PrivateMessageInfo.java @@ -1,6 +1,6 @@ -package com.bx.common.model.im; +package com.bx.imcommon.model.im; -import com.bx.common.serializer.DateToLongSerializer; +import com.bx.imcommon.serializer.DateToLongSerializer; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import lombok.Data; diff --git a/commom/src/main/java/com/bx/common/model/im/SendInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/im/SendInfo.java similarity index 76% rename from commom/src/main/java/com/bx/common/model/im/SendInfo.java rename to im-commom/src/main/java/com/bx/imcommon/model/im/SendInfo.java index 794c154..15f1420 100644 --- a/commom/src/main/java/com/bx/common/model/im/SendInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/im/SendInfo.java @@ -1,4 +1,4 @@ -package com.bx.common.model.im; +package com.bx.imcommon.model.im; import lombok.Data; diff --git a/commom/src/main/java/com/bx/common/model/im/SendResult.java b/im-commom/src/main/java/com/bx/imcommon/model/im/SendResult.java similarity index 70% rename from commom/src/main/java/com/bx/common/model/im/SendResult.java rename to im-commom/src/main/java/com/bx/imcommon/model/im/SendResult.java index c655b2f..9e6722a 100644 --- a/commom/src/main/java/com/bx/common/model/im/SendResult.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/im/SendResult.java @@ -1,6 +1,6 @@ -package com.bx.common.model.im; +package com.bx.imcommon.model.im; -import com.bx.common.enums.SendResultType; +import com.bx.imcommon.enums.SendResultType; import lombok.Data; @Data diff --git a/commom/src/main/java/com/bx/common/serializer/DateToLongSerializer.java b/im-commom/src/main/java/com/bx/imcommon/serializer/DateToLongSerializer.java similarity index 96% rename from commom/src/main/java/com/bx/common/serializer/DateToLongSerializer.java rename to im-commom/src/main/java/com/bx/imcommon/serializer/DateToLongSerializer.java index ad97b82..6aa3421 100644 --- a/commom/src/main/java/com/bx/common/serializer/DateToLongSerializer.java +++ b/im-commom/src/main/java/com/bx/imcommon/serializer/DateToLongSerializer.java @@ -1,4 +1,4 @@ -package com.bx.common.serializer; +package com.bx.imcommon.serializer; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonToken; diff --git a/commom/src/main/java/com/bx/common/util/SpringContextHolder.java b/im-commom/src/main/java/com/bx/imcommon/util/SpringContextHolder.java similarity index 97% rename from commom/src/main/java/com/bx/common/util/SpringContextHolder.java rename to im-commom/src/main/java/com/bx/imcommon/util/SpringContextHolder.java index 0a980f4..1511c2b 100644 --- a/commom/src/main/java/com/bx/common/util/SpringContextHolder.java +++ b/im-commom/src/main/java/com/bx/imcommon/util/SpringContextHolder.java @@ -1,4 +1,4 @@ -package com.bx.common.util; +package com.bx.imcommon.util; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; diff --git a/im-platform/pom.xml b/im-platform/pom.xml index a963aee..de6c24e 100644 --- a/im-platform/pom.xml +++ b/im-platform/pom.xml @@ -5,7 +5,7 @@ box-im com.bx - 1.0.0 + 1.1.0 4.0.0 @@ -16,7 +16,7 @@ com.bx im-client - 1.0.0 + 1.1.0 org.springframework.boot 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 540b2ac..094b04a 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 @@ -1,7 +1,7 @@ package com.bx.implatform.controller; -import com.bx.common.model.im.GroupMessageInfo; +import com.bx.imcommon.model.im.GroupMessageInfo; import com.bx.implatform.result.Result; import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.IGroupMessageService; 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 e07da66..2801edf 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 @@ -1,7 +1,7 @@ package com.bx.implatform.controller; -import com.bx.common.model.im.PrivateMessageInfo; +import com.bx.imcommon.model.im.PrivateMessageInfo; import com.bx.implatform.result.Result; import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.IPrivateMessageService; diff --git a/im-platform/src/main/java/com/bx/implatform/listener/GroupMessageListener.java b/im-platform/src/main/java/com/bx/implatform/listener/GroupMessageListener.java index 44b7ae6..9377110 100644 --- a/im-platform/src/main/java/com/bx/implatform/listener/GroupMessageListener.java +++ b/im-platform/src/main/java/com/bx/implatform/listener/GroupMessageListener.java @@ -1,9 +1,10 @@ package com.bx.implatform.listener; -import com.bx.common.enums.ListenerType; -import com.bx.common.enums.MessageType; -import com.bx.common.model.im.GroupMessageInfo; -import com.bx.common.model.im.SendResult; +import com.bx.imcommon.enums.ListenerType; +import com.bx.imcommon.enums.MessageType; +import com.bx.imcommon.enums.SendResultType; +import com.bx.imcommon.model.im.GroupMessageInfo; +import com.bx.imcommon.model.im.SendResult; import com.bx.imclient.annotation.IMListener; import com.bx.imclient.listener.MessageListener; import com.bx.implatform.contant.RedisKey; @@ -26,9 +27,12 @@ public class GroupMessageListener implements MessageListener { // 提示类数据不记录 return; } + // 保存该用户已拉取的最大消息id - String key = RedisKey.IM_GROUP_READED_POSITION + messageInfo.getGroupId()+":"+result.getRecvId(); - redisTemplate.opsForValue().set(key,messageInfo.getId()); + if(result.getResult().equals(SendResultType.SUCCESS)) { + String key = RedisKey.IM_GROUP_READED_POSITION + messageInfo.getGroupId() + ":" + result.getRecvId(); + redisTemplate.opsForValue().set(key, messageInfo.getId()); + } } } diff --git a/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java b/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java index 49ad576..5e5b5a4 100644 --- a/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java +++ b/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java @@ -1,11 +1,12 @@ package com.bx.implatform.listener; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.bx.common.enums.ListenerType; -import com.bx.common.enums.MessageStatus; -import com.bx.common.enums.MessageType; -import com.bx.common.model.im.PrivateMessageInfo; -import com.bx.common.model.im.SendResult; +import com.bx.imcommon.enums.ListenerType; +import com.bx.imcommon.enums.MessageStatus; +import com.bx.imcommon.enums.MessageType; +import com.bx.imcommon.enums.SendResultType; +import com.bx.imcommon.model.im.PrivateMessageInfo; +import com.bx.imcommon.model.im.SendResult; import com.bx.imclient.annotation.IMListener; import com.bx.imclient.listener.MessageListener; import com.bx.implatform.entity.PrivateMessage; @@ -29,12 +30,14 @@ public class PrivateMessageListener implements MessageListener { return; } // 更新消息状态 - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.lambda().eq(PrivateMessage::getId,messageInfo.getId()) - .eq(PrivateMessage::getStatus, MessageStatus.UNREAD.getCode()) - .set(PrivateMessage::getStatus, MessageStatus.ALREADY_READ.getCode()); - privateMessageService.update(updateWrapper); - log.info("消息已读,消息id:{},发送者:{},接收者:{}",messageInfo.getId(),messageInfo.getSendId(),messageInfo.getRecvId()); + if(result.getResult().equals(SendResultType.SUCCESS)){ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.lambda().eq(PrivateMessage::getId,messageInfo.getId()) + .eq(PrivateMessage::getStatus, MessageStatus.UNREAD.getCode()) + .set(PrivateMessage::getStatus, MessageStatus.ALREADY_READ.getCode()); + privateMessageService.update(updateWrapper); + log.info("消息已读,消息id:{},发送者:{},接收者:{}",messageInfo.getId(),messageInfo.getSendId(),messageInfo.getRecvId()); + } } } diff --git a/im-platform/src/main/java/com/bx/implatform/service/IGroupMessageService.java b/im-platform/src/main/java/com/bx/implatform/service/IGroupMessageService.java index 7bb582e..dd891c9 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/IGroupMessageService.java +++ b/im-platform/src/main/java/com/bx/implatform/service/IGroupMessageService.java @@ -1,7 +1,7 @@ package com.bx.implatform.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.bx.common.model.im.GroupMessageInfo; +import com.bx.imcommon.model.im.GroupMessageInfo; import com.bx.implatform.entity.GroupMessage; import com.bx.implatform.vo.GroupMessageVO; diff --git a/im-platform/src/main/java/com/bx/implatform/service/IPrivateMessageService.java b/im-platform/src/main/java/com/bx/implatform/service/IPrivateMessageService.java index 0b1cc37..ac53af8 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/IPrivateMessageService.java +++ b/im-platform/src/main/java/com/bx/implatform/service/IPrivateMessageService.java @@ -1,7 +1,7 @@ package com.bx.implatform.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.bx.common.model.im.PrivateMessageInfo; +import com.bx.imcommon.model.im.PrivateMessageInfo; import com.bx.implatform.entity.PrivateMessage; import com.bx.implatform.vo.PrivateMessageVO; 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 dea178a..3a02fe9 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 @@ -2,10 +2,10 @@ package com.bx.implatform.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.bx.common.contant.Constant; -import com.bx.common.enums.MessageStatus; -import com.bx.common.enums.MessageType; -import com.bx.common.model.im.GroupMessageInfo; +import com.bx.imcommon.contant.Constant; +import com.bx.imcommon.enums.MessageStatus; +import com.bx.imcommon.enums.MessageType; +import com.bx.imcommon.model.im.GroupMessageInfo; import com.bx.imclient.IMClient; import com.bx.implatform.contant.RedisKey; import com.bx.implatform.entity.Group; @@ -76,7 +76,7 @@ public class GroupMessageServiceImpl extends ServiceImpl userIds, GroupMessageInfo msgInfo){ - imClient.sendGroupMessage(userIds,msgInfo); - } } 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 5a4fd3b..f98e7bd 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 @@ -2,11 +2,11 @@ package com.bx.implatform.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.bx.common.contant.Constant; -import com.bx.common.contant.RedisKey; -import com.bx.common.enums.MessageStatus; -import com.bx.common.enums.MessageType; -import com.bx.common.model.im.PrivateMessageInfo; +import com.bx.imcommon.contant.Constant; +import com.bx.imcommon.contant.RedisKey; +import com.bx.imcommon.enums.MessageStatus; +import com.bx.imcommon.enums.MessageType; +import com.bx.imcommon.model.im.PrivateMessageInfo; import com.bx.imclient.IMClient; import com.bx.implatform.entity.PrivateMessage; import com.bx.implatform.enums.ResultCode; @@ -88,7 +88,7 @@ public class PrivateMessageServiceImpl extends ServiceImpl messages = this.list(queryWrapper); // 上传至redis,等待推送 if (!messages.isEmpty()) { - List infos = messages.stream().map(m -> { + List messageInfos = messages.stream().map(m -> { PrivateMessageInfo msgInfo = BeanUtils.copyProperties(m, PrivateMessageInfo.class); return msgInfo; }).collect(Collectors.toList()); // 推送消息 - imClient.sendPrivateMessage(userId,(PrivateMessageInfo[]) infos.toArray()); - log.info("拉取未读私聊消息,用户id:{},数量:{}", userId, infos.size()); + PrivateMessageInfo[] infoArr = messageInfos.toArray(new PrivateMessageInfo[messageInfos.size()]); + imClient.sendPrivateMessage(userId,infoArr); + log.info("拉取未读私聊消息,用户id:{},数量:{}", userId, infoArr.length); } } } diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java index c8d460e..1fafcd2 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java @@ -2,7 +2,7 @@ package com.bx.implatform.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.bx.common.contant.RedisKey; +import com.bx.imcommon.contant.RedisKey; import com.bx.implatform.entity.Friend; import com.bx.implatform.entity.GroupMember; import com.bx.implatform.entity.User; diff --git a/im-platform/src/main/java/com/bx/implatform/service/thirdparty/FileService.java b/im-platform/src/main/java/com/bx/implatform/service/thirdparty/FileService.java index 05148f7..f38b965 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/thirdparty/FileService.java +++ b/im-platform/src/main/java/com/bx/implatform/service/thirdparty/FileService.java @@ -1,6 +1,6 @@ package com.bx.implatform.service.thirdparty; -import com.bx.common.enums.FileType; +import com.bx.imcommon.enums.FileType; import com.bx.implatform.contant.Constant; import com.bx.implatform.enums.ResultCode; import com.bx.implatform.exception.GlobalException; diff --git a/im-server/pom.xml b/im-server/pom.xml index 3c9b13c..397264a 100644 --- a/im-server/pom.xml +++ b/im-server/pom.xml @@ -5,7 +5,7 @@ box-im com.bx - 1.0.0 + 1.1.0 4.0.0 @@ -15,8 +15,8 @@ com.bx - commom - 1.0.0 + im-commom + 1.1.0 org.springframework.boot diff --git a/im-server/src/main/java/com/bx/imserver/task/PullUnreadGroupMessageTask.java b/im-server/src/main/java/com/bx/imserver/task/PullUnreadGroupMessageTask.java index 7e4b227..d94af93 100644 --- a/im-server/src/main/java/com/bx/imserver/task/PullUnreadGroupMessageTask.java +++ b/im-server/src/main/java/com/bx/imserver/task/PullUnreadGroupMessageTask.java @@ -1,9 +1,9 @@ package com.bx.imserver.task; -import com.bx.common.contant.RedisKey; -import com.bx.common.enums.IMCmdType; -import com.bx.common.model.im.GroupMessageInfo; -import com.bx.common.model.im.IMRecvInfo; +import com.bx.imcommon.contant.RedisKey; +import com.bx.imcommon.enums.IMCmdType; +import com.bx.imcommon.model.im.GroupMessageInfo; +import com.bx.imcommon.model.im.IMRecvInfo; import com.bx.imserver.websocket.WebsocketServer; import com.bx.imserver.websocket.processor.MessageProcessor; import com.bx.imserver.websocket.processor.ProcessorFactory; diff --git a/im-server/src/main/java/com/bx/imserver/task/PullUnreadPrivateMessageTask.java b/im-server/src/main/java/com/bx/imserver/task/PullUnreadPrivateMessageTask.java index a68038b..b95d47c 100644 --- a/im-server/src/main/java/com/bx/imserver/task/PullUnreadPrivateMessageTask.java +++ b/im-server/src/main/java/com/bx/imserver/task/PullUnreadPrivateMessageTask.java @@ -1,10 +1,10 @@ package com.bx.imserver.task; -import com.bx.common.contant.RedisKey; -import com.bx.common.enums.IMCmdType; -import com.bx.common.model.im.IMRecvInfo; -import com.bx.common.model.im.PrivateMessageInfo; +import com.bx.imcommon.contant.RedisKey; +import com.bx.imcommon.enums.IMCmdType; +import com.bx.imcommon.model.im.IMRecvInfo; +import com.bx.imcommon.model.im.PrivateMessageInfo; import com.bx.imserver.websocket.WebsocketServer; import com.bx.imserver.websocket.processor.MessageProcessor; import com.bx.imserver.websocket.processor.ProcessorFactory; diff --git a/im-server/src/main/java/com/bx/imserver/websocket/WebSocketHandler.java b/im-server/src/main/java/com/bx/imserver/websocket/WebSocketHandler.java index 7012426..41fea89 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/WebSocketHandler.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/WebSocketHandler.java @@ -1,9 +1,9 @@ package com.bx.imserver.websocket; -import com.bx.common.contant.RedisKey; -import com.bx.common.enums.IMCmdType; -import com.bx.common.model.im.SendInfo; -import com.bx.common.util.SpringContextHolder; +import com.bx.imcommon.contant.RedisKey; +import com.bx.imcommon.enums.IMCmdType; +import com.bx.imcommon.model.im.SendInfo; +import com.bx.imcommon.util.SpringContextHolder; import com.bx.imserver.websocket.processor.MessageProcessor; import com.bx.imserver.websocket.processor.ProcessorFactory; import io.netty.channel.ChannelHandlerContext; diff --git a/im-server/src/main/java/com/bx/imserver/websocket/WebsocketServer.java b/im-server/src/main/java/com/bx/imserver/websocket/WebsocketServer.java index 831d1eb..4e22237 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/WebsocketServer.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/WebsocketServer.java @@ -1,6 +1,6 @@ package com.bx.imserver.websocket; -import com.bx.common.contant.RedisKey; +import com.bx.imcommon.contant.RedisKey; import com.bx.imserver.websocket.endecode.MessageProtocolDecoder; import com.bx.imserver.websocket.endecode.MessageProtocolEncoder; import io.netty.bootstrap.ServerBootstrap; diff --git a/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolDecoder.java b/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolDecoder.java index 657c3f9..f8e03fe 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolDecoder.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolDecoder.java @@ -1,6 +1,6 @@ package com.bx.imserver.websocket.endecode; -import com.bx.common.model.im.SendInfo; +import com.bx.imcommon.model.im.SendInfo; import com.fasterxml.jackson.databind.ObjectMapper; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToMessageDecoder; diff --git a/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolEncoder.java b/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolEncoder.java index 4ecf528..b37b882 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolEncoder.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolEncoder.java @@ -1,6 +1,6 @@ package com.bx.imserver.websocket.endecode; -import com.bx.common.model.im.SendInfo; +import com.bx.imcommon.model.im.SendInfo; import com.fasterxml.jackson.databind.ObjectMapper; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToMessageEncoder; diff --git a/im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java b/im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java index 0c9f531..66e848f 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java @@ -1,12 +1,12 @@ package com.bx.imserver.websocket.processor; -import com.bx.common.contant.RedisKey; -import com.bx.common.enums.IMCmdType; -import com.bx.common.enums.SendResultType; -import com.bx.common.model.im.GroupMessageInfo; -import com.bx.common.model.im.IMRecvInfo; -import com.bx.common.model.im.SendInfo; -import com.bx.common.model.im.SendResult; +import com.bx.imcommon.contant.RedisKey; +import com.bx.imcommon.enums.IMCmdType; +import com.bx.imcommon.enums.SendResultType; +import com.bx.imcommon.model.im.GroupMessageInfo; +import com.bx.imcommon.model.im.IMRecvInfo; +import com.bx.imcommon.model.im.SendInfo; +import com.bx.imcommon.model.im.SendResult; import com.bx.imserver.websocket.WebsocketChannelCtxHolder; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; diff --git a/im-server/src/main/java/com/bx/imserver/websocket/processor/HeartbeatProcessor.java b/im-server/src/main/java/com/bx/imserver/websocket/processor/HeartbeatProcessor.java index 0bbc743..c8cedc4 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/processor/HeartbeatProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/processor/HeartbeatProcessor.java @@ -1,11 +1,11 @@ package com.bx.imserver.websocket.processor; import cn.hutool.core.bean.BeanUtil; -import com.bx.common.contant.Constant; -import com.bx.common.contant.RedisKey; -import com.bx.common.enums.IMCmdType; -import com.bx.common.model.im.HeartbeatInfo; -import com.bx.common.model.im.SendInfo; +import com.bx.imcommon.contant.Constant; +import com.bx.imcommon.contant.RedisKey; +import com.bx.imcommon.enums.IMCmdType; +import com.bx.imcommon.model.im.HeartbeatInfo; +import com.bx.imcommon.model.im.SendInfo; import com.bx.imserver.websocket.WebsocketServer; import io.netty.channel.ChannelHandlerContext; import io.netty.util.AttributeKey; diff --git a/im-server/src/main/java/com/bx/imserver/websocket/processor/LoginProcessor.java b/im-server/src/main/java/com/bx/imserver/websocket/processor/LoginProcessor.java index a241afd..690d42b 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/processor/LoginProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/processor/LoginProcessor.java @@ -1,11 +1,11 @@ package com.bx.imserver.websocket.processor; import cn.hutool.core.bean.BeanUtil; -import com.bx.common.contant.Constant; -import com.bx.common.contant.RedisKey; -import com.bx.common.enums.IMCmdType; -import com.bx.common.model.im.LoginInfo; -import com.bx.common.model.im.SendInfo; +import com.bx.imcommon.contant.Constant; +import com.bx.imcommon.contant.RedisKey; +import com.bx.imcommon.enums.IMCmdType; +import com.bx.imcommon.model.im.LoginInfo; +import com.bx.imcommon.model.im.SendInfo; import com.bx.imserver.websocket.WebsocketChannelCtxHolder; import com.bx.imserver.websocket.WebsocketServer; import io.netty.channel.ChannelHandlerContext; diff --git a/im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java b/im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java index bd2b83c..a7fa075 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java @@ -1,12 +1,12 @@ package com.bx.imserver.websocket.processor; -import com.bx.common.contant.RedisKey; -import com.bx.common.enums.IMCmdType; -import com.bx.common.enums.SendResultType; -import com.bx.common.model.im.IMRecvInfo; -import com.bx.common.model.im.PrivateMessageInfo; -import com.bx.common.model.im.SendInfo; -import com.bx.common.model.im.SendResult; +import com.bx.imcommon.contant.RedisKey; +import com.bx.imcommon.enums.IMCmdType; +import com.bx.imcommon.enums.SendResultType; +import com.bx.imcommon.model.im.IMRecvInfo; +import com.bx.imcommon.model.im.PrivateMessageInfo; +import com.bx.imcommon.model.im.SendInfo; +import com.bx.imcommon.model.im.SendResult; import com.bx.imserver.websocket.WebsocketChannelCtxHolder; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; diff --git a/im-server/src/main/java/com/bx/imserver/websocket/processor/ProcessorFactory.java b/im-server/src/main/java/com/bx/imserver/websocket/processor/ProcessorFactory.java index c15ed32..dccb06e 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/processor/ProcessorFactory.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/processor/ProcessorFactory.java @@ -1,7 +1,7 @@ package com.bx.imserver.websocket.processor; -import com.bx.common.enums.IMCmdType; -import com.bx.common.util.SpringContextHolder; +import com.bx.imcommon.enums.IMCmdType; +import com.bx.imcommon.util.SpringContextHolder; public class ProcessorFactory { diff --git a/pom.xml b/pom.xml index 47b9492..945d351 100644 --- a/pom.xml +++ b/pom.xml @@ -7,12 +7,12 @@ box-im com.bx pom - 1.0.0 + 1.1.0 im-platform im-server - commom + im-commom im-client From dfe8f6e2e7729f1de9db80325a534ace0bca4b86 Mon Sep 17 00:00:00 2001 From: "xie.bx" Date: Sat, 19 Nov 2022 17:50:18 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E5=B0=81=E8=A3=85im-client?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 04a6707..79e1582 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ /box-im.iml /im-server/im-server.iml /im-platform/im-platform.iml -/commom/commom.iml /im-platform/src/main/resources/application-prod.yml /im-platform/src/main/resources/logback-prod.xml /im-server/src/main/resources/application-prod.yml From 3594ab3e5060e70357c7cc91d2a871d2aeaeaa90 Mon Sep 17 00:00:00 2001 From: "xie.bx" Date: Sat, 19 Nov 2022 18:02:31 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E5=91=BD=E4=BB=A4=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/bx/imclient/IMClient.java | 4 +- .../bx/imclient/annotation/IMListener.java | 4 +- .../bx/imclient/listener/MessageListener.java | 2 +- .../listener/MessageListenerMulticaster.java | 6 +-- .../java/com/bx/imclient/sender/IMSender.java | 22 +++++------ .../task/PullSendResultGroupMessageTask.java | 8 ++-- .../PullSendResultPrivateMessageTask.java | 8 ++-- im-commom/im-commom.iml | 37 +++++++++++++++++++ ...{ListenerType.java => IMListenerType.java} | 4 +- ...{SendResultType.java => IMSendStatus.java} | 4 +- .../model/{im => }/GroupMessageInfo.java | 2 +- .../model/{im => }/HeartbeatInfo.java | 2 +- .../imcommon/model/{im => }/IMRecvInfo.java | 2 +- .../{im/SendInfo.java => IMSendInfo.java} | 4 +- .../bx/imcommon/model/{im => }/LoginInfo.java | 2 +- .../model/{im => }/PrivateMessageInfo.java | 2 +- .../imcommon/model/{im => }/SendResult.java | 6 +-- .../controller/GroupMessageController.java | 2 +- .../controller/PrivateMessageController.java | 2 +- .../com/bx/implatform}/enums/FileType.java | 2 +- .../bx/implatform}/enums/MessageStatus.java | 2 +- .../com/bx/implatform}/enums/MessageType.java | 2 +- .../listener/GroupMessageListener.java | 14 +++---- .../listener/PrivateMessageListener.java | 16 ++++---- .../service/IGroupMessageService.java | 2 +- .../service/IPrivateMessageService.java | 2 +- .../service/impl/GroupMessageServiceImpl.java | 8 ++-- .../impl/PrivateMessageServiceImpl.java | 8 ++-- .../service/thirdparty/FileService.java | 2 +- .../task/PullUnreadGroupMessageTask.java | 4 +- .../task/PullUnreadPrivateMessageTask.java | 4 +- .../imserver}/util/SpringContextHolder.java | 2 +- .../imserver/websocket/WebSocketHandler.java | 8 ++-- .../endecode/MessageProtocolDecoder.java | 4 +- .../endecode/MessageProtocolEncoder.java | 6 +-- .../processor/GroupMessageProcessor.java | 18 ++++----- .../processor/HeartbeatProcessor.java | 6 +-- .../websocket/processor/LoginProcessor.java | 8 ++-- .../processor/PrivateMessageProcessor.java | 18 ++++----- .../websocket/processor/ProcessorFactory.java | 2 +- 40 files changed, 149 insertions(+), 112 deletions(-) create mode 100644 im-commom/im-commom.iml rename im-commom/src/main/java/com/bx/imcommon/enums/{ListenerType.java => IMListenerType.java} (81%) rename im-commom/src/main/java/com/bx/imcommon/enums/{SendResultType.java => IMSendStatus.java} (82%) rename im-commom/src/main/java/com/bx/imcommon/model/{im => }/GroupMessageInfo.java (92%) rename im-commom/src/main/java/com/bx/imcommon/model/{im => }/HeartbeatInfo.java (71%) rename im-commom/src/main/java/com/bx/imcommon/model/{im => }/IMRecvInfo.java (82%) rename im-commom/src/main/java/com/bx/imcommon/model/{im/SendInfo.java => IMSendInfo.java} (58%) rename im-commom/src/main/java/com/bx/imcommon/model/{im => }/LoginInfo.java (70%) rename im-commom/src/main/java/com/bx/imcommon/model/{im => }/PrivateMessageInfo.java (92%) rename im-commom/src/main/java/com/bx/imcommon/model/{im => }/SendResult.java (56%) rename {im-commom/src/main/java/com/bx/imcommon => im-platform/src/main/java/com/bx/implatform}/enums/FileType.java (94%) rename {im-commom/src/main/java/com/bx/imcommon => im-platform/src/main/java/com/bx/implatform}/enums/MessageStatus.java (95%) rename {im-commom/src/main/java/com/bx/imcommon => im-platform/src/main/java/com/bx/implatform}/enums/MessageType.java (92%) rename {im-commom/src/main/java/com/bx/imcommon => im-server/src/main/java/com/bx/imserver}/util/SpringContextHolder.java (97%) diff --git a/im-client/src/main/java/com/bx/imclient/IMClient.java b/im-client/src/main/java/com/bx/imclient/IMClient.java index 71c29c2..4891023 100644 --- a/im-client/src/main/java/com/bx/imclient/IMClient.java +++ b/im-client/src/main/java/com/bx/imclient/IMClient.java @@ -1,9 +1,9 @@ package com.bx.imclient; -import com.bx.imcommon.model.im.GroupMessageInfo; -import com.bx.imcommon.model.im.PrivateMessageInfo; import com.bx.imclient.listener.MessageListenerMulticaster; import com.bx.imclient.sender.IMSender; +import com.bx.imcommon.model.GroupMessageInfo; +import com.bx.imcommon.model.PrivateMessageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; diff --git a/im-client/src/main/java/com/bx/imclient/annotation/IMListener.java b/im-client/src/main/java/com/bx/imclient/annotation/IMListener.java index 6ea12ce..4f54bf9 100644 --- a/im-client/src/main/java/com/bx/imclient/annotation/IMListener.java +++ b/im-client/src/main/java/com/bx/imclient/annotation/IMListener.java @@ -1,6 +1,6 @@ package com.bx.imclient.annotation; -import com.bx.imcommon.enums.ListenerType; +import com.bx.imcommon.enums.IMListenerType; import org.springframework.stereotype.Component; import java.lang.annotation.ElementType; @@ -13,6 +13,6 @@ import java.lang.annotation.Target; @Component public @interface IMListener { - ListenerType type(); + IMListenerType type(); } diff --git a/im-client/src/main/java/com/bx/imclient/listener/MessageListener.java b/im-client/src/main/java/com/bx/imclient/listener/MessageListener.java index 222ab6e..95ae871 100644 --- a/im-client/src/main/java/com/bx/imclient/listener/MessageListener.java +++ b/im-client/src/main/java/com/bx/imclient/listener/MessageListener.java @@ -1,7 +1,7 @@ package com.bx.imclient.listener; -import com.bx.imcommon.model.im.SendResult; +import com.bx.imcommon.model.SendResult; public interface MessageListener { diff --git a/im-client/src/main/java/com/bx/imclient/listener/MessageListenerMulticaster.java b/im-client/src/main/java/com/bx/imclient/listener/MessageListenerMulticaster.java index 70cdbce..9779574 100644 --- a/im-client/src/main/java/com/bx/imclient/listener/MessageListenerMulticaster.java +++ b/im-client/src/main/java/com/bx/imclient/listener/MessageListenerMulticaster.java @@ -1,9 +1,9 @@ package com.bx.imclient.listener; -import com.bx.imcommon.enums.ListenerType; -import com.bx.imcommon.model.im.SendResult; import com.bx.imclient.annotation.IMListener; +import com.bx.imcommon.enums.IMListenerType; +import com.bx.imcommon.model.SendResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -17,7 +17,7 @@ public class MessageListenerMulticaster { @Autowired(required = false) private List messageListeners = Collections.emptyList(); - public void multicast(ListenerType type, SendResult result){ + public void multicast(IMListenerType type, SendResult result){ for(MessageListener listener:messageListeners){ IMListener annotation = listener.getClass().getAnnotation(IMListener.class); if(annotation.type().equals(type)){ 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 e90cd2e..ab6dd11 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 @@ -1,14 +1,14 @@ package com.bx.imclient.sender; +import com.bx.imclient.listener.MessageListenerMulticaster; import com.bx.imcommon.contant.RedisKey; import com.bx.imcommon.enums.IMCmdType; -import com.bx.imcommon.enums.ListenerType; -import com.bx.imcommon.enums.SendResultType; -import com.bx.imcommon.model.im.GroupMessageInfo; -import com.bx.imcommon.model.im.IMRecvInfo; -import com.bx.imcommon.model.im.PrivateMessageInfo; -import com.bx.imcommon.model.im.SendResult; -import com.bx.imclient.listener.MessageListenerMulticaster; +import com.bx.imcommon.enums.IMListenerType; +import com.bx.imcommon.enums.IMSendStatus; +import com.bx.imcommon.model.GroupMessageInfo; +import com.bx.imcommon.model.IMRecvInfo; +import com.bx.imcommon.model.PrivateMessageInfo; +import com.bx.imcommon.model.SendResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.redis.core.RedisTemplate; @@ -54,9 +54,9 @@ public class IMSender { SendResult result = new SendResult(); result.setMessageInfo(messageInfo); result.setRecvId(recvId); - result.setResult(SendResultType.FAIL); + result.setStatus(IMSendStatus.FAIL); result.setFailReason("用户不在线"); - listenerMulticaster.multicast(ListenerType.PRIVATE_MESSAGE, result); + listenerMulticaster.multicast(IMListenerType.PRIVATE_MESSAGE, result); } } } @@ -103,9 +103,9 @@ public class IMSender { SendResult result = new SendResult(); result.setMessageInfo(messageInfo); result.setRecvId(id); - result.setResult(SendResultType.FAIL); + result.setStatus(IMSendStatus.FAIL); result.setFailReason("用户不在线"); - listenerMulticaster.multicast(ListenerType.GROUP_MESSAGE,result); + listenerMulticaster.multicast(IMListenerType.GROUP_MESSAGE,result); } } } diff --git a/im-client/src/main/java/com/bx/imclient/task/PullSendResultGroupMessageTask.java b/im-client/src/main/java/com/bx/imclient/task/PullSendResultGroupMessageTask.java index eba2978..3de0494 100644 --- a/im-client/src/main/java/com/bx/imclient/task/PullSendResultGroupMessageTask.java +++ b/im-client/src/main/java/com/bx/imclient/task/PullSendResultGroupMessageTask.java @@ -1,9 +1,9 @@ package com.bx.imclient.task; -import com.bx.imcommon.contant.RedisKey; -import com.bx.imcommon.enums.ListenerType; -import com.bx.imcommon.model.im.SendResult; import com.bx.imclient.listener.MessageListenerMulticaster; +import com.bx.imcommon.contant.RedisKey; +import com.bx.imcommon.enums.IMListenerType; +import com.bx.imcommon.model.SendResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.redis.core.RedisTemplate; @@ -26,7 +26,7 @@ public class PullSendResultGroupMessageTask extends AbstractPullMessageTask{ String key = RedisKey.IM_RESULT_GROUP_QUEUE; SendResult result = (SendResult)redisTemplate.opsForList().leftPop(key,10, TimeUnit.SECONDS); if(result != null) { - listenerMulticaster.multicast(ListenerType.GROUP_MESSAGE,result); + listenerMulticaster.multicast(IMListenerType.GROUP_MESSAGE,result); } } diff --git a/im-client/src/main/java/com/bx/imclient/task/PullSendResultPrivateMessageTask.java b/im-client/src/main/java/com/bx/imclient/task/PullSendResultPrivateMessageTask.java index a248765..e634493 100644 --- a/im-client/src/main/java/com/bx/imclient/task/PullSendResultPrivateMessageTask.java +++ b/im-client/src/main/java/com/bx/imclient/task/PullSendResultPrivateMessageTask.java @@ -1,9 +1,9 @@ package com.bx.imclient.task; -import com.bx.imcommon.contant.RedisKey; -import com.bx.imcommon.enums.ListenerType; -import com.bx.imcommon.model.im.SendResult; import com.bx.imclient.listener.MessageListenerMulticaster; +import com.bx.imcommon.contant.RedisKey; +import com.bx.imcommon.enums.IMListenerType; +import com.bx.imcommon.model.SendResult; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -31,7 +31,7 @@ public class PullSendResultPrivateMessageTask extends AbstractPullMessageTask{ String key = RedisKey.IM_RESULT_PRIVATE_QUEUE; SendResult result = (SendResult)redisTemplate.opsForList().leftPop(key,10, TimeUnit.SECONDS); if(result != null) { - listenerMulticaster.multicast(ListenerType.PRIVATE_MESSAGE, result); + listenerMulticaster.multicast(IMListenerType.PRIVATE_MESSAGE, result); } } diff --git a/im-commom/im-commom.iml b/im-commom/im-commom.iml new file mode 100644 index 0000000..1706946 --- /dev/null +++ b/im-commom/im-commom.iml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/im-commom/src/main/java/com/bx/imcommon/enums/ListenerType.java b/im-commom/src/main/java/com/bx/imcommon/enums/IMListenerType.java similarity index 81% rename from im-commom/src/main/java/com/bx/imcommon/enums/ListenerType.java rename to im-commom/src/main/java/com/bx/imcommon/enums/IMListenerType.java index 26b14d7..2a5f118 100644 --- a/im-commom/src/main/java/com/bx/imcommon/enums/ListenerType.java +++ b/im-commom/src/main/java/com/bx/imcommon/enums/IMListenerType.java @@ -1,6 +1,6 @@ package com.bx.imcommon.enums; -public enum ListenerType { +public enum IMListenerType { PRIVATE_MESSAGE(0,"私聊消息"), GROUP_MESSAGE(1,"群聊消息"); @@ -9,7 +9,7 @@ public enum ListenerType { private String desc; - ListenerType(Integer index, String desc) { + IMListenerType(Integer index, String desc) { this.code =index; this.desc=desc; } diff --git a/im-commom/src/main/java/com/bx/imcommon/enums/SendResultType.java b/im-commom/src/main/java/com/bx/imcommon/enums/IMSendStatus.java similarity index 82% rename from im-commom/src/main/java/com/bx/imcommon/enums/SendResultType.java rename to im-commom/src/main/java/com/bx/imcommon/enums/IMSendStatus.java index c1905cf..d64e3f7 100644 --- a/im-commom/src/main/java/com/bx/imcommon/enums/SendResultType.java +++ b/im-commom/src/main/java/com/bx/imcommon/enums/IMSendStatus.java @@ -1,7 +1,7 @@ package com.bx.imcommon.enums; -public enum SendResultType { +public enum IMSendStatus { SUCCESS(0,"发送成功"), FAIL(1,"发送失败"); @@ -10,7 +10,7 @@ public enum SendResultType { private String msg; // 构造方法 - SendResultType(int code, String msg) { + IMSendStatus(int code, String msg) { this.code = code; this.msg = msg; } diff --git a/im-commom/src/main/java/com/bx/imcommon/model/im/GroupMessageInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/GroupMessageInfo.java similarity index 92% rename from im-commom/src/main/java/com/bx/imcommon/model/im/GroupMessageInfo.java rename to im-commom/src/main/java/com/bx/imcommon/model/GroupMessageInfo.java index d4c45af..f128b4a 100644 --- a/im-commom/src/main/java/com/bx/imcommon/model/im/GroupMessageInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/GroupMessageInfo.java @@ -1,4 +1,4 @@ -package com.bx.imcommon.model.im; +package com.bx.imcommon.model; import com.bx.imcommon.serializer.DateToLongSerializer; import com.fasterxml.jackson.databind.annotation.JsonSerialize; diff --git a/im-commom/src/main/java/com/bx/imcommon/model/im/HeartbeatInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/HeartbeatInfo.java similarity index 71% rename from im-commom/src/main/java/com/bx/imcommon/model/im/HeartbeatInfo.java rename to im-commom/src/main/java/com/bx/imcommon/model/HeartbeatInfo.java index 93a75f5..e47bfc5 100644 --- a/im-commom/src/main/java/com/bx/imcommon/model/im/HeartbeatInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/HeartbeatInfo.java @@ -1,4 +1,4 @@ -package com.bx.imcommon.model.im; +package com.bx.imcommon.model; import lombok.Data; diff --git a/im-commom/src/main/java/com/bx/imcommon/model/im/IMRecvInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/IMRecvInfo.java similarity index 82% rename from im-commom/src/main/java/com/bx/imcommon/model/im/IMRecvInfo.java rename to im-commom/src/main/java/com/bx/imcommon/model/IMRecvInfo.java index 95154f3..2e67da3 100644 --- a/im-commom/src/main/java/com/bx/imcommon/model/im/IMRecvInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/IMRecvInfo.java @@ -1,4 +1,4 @@ -package com.bx.imcommon.model.im; +package com.bx.imcommon.model; import lombok.Data; diff --git a/im-commom/src/main/java/com/bx/imcommon/model/im/SendInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/IMSendInfo.java similarity index 58% rename from im-commom/src/main/java/com/bx/imcommon/model/im/SendInfo.java rename to im-commom/src/main/java/com/bx/imcommon/model/IMSendInfo.java index 15f1420..cc77e95 100644 --- a/im-commom/src/main/java/com/bx/imcommon/model/im/SendInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/IMSendInfo.java @@ -1,9 +1,9 @@ -package com.bx.imcommon.model.im; +package com.bx.imcommon.model; import lombok.Data; @Data -public class SendInfo { +public class IMSendInfo { private Integer cmd; private T data; diff --git a/im-commom/src/main/java/com/bx/imcommon/model/im/LoginInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/LoginInfo.java similarity index 70% rename from im-commom/src/main/java/com/bx/imcommon/model/im/LoginInfo.java rename to im-commom/src/main/java/com/bx/imcommon/model/LoginInfo.java index 5d90581..b4eb451 100644 --- a/im-commom/src/main/java/com/bx/imcommon/model/im/LoginInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/LoginInfo.java @@ -1,4 +1,4 @@ -package com.bx.imcommon.model.im; +package com.bx.imcommon.model; import lombok.Data; diff --git a/im-commom/src/main/java/com/bx/imcommon/model/im/PrivateMessageInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/PrivateMessageInfo.java similarity index 92% rename from im-commom/src/main/java/com/bx/imcommon/model/im/PrivateMessageInfo.java rename to im-commom/src/main/java/com/bx/imcommon/model/PrivateMessageInfo.java index 0544ffc..2c82f34 100644 --- a/im-commom/src/main/java/com/bx/imcommon/model/im/PrivateMessageInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/PrivateMessageInfo.java @@ -1,4 +1,4 @@ -package com.bx.imcommon.model.im; +package com.bx.imcommon.model; import com.bx.imcommon.serializer.DateToLongSerializer; import com.fasterxml.jackson.databind.annotation.JsonSerialize; diff --git a/im-commom/src/main/java/com/bx/imcommon/model/im/SendResult.java b/im-commom/src/main/java/com/bx/imcommon/model/SendResult.java similarity index 56% rename from im-commom/src/main/java/com/bx/imcommon/model/im/SendResult.java rename to im-commom/src/main/java/com/bx/imcommon/model/SendResult.java index 9e6722a..16d3ec8 100644 --- a/im-commom/src/main/java/com/bx/imcommon/model/im/SendResult.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/SendResult.java @@ -1,6 +1,6 @@ -package com.bx.imcommon.model.im; +package com.bx.imcommon.model; -import com.bx.imcommon.enums.SendResultType; +import com.bx.imcommon.enums.IMSendStatus; import lombok.Data; @Data @@ -8,7 +8,7 @@ public class SendResult { private Long recvId; - private SendResultType result; + private IMSendStatus status; private String failReason=""; 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 094b04a..48d0665 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 @@ -1,7 +1,7 @@ package com.bx.implatform.controller; -import com.bx.imcommon.model.im.GroupMessageInfo; +import com.bx.imcommon.model.GroupMessageInfo; import com.bx.implatform.result.Result; import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.IGroupMessageService; 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 2801edf..1b9a338 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 @@ -1,7 +1,7 @@ package com.bx.implatform.controller; -import com.bx.imcommon.model.im.PrivateMessageInfo; +import com.bx.imcommon.model.PrivateMessageInfo; import com.bx.implatform.result.Result; import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.IPrivateMessageService; diff --git a/im-commom/src/main/java/com/bx/imcommon/enums/FileType.java b/im-platform/src/main/java/com/bx/implatform/enums/FileType.java similarity index 94% rename from im-commom/src/main/java/com/bx/imcommon/enums/FileType.java rename to im-platform/src/main/java/com/bx/implatform/enums/FileType.java index c0eaa3f..669035d 100644 --- a/im-commom/src/main/java/com/bx/imcommon/enums/FileType.java +++ b/im-platform/src/main/java/com/bx/implatform/enums/FileType.java @@ -1,4 +1,4 @@ -package com.bx.imcommon.enums; +package com.bx.implatform.enums; public enum FileType { diff --git a/im-commom/src/main/java/com/bx/imcommon/enums/MessageStatus.java b/im-platform/src/main/java/com/bx/implatform/enums/MessageStatus.java similarity index 95% rename from im-commom/src/main/java/com/bx/imcommon/enums/MessageStatus.java rename to im-platform/src/main/java/com/bx/implatform/enums/MessageStatus.java index 07663ed..1f0618d 100644 --- a/im-commom/src/main/java/com/bx/imcommon/enums/MessageStatus.java +++ b/im-platform/src/main/java/com/bx/implatform/enums/MessageStatus.java @@ -1,4 +1,4 @@ -package com.bx.imcommon.enums; +package com.bx.implatform.enums; public enum MessageStatus { diff --git a/im-commom/src/main/java/com/bx/imcommon/enums/MessageType.java b/im-platform/src/main/java/com/bx/implatform/enums/MessageType.java similarity index 92% rename from im-commom/src/main/java/com/bx/imcommon/enums/MessageType.java rename to im-platform/src/main/java/com/bx/implatform/enums/MessageType.java index 2d130cb..1dfeb99 100644 --- a/im-commom/src/main/java/com/bx/imcommon/enums/MessageType.java +++ b/im-platform/src/main/java/com/bx/implatform/enums/MessageType.java @@ -1,4 +1,4 @@ -package com.bx.imcommon.enums; +package com.bx.implatform.enums; public enum MessageType { diff --git a/im-platform/src/main/java/com/bx/implatform/listener/GroupMessageListener.java b/im-platform/src/main/java/com/bx/implatform/listener/GroupMessageListener.java index 9377110..3a8a745 100644 --- a/im-platform/src/main/java/com/bx/implatform/listener/GroupMessageListener.java +++ b/im-platform/src/main/java/com/bx/implatform/listener/GroupMessageListener.java @@ -1,20 +1,20 @@ package com.bx.implatform.listener; -import com.bx.imcommon.enums.ListenerType; -import com.bx.imcommon.enums.MessageType; -import com.bx.imcommon.enums.SendResultType; -import com.bx.imcommon.model.im.GroupMessageInfo; -import com.bx.imcommon.model.im.SendResult; import com.bx.imclient.annotation.IMListener; import com.bx.imclient.listener.MessageListener; +import com.bx.imcommon.enums.IMListenerType; +import com.bx.imcommon.enums.IMSendStatus; +import com.bx.imcommon.model.GroupMessageInfo; +import com.bx.imcommon.model.SendResult; import com.bx.implatform.contant.RedisKey; +import com.bx.implatform.enums.MessageType; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; @Slf4j -@IMListener(type = ListenerType.GROUP_MESSAGE) +@IMListener(type = IMListenerType.GROUP_MESSAGE) public class GroupMessageListener implements MessageListener { @Autowired @@ -29,7 +29,7 @@ public class GroupMessageListener implements MessageListener { } // 保存该用户已拉取的最大消息id - if(result.getResult().equals(SendResultType.SUCCESS)) { + if(result.getStatus().equals(IMSendStatus.SUCCESS)) { String key = RedisKey.IM_GROUP_READED_POSITION + messageInfo.getGroupId() + ":" + result.getRecvId(); redisTemplate.opsForValue().set(key, messageInfo.getId()); } diff --git a/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java b/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java index 5e5b5a4..f23e2ab 100644 --- a/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java +++ b/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java @@ -1,22 +1,22 @@ package com.bx.implatform.listener; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.bx.imcommon.enums.ListenerType; -import com.bx.imcommon.enums.MessageStatus; -import com.bx.imcommon.enums.MessageType; -import com.bx.imcommon.enums.SendResultType; -import com.bx.imcommon.model.im.PrivateMessageInfo; -import com.bx.imcommon.model.im.SendResult; import com.bx.imclient.annotation.IMListener; import com.bx.imclient.listener.MessageListener; +import com.bx.imcommon.enums.IMListenerType; +import com.bx.imcommon.enums.IMSendStatus; +import com.bx.imcommon.model.PrivateMessageInfo; +import com.bx.imcommon.model.SendResult; import com.bx.implatform.entity.PrivateMessage; +import com.bx.implatform.enums.MessageStatus; +import com.bx.implatform.enums.MessageType; import com.bx.implatform.service.IPrivateMessageService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @Slf4j -@IMListener(type = ListenerType.PRIVATE_MESSAGE) +@IMListener(type = IMListenerType.PRIVATE_MESSAGE) public class PrivateMessageListener implements MessageListener { @Autowired @@ -30,7 +30,7 @@ public class PrivateMessageListener implements MessageListener { return; } // 更新消息状态 - if(result.getResult().equals(SendResultType.SUCCESS)){ + if(result.getStatus().equals(IMSendStatus.SUCCESS)){ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.lambda().eq(PrivateMessage::getId,messageInfo.getId()) .eq(PrivateMessage::getStatus, MessageStatus.UNREAD.getCode()) diff --git a/im-platform/src/main/java/com/bx/implatform/service/IGroupMessageService.java b/im-platform/src/main/java/com/bx/implatform/service/IGroupMessageService.java index dd891c9..78a07ac 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/IGroupMessageService.java +++ b/im-platform/src/main/java/com/bx/implatform/service/IGroupMessageService.java @@ -1,7 +1,7 @@ package com.bx.implatform.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.bx.imcommon.model.im.GroupMessageInfo; +import com.bx.imcommon.model.GroupMessageInfo; import com.bx.implatform.entity.GroupMessage; import com.bx.implatform.vo.GroupMessageVO; diff --git a/im-platform/src/main/java/com/bx/implatform/service/IPrivateMessageService.java b/im-platform/src/main/java/com/bx/implatform/service/IPrivateMessageService.java index ac53af8..be629d2 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/IPrivateMessageService.java +++ b/im-platform/src/main/java/com/bx/implatform/service/IPrivateMessageService.java @@ -1,7 +1,7 @@ package com.bx.implatform.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.bx.imcommon.model.im.PrivateMessageInfo; +import com.bx.imcommon.model.PrivateMessageInfo; import com.bx.implatform.entity.PrivateMessage; import com.bx.implatform.vo.PrivateMessageVO; 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 3a02fe9..e5dab1d 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 @@ -2,15 +2,15 @@ package com.bx.implatform.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.bx.imcommon.contant.Constant; -import com.bx.imcommon.enums.MessageStatus; -import com.bx.imcommon.enums.MessageType; -import com.bx.imcommon.model.im.GroupMessageInfo; import com.bx.imclient.IMClient; +import com.bx.imcommon.contant.Constant; +import com.bx.imcommon.model.GroupMessageInfo; import com.bx.implatform.contant.RedisKey; import com.bx.implatform.entity.Group; import com.bx.implatform.entity.GroupMember; import com.bx.implatform.entity.GroupMessage; +import com.bx.implatform.enums.MessageStatus; +import com.bx.implatform.enums.MessageType; import com.bx.implatform.enums.ResultCode; import com.bx.implatform.exception.GlobalException; import com.bx.implatform.mapper.GroupMessageMapper; 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 f98e7bd..27d9a3a 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 @@ -2,13 +2,13 @@ package com.bx.implatform.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bx.imclient.IMClient; import com.bx.imcommon.contant.Constant; import com.bx.imcommon.contant.RedisKey; -import com.bx.imcommon.enums.MessageStatus; -import com.bx.imcommon.enums.MessageType; -import com.bx.imcommon.model.im.PrivateMessageInfo; -import com.bx.imclient.IMClient; +import com.bx.imcommon.model.PrivateMessageInfo; import com.bx.implatform.entity.PrivateMessage; +import com.bx.implatform.enums.MessageStatus; +import com.bx.implatform.enums.MessageType; import com.bx.implatform.enums.ResultCode; import com.bx.implatform.exception.GlobalException; import com.bx.implatform.mapper.PrivateMessageMapper; diff --git a/im-platform/src/main/java/com/bx/implatform/service/thirdparty/FileService.java b/im-platform/src/main/java/com/bx/implatform/service/thirdparty/FileService.java index f38b965..0a54257 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/thirdparty/FileService.java +++ b/im-platform/src/main/java/com/bx/implatform/service/thirdparty/FileService.java @@ -1,7 +1,7 @@ package com.bx.implatform.service.thirdparty; -import com.bx.imcommon.enums.FileType; import com.bx.implatform.contant.Constant; +import com.bx.implatform.enums.FileType; import com.bx.implatform.enums.ResultCode; import com.bx.implatform.exception.GlobalException; import com.bx.implatform.session.SessionContext; diff --git a/im-server/src/main/java/com/bx/imserver/task/PullUnreadGroupMessageTask.java b/im-server/src/main/java/com/bx/imserver/task/PullUnreadGroupMessageTask.java index d94af93..64107fe 100644 --- a/im-server/src/main/java/com/bx/imserver/task/PullUnreadGroupMessageTask.java +++ b/im-server/src/main/java/com/bx/imserver/task/PullUnreadGroupMessageTask.java @@ -2,8 +2,8 @@ package com.bx.imserver.task; import com.bx.imcommon.contant.RedisKey; import com.bx.imcommon.enums.IMCmdType; -import com.bx.imcommon.model.im.GroupMessageInfo; -import com.bx.imcommon.model.im.IMRecvInfo; +import com.bx.imcommon.model.GroupMessageInfo; +import com.bx.imcommon.model.IMRecvInfo; import com.bx.imserver.websocket.WebsocketServer; import com.bx.imserver.websocket.processor.MessageProcessor; import com.bx.imserver.websocket.processor.ProcessorFactory; diff --git a/im-server/src/main/java/com/bx/imserver/task/PullUnreadPrivateMessageTask.java b/im-server/src/main/java/com/bx/imserver/task/PullUnreadPrivateMessageTask.java index b95d47c..39ea6e9 100644 --- a/im-server/src/main/java/com/bx/imserver/task/PullUnreadPrivateMessageTask.java +++ b/im-server/src/main/java/com/bx/imserver/task/PullUnreadPrivateMessageTask.java @@ -3,8 +3,8 @@ package com.bx.imserver.task; import com.bx.imcommon.contant.RedisKey; import com.bx.imcommon.enums.IMCmdType; -import com.bx.imcommon.model.im.IMRecvInfo; -import com.bx.imcommon.model.im.PrivateMessageInfo; +import com.bx.imcommon.model.IMRecvInfo; +import com.bx.imcommon.model.PrivateMessageInfo; import com.bx.imserver.websocket.WebsocketServer; import com.bx.imserver.websocket.processor.MessageProcessor; import com.bx.imserver.websocket.processor.ProcessorFactory; diff --git a/im-commom/src/main/java/com/bx/imcommon/util/SpringContextHolder.java b/im-server/src/main/java/com/bx/imserver/util/SpringContextHolder.java similarity index 97% rename from im-commom/src/main/java/com/bx/imcommon/util/SpringContextHolder.java rename to im-server/src/main/java/com/bx/imserver/util/SpringContextHolder.java index 1511c2b..25caf30 100644 --- a/im-commom/src/main/java/com/bx/imcommon/util/SpringContextHolder.java +++ b/im-server/src/main/java/com/bx/imserver/util/SpringContextHolder.java @@ -1,4 +1,4 @@ -package com.bx.imcommon.util; +package com.bx.imserver.util; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; diff --git a/im-server/src/main/java/com/bx/imserver/websocket/WebSocketHandler.java b/im-server/src/main/java/com/bx/imserver/websocket/WebSocketHandler.java index 41fea89..3622deb 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/WebSocketHandler.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/WebSocketHandler.java @@ -2,8 +2,8 @@ package com.bx.imserver.websocket; import com.bx.imcommon.contant.RedisKey; import com.bx.imcommon.enums.IMCmdType; -import com.bx.imcommon.model.im.SendInfo; -import com.bx.imcommon.util.SpringContextHolder; +import com.bx.imcommon.model.IMSendInfo; +import com.bx.imserver.util.SpringContextHolder; import com.bx.imserver.websocket.processor.MessageProcessor; import com.bx.imserver.websocket.processor.ProcessorFactory; import io.netty.channel.ChannelHandlerContext; @@ -21,7 +21,7 @@ import org.springframework.data.redis.core.RedisTemplate; * 浏览器连接状态监控 */ @Slf4j -public class WebSocketHandler extends SimpleChannelInboundHandler { +public class WebSocketHandler extends SimpleChannelInboundHandler { /** * 读取到消息后进行处理 @@ -31,7 +31,7 @@ public class WebSocketHandler extends SimpleChannelInboundHandler { * @throws Exception */ @Override - protected void channelRead0(ChannelHandlerContext ctx, SendInfo sendInfo) throws Exception { + protected void channelRead0(ChannelHandlerContext ctx, IMSendInfo sendInfo) throws Exception { // 创建处理器进行处理 MessageProcessor processor = ProcessorFactory.createProcessor(IMCmdType.fromCode(sendInfo.getCmd())); processor.process(ctx,processor.transForm(sendInfo.getData())); diff --git a/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolDecoder.java b/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolDecoder.java index f8e03fe..7cb69a3 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolDecoder.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolDecoder.java @@ -1,6 +1,6 @@ package com.bx.imserver.websocket.endecode; -import com.bx.imcommon.model.im.SendInfo; +import com.bx.imcommon.model.IMSendInfo; import com.fasterxml.jackson.databind.ObjectMapper; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToMessageDecoder; @@ -13,7 +13,7 @@ public class MessageProtocolDecoder extends MessageToMessageDecoder list) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); - SendInfo sendInfo = objectMapper.readValue(textWebSocketFrame.text(), SendInfo.class); + IMSendInfo sendInfo = objectMapper.readValue(textWebSocketFrame.text(), IMSendInfo.class); list.add(sendInfo); } } diff --git a/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolEncoder.java b/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolEncoder.java index b37b882..6a30bac 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolEncoder.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolEncoder.java @@ -1,6 +1,6 @@ package com.bx.imserver.websocket.endecode; -import com.bx.imcommon.model.im.SendInfo; +import com.bx.imcommon.model.IMSendInfo; import com.fasterxml.jackson.databind.ObjectMapper; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToMessageEncoder; @@ -8,10 +8,10 @@ import io.netty.handler.codec.http.websocketx.TextWebSocketFrame; import java.util.List; -public class MessageProtocolEncoder extends MessageToMessageEncoder { +public class MessageProtocolEncoder extends MessageToMessageEncoder { @Override - protected void encode(ChannelHandlerContext channelHandlerContext, SendInfo sendInfo, List list) throws Exception { + protected void encode(ChannelHandlerContext channelHandlerContext, IMSendInfo sendInfo, List list) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); String text = objectMapper.writeValueAsString(sendInfo); diff --git a/im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java b/im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java index 66e848f..473b506 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java @@ -2,11 +2,11 @@ package com.bx.imserver.websocket.processor; import com.bx.imcommon.contant.RedisKey; import com.bx.imcommon.enums.IMCmdType; -import com.bx.imcommon.enums.SendResultType; -import com.bx.imcommon.model.im.GroupMessageInfo; -import com.bx.imcommon.model.im.IMRecvInfo; -import com.bx.imcommon.model.im.SendInfo; -import com.bx.imcommon.model.im.SendResult; +import com.bx.imcommon.enums.IMSendStatus; +import com.bx.imcommon.model.GroupMessageInfo; +import com.bx.imcommon.model.IMRecvInfo; +import com.bx.imcommon.model.IMSendInfo; +import com.bx.imcommon.model.SendResult; import com.bx.imserver.websocket.WebsocketChannelCtxHolder; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; @@ -37,7 +37,7 @@ public class GroupMessageProcessor extends MessageProcessor { @Override public void process(ChannelHandlerContext ctx, HeartbeatInfo beatInfo) { // 响应ws - SendInfo sendInfo = new SendInfo(); + IMSendInfo sendInfo = new IMSendInfo(); sendInfo.setCmd(IMCmdType.HEART_BEAT.getCode()); ctx.channel().writeAndFlush(sendInfo); diff --git a/im-server/src/main/java/com/bx/imserver/websocket/processor/LoginProcessor.java b/im-server/src/main/java/com/bx/imserver/websocket/processor/LoginProcessor.java index 690d42b..ba7656a 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/processor/LoginProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/processor/LoginProcessor.java @@ -4,8 +4,8 @@ import cn.hutool.core.bean.BeanUtil; import com.bx.imcommon.contant.Constant; import com.bx.imcommon.contant.RedisKey; import com.bx.imcommon.enums.IMCmdType; -import com.bx.imcommon.model.im.LoginInfo; -import com.bx.imcommon.model.im.SendInfo; +import com.bx.imcommon.model.IMSendInfo; +import com.bx.imcommon.model.LoginInfo; import com.bx.imserver.websocket.WebsocketChannelCtxHolder; import com.bx.imserver.websocket.WebsocketServer; import io.netty.channel.ChannelHandlerContext; @@ -35,7 +35,7 @@ public class LoginProcessor extends MessageProcessor { ChannelHandlerContext context = WebsocketChannelCtxHolder.getChannelCtx(loginInfo.getUserId()); if(context != null){ // 不允许多地登录,强制下线 - SendInfo sendInfo = new SendInfo(); + IMSendInfo sendInfo = new IMSendInfo(); sendInfo.setCmd(IMCmdType.FORCE_LOGUT.getCode()); context.channel().writeAndFlush(sendInfo); } @@ -51,7 +51,7 @@ public class LoginProcessor extends MessageProcessor { String key = RedisKey.IM_USER_SERVER_ID+loginInfo.getUserId(); redisTemplate.opsForValue().set(key, WSServer.getServerId(), Constant.ONLINE_TIMEOUT_SECOND, TimeUnit.SECONDS); // 响应ws - SendInfo sendInfo = new SendInfo(); + IMSendInfo sendInfo = new IMSendInfo(); sendInfo.setCmd(IMCmdType.LOGIN.getCode()); ctx.channel().writeAndFlush(sendInfo); } diff --git a/im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java b/im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java index a7fa075..8c9fd61 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java @@ -2,11 +2,11 @@ package com.bx.imserver.websocket.processor; import com.bx.imcommon.contant.RedisKey; import com.bx.imcommon.enums.IMCmdType; -import com.bx.imcommon.enums.SendResultType; -import com.bx.imcommon.model.im.IMRecvInfo; -import com.bx.imcommon.model.im.PrivateMessageInfo; -import com.bx.imcommon.model.im.SendInfo; -import com.bx.imcommon.model.im.SendResult; +import com.bx.imcommon.enums.IMSendStatus; +import com.bx.imcommon.model.IMRecvInfo; +import com.bx.imcommon.model.IMSendInfo; +import com.bx.imcommon.model.PrivateMessageInfo; +import com.bx.imcommon.model.SendResult; import com.bx.imserver.websocket.WebsocketChannelCtxHolder; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; @@ -30,7 +30,7 @@ public class PrivateMessageProcessor extends MessageProcessor Date: Sat, 19 Nov 2022 21:14:18 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/bx/imclient/IMClient.java | 21 ++++++++++++++----- .../listener/MessageListenerMulticaster.java | 3 +-- .../com/bx/imcommon/enums/IMListenerType.java | 6 +++--- .../bx/imcommon/model/GroupMessageInfo.java | 18 ++++++++++++++++ .../com/bx/imcommon/model/IMRecvInfo.java | 9 ++++++++ .../com/bx/imcommon/model/IMSendInfo.java | 7 +++++++ .../bx/imcommon/model/PrivateMessageInfo.java | 18 ++++++++++++++++ .../com/bx/imcommon/model/SendResult.java | 12 +++++++++++ .../java/com/bx/imserver/IMServerApp.java | 2 +- .../processor/GroupMessageProcessor.java | 6 +++--- .../processor/HeartbeatProcessor.java | 4 ++-- .../processor/LoginProcessor.java | 10 ++++----- .../processor/MessageProcessor.java | 2 +- .../processor/PrivateMessageProcessor.java | 6 +++--- .../processor/ProcessorFactory.java | 2 +- .../task/AbstractPullMessageTask.java | 2 +- .../task/PullUnreadGroupMessageTask.java | 6 +++--- .../task/PullUnreadPrivateMessageTask.java | 6 +++--- .../UserChannelCtxHolder.java} | 4 ++-- .../{websocket => ws}/WebSocketHandler.java | 11 +++++----- .../{websocket => ws}/WebsocketServer.java | 6 +++--- .../endecode/MessageProtocolDecoder.java | 2 +- .../endecode/MessageProtocolEncoder.java | 2 +- im-ui/src/api/wssocket.js | 12 +++++------ im-ui/src/view/Home.vue | 2 +- 25 files changed, 126 insertions(+), 53 deletions(-) rename im-server/src/main/java/com/bx/imserver/{websocket => }/processor/GroupMessageProcessor.java (94%) rename im-server/src/main/java/com/bx/imserver/{websocket => }/processor/HeartbeatProcessor.java (95%) rename im-server/src/main/java/com/bx/imserver/{websocket => }/processor/LoginProcessor.java (86%) rename im-server/src/main/java/com/bx/imserver/{websocket => }/processor/MessageProcessor.java (85%) rename im-server/src/main/java/com/bx/imserver/{websocket => }/processor/PrivateMessageProcessor.java (93%) rename im-server/src/main/java/com/bx/imserver/{websocket => }/processor/ProcessorFactory.java (95%) rename im-server/src/main/java/com/bx/imserver/{websocket/WebsocketChannelCtxHolder.java => util/UserChannelCtxHolder.java} (90%) rename im-server/src/main/java/com/bx/imserver/{websocket => ws}/WebSocketHandler.java (90%) rename im-server/src/main/java/com/bx/imserver/{websocket => ws}/WebsocketServer.java (96%) rename im-server/src/main/java/com/bx/imserver/{websocket => ws}/endecode/MessageProtocolDecoder.java (94%) rename im-server/src/main/java/com/bx/imserver/{websocket => ws}/endecode/MessageProtocolEncoder.java (94%) diff --git a/im-client/src/main/java/com/bx/imclient/IMClient.java b/im-client/src/main/java/com/bx/imclient/IMClient.java index 4891023..68b6b74 100644 --- a/im-client/src/main/java/com/bx/imclient/IMClient.java +++ b/im-client/src/main/java/com/bx/imclient/IMClient.java @@ -14,16 +14,27 @@ public class IMClient { @Autowired private MessageListenerMulticaster listenerMulticaster; - @Autowired private IMSender imSender; - public void sendPrivateMessage(Long userId, PrivateMessageInfo... messageInfo){ - imSender.sendPrivateMessage(userId,messageInfo); + /** + * 发送私聊消息 + * + * @param recvId 接收用户id + * @param messageInfo 消息体,将转成json发送到客户端 + */ + public void sendPrivateMessage(Long recvId, PrivateMessageInfo... messageInfo){ + imSender.sendPrivateMessage(recvId,messageInfo); } - public void sendGroupMessage(List userTokens, GroupMessageInfo... messageInfo){ - imSender.sendGroupMessage(userTokens,messageInfo); + /** + * 发送群聊消息 + * + * @param recvIds 群聊用户id列表 + * @param messageInfo 消息体,将转成json发送到客户端 + */ + public void sendGroupMessage(List recvIds, GroupMessageInfo... messageInfo){ + imSender.sendGroupMessage(recvIds,messageInfo); } diff --git a/im-client/src/main/java/com/bx/imclient/listener/MessageListenerMulticaster.java b/im-client/src/main/java/com/bx/imclient/listener/MessageListenerMulticaster.java index 9779574..8d91a3c 100644 --- a/im-client/src/main/java/com/bx/imclient/listener/MessageListenerMulticaster.java +++ b/im-client/src/main/java/com/bx/imclient/listener/MessageListenerMulticaster.java @@ -13,14 +13,13 @@ import java.util.List; @Component public class MessageListenerMulticaster { - @Autowired(required = false) private List messageListeners = Collections.emptyList(); public void multicast(IMListenerType type, SendResult result){ for(MessageListener listener:messageListeners){ IMListener annotation = listener.getClass().getAnnotation(IMListener.class); - if(annotation.type().equals(type)){ + if(annotation!=null && (annotation.type().equals(IMListenerType.ALL) || annotation.type().equals(type))){ listener.process(result); } } diff --git a/im-commom/src/main/java/com/bx/imcommon/enums/IMListenerType.java b/im-commom/src/main/java/com/bx/imcommon/enums/IMListenerType.java index 2a5f118..d6da555 100644 --- a/im-commom/src/main/java/com/bx/imcommon/enums/IMListenerType.java +++ b/im-commom/src/main/java/com/bx/imcommon/enums/IMListenerType.java @@ -1,9 +1,9 @@ package com.bx.imcommon.enums; public enum IMListenerType { - - PRIVATE_MESSAGE(0,"私聊消息"), - GROUP_MESSAGE(1,"群聊消息"); + ALL(0,"全部消息"), + PRIVATE_MESSAGE(1,"私聊消息"), + GROUP_MESSAGE(2,"群聊消息"); private Integer code; diff --git a/im-commom/src/main/java/com/bx/imcommon/model/GroupMessageInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/GroupMessageInfo.java index f128b4a..7706868 100644 --- a/im-commom/src/main/java/com/bx/imcommon/model/GroupMessageInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/GroupMessageInfo.java @@ -9,16 +9,34 @@ import java.util.Date; @Data public class GroupMessageInfo { + /* + * 消息id + */ private Long id; + /* + * 群聊id + */ private Long groupId; + /* + * 发送者id + */ private Long sendId; + /* + * 消息内容 + */ private String content; + /* + * 消息内容类型 具体枚举值由应用层定义 + */ private Integer type; + /** + * 发送时间 + */ @JsonSerialize(using = DateToLongSerializer.class) private Date sendTime; } diff --git a/im-commom/src/main/java/com/bx/imcommon/model/IMRecvInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/IMRecvInfo.java index 2e67da3..289e2fc 100644 --- a/im-commom/src/main/java/com/bx/imcommon/model/IMRecvInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/IMRecvInfo.java @@ -7,10 +7,19 @@ import java.util.List; @Data public class IMRecvInfo { + /* + * 命令类型 + */ private Integer cmd; + /* + * 接收者id列表 + */ private List recvIds; + /* + * 推送消息体 + */ private T data; } diff --git a/im-commom/src/main/java/com/bx/imcommon/model/IMSendInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/IMSendInfo.java index cc77e95..769851b 100644 --- a/im-commom/src/main/java/com/bx/imcommon/model/IMSendInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/IMSendInfo.java @@ -5,7 +5,14 @@ import lombok.Data; @Data public class IMSendInfo { + /* + * 命令 + */ private Integer cmd; + + /* + * 推送消息体 + */ private T data; } diff --git a/im-commom/src/main/java/com/bx/imcommon/model/PrivateMessageInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/PrivateMessageInfo.java index 2c82f34..be5c753 100644 --- a/im-commom/src/main/java/com/bx/imcommon/model/PrivateMessageInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/PrivateMessageInfo.java @@ -9,16 +9,34 @@ import java.util.Date; @Data public class PrivateMessageInfo { + /* + * 消息id + */ private long id; + /* + * 发送者id + */ private Long sendId; + /* + * 接收者id + */ private Long recvId; + /* + * 发送内容 + */ private String content; + /* + * 消息内容类型 具体枚举值由应用层定义 + */ private Integer type; + /** + * 发送时间 + */ @JsonSerialize(using = DateToLongSerializer.class) private Date sendTime; } diff --git a/im-commom/src/main/java/com/bx/imcommon/model/SendResult.java b/im-commom/src/main/java/com/bx/imcommon/model/SendResult.java index 16d3ec8..66ea316 100644 --- a/im-commom/src/main/java/com/bx/imcommon/model/SendResult.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/SendResult.java @@ -6,12 +6,24 @@ import lombok.Data; @Data public class SendResult { + /* + * 接收者id + */ private Long recvId; + /* + * 发送状态 + */ private IMSendStatus status; + /* + * 失败原因 + */ private String failReason=""; + /* + * 消息体(透传) + */ private T messageInfo; } diff --git a/im-server/src/main/java/com/bx/imserver/IMServerApp.java b/im-server/src/main/java/com/bx/imserver/IMServerApp.java index 3cd2947..236d5a8 100644 --- a/im-server/src/main/java/com/bx/imserver/IMServerApp.java +++ b/im-server/src/main/java/com/bx/imserver/IMServerApp.java @@ -1,7 +1,7 @@ package com.bx.imserver; -import com.bx.imserver.websocket.WebsocketServer; +import com.bx.imserver.ws.WebsocketServer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; diff --git a/im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java b/im-server/src/main/java/com/bx/imserver/processor/GroupMessageProcessor.java similarity index 94% rename from im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java rename to im-server/src/main/java/com/bx/imserver/processor/GroupMessageProcessor.java index 473b506..ee1f517 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/processor/GroupMessageProcessor.java @@ -1,4 +1,4 @@ -package com.bx.imserver.websocket.processor; +package com.bx.imserver.processor; import com.bx.imcommon.contant.RedisKey; import com.bx.imcommon.enums.IMCmdType; @@ -7,7 +7,7 @@ import com.bx.imcommon.model.GroupMessageInfo; import com.bx.imcommon.model.IMRecvInfo; import com.bx.imcommon.model.IMSendInfo; import com.bx.imcommon.model.SendResult; -import com.bx.imserver.websocket.WebsocketChannelCtxHolder; +import com.bx.imserver.util.UserChannelCtxHolder; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -32,7 +32,7 @@ public class GroupMessageProcessor extends MessageProcessor { @Override synchronized public void process(ChannelHandlerContext ctx, LoginInfo loginInfo) { log.info("用户登录,userId:{}",loginInfo.getUserId()); - ChannelHandlerContext context = WebsocketChannelCtxHolder.getChannelCtx(loginInfo.getUserId()); + ChannelHandlerContext context = UserChannelCtxHolder.getChannelCtx(loginInfo.getUserId()); if(context != null){ // 不允许多地登录,强制下线 IMSendInfo sendInfo = new IMSendInfo(); @@ -40,7 +40,7 @@ public class LoginProcessor extends MessageProcessor { context.channel().writeAndFlush(sendInfo); } // 绑定用户和channel - WebsocketChannelCtxHolder.addChannelCtx(loginInfo.getUserId(),ctx); + UserChannelCtxHolder.addChannelCtx(loginInfo.getUserId(),ctx); // 设置用户id属性 AttributeKey attr = AttributeKey.valueOf("USER_ID"); ctx.channel().attr(attr).set(loginInfo.getUserId()); diff --git a/im-server/src/main/java/com/bx/imserver/websocket/processor/MessageProcessor.java b/im-server/src/main/java/com/bx/imserver/processor/MessageProcessor.java similarity index 85% rename from im-server/src/main/java/com/bx/imserver/websocket/processor/MessageProcessor.java rename to im-server/src/main/java/com/bx/imserver/processor/MessageProcessor.java index 9b156a9..a5ebc5e 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/processor/MessageProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/processor/MessageProcessor.java @@ -1,4 +1,4 @@ -package com.bx.imserver.websocket.processor; +package com.bx.imserver.processor; import io.netty.channel.ChannelHandlerContext; diff --git a/im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java b/im-server/src/main/java/com/bx/imserver/processor/PrivateMessageProcessor.java similarity index 93% rename from im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java rename to im-server/src/main/java/com/bx/imserver/processor/PrivateMessageProcessor.java index 8c9fd61..a977f0d 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/processor/PrivateMessageProcessor.java @@ -1,4 +1,4 @@ -package com.bx.imserver.websocket.processor; +package com.bx.imserver.processor; import com.bx.imcommon.contant.RedisKey; import com.bx.imcommon.enums.IMCmdType; @@ -7,7 +7,7 @@ import com.bx.imcommon.model.IMRecvInfo; import com.bx.imcommon.model.IMSendInfo; import com.bx.imcommon.model.PrivateMessageInfo; import com.bx.imcommon.model.SendResult; -import com.bx.imserver.websocket.WebsocketChannelCtxHolder; +import com.bx.imserver.util.UserChannelCtxHolder; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -27,7 +27,7 @@ public class PrivateMessageProcessor extends MessageProcessor diff --git a/im-server/src/main/java/com/bx/imserver/websocket/WebSocketHandler.java b/im-server/src/main/java/com/bx/imserver/ws/WebSocketHandler.java similarity index 90% rename from im-server/src/main/java/com/bx/imserver/websocket/WebSocketHandler.java rename to im-server/src/main/java/com/bx/imserver/ws/WebSocketHandler.java index 3622deb..9d76477 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/WebSocketHandler.java +++ b/im-server/src/main/java/com/bx/imserver/ws/WebSocketHandler.java @@ -1,11 +1,12 @@ -package com.bx.imserver.websocket; +package com.bx.imserver.ws; import com.bx.imcommon.contant.RedisKey; import com.bx.imcommon.enums.IMCmdType; import com.bx.imcommon.model.IMSendInfo; +import com.bx.imserver.processor.MessageProcessor; +import com.bx.imserver.processor.ProcessorFactory; import com.bx.imserver.util.SpringContextHolder; -import com.bx.imserver.websocket.processor.MessageProcessor; -import com.bx.imserver.websocket.processor.ProcessorFactory; +import com.bx.imserver.util.UserChannelCtxHolder; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.handler.timeout.IdleState; @@ -66,11 +67,11 @@ public class WebSocketHandler extends SimpleChannelInboundHandler { public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { AttributeKey attr = AttributeKey.valueOf("USER_ID"); Long userId = ctx.channel().attr(attr).get(); - ChannelHandlerContext context = WebsocketChannelCtxHolder.getChannelCtx(userId); + ChannelHandlerContext context = UserChannelCtxHolder.getChannelCtx(userId); // 判断一下,避免异地登录导致的误删 if(context != null && ctx.channel().id().equals(context.channel().id())){ // 移除channel - WebsocketChannelCtxHolder.removeChannelCtx(userId); + UserChannelCtxHolder.removeChannelCtx(userId); // 用户下线 RedisTemplate redisTemplate = SpringContextHolder.getBean("redisTemplate"); String key = RedisKey.IM_USER_SERVER_ID + userId; diff --git a/im-server/src/main/java/com/bx/imserver/websocket/WebsocketServer.java b/im-server/src/main/java/com/bx/imserver/ws/WebsocketServer.java similarity index 96% rename from im-server/src/main/java/com/bx/imserver/websocket/WebsocketServer.java rename to im-server/src/main/java/com/bx/imserver/ws/WebsocketServer.java index 4e22237..b51d33d 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/WebsocketServer.java +++ b/im-server/src/main/java/com/bx/imserver/ws/WebsocketServer.java @@ -1,8 +1,8 @@ -package com.bx.imserver.websocket; +package com.bx.imserver.ws; import com.bx.imcommon.contant.RedisKey; -import com.bx.imserver.websocket.endecode.MessageProtocolDecoder; -import com.bx.imserver.websocket.endecode.MessageProtocolEncoder; +import com.bx.imserver.ws.endecode.MessageProtocolDecoder; +import com.bx.imserver.ws.endecode.MessageProtocolEncoder; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGroup; diff --git a/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolDecoder.java b/im-server/src/main/java/com/bx/imserver/ws/endecode/MessageProtocolDecoder.java similarity index 94% rename from im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolDecoder.java rename to im-server/src/main/java/com/bx/imserver/ws/endecode/MessageProtocolDecoder.java index 7cb69a3..0ed8342 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolDecoder.java +++ b/im-server/src/main/java/com/bx/imserver/ws/endecode/MessageProtocolDecoder.java @@ -1,4 +1,4 @@ -package com.bx.imserver.websocket.endecode; +package com.bx.imserver.ws.endecode; import com.bx.imcommon.model.IMSendInfo; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolEncoder.java b/im-server/src/main/java/com/bx/imserver/ws/endecode/MessageProtocolEncoder.java similarity index 94% rename from im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolEncoder.java rename to im-server/src/main/java/com/bx/imserver/ws/endecode/MessageProtocolEncoder.java index 6a30bac..a99946b 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolEncoder.java +++ b/im-server/src/main/java/com/bx/imserver/ws/endecode/MessageProtocolEncoder.java @@ -1,4 +1,4 @@ -package com.bx.imserver.websocket.endecode; +package com.bx.imserver.ws.endecode; import com.bx.imcommon.model.IMSendInfo; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/im-ui/src/api/wssocket.js b/im-ui/src/api/wssocket.js index b365ef6..0bf7300 100644 --- a/im-ui/src/api/wssocket.js +++ b/im-ui/src/api/wssocket.js @@ -2,14 +2,14 @@ var websock = null; let rec; //断线重连后,延迟5秒重新创建WebSocket连接 rec用来存储延迟请求的代码 let isConnect = false; //连接标识 避免重复连接 let wsurl = ""; -let $store = null; +let userId = null; let messageCallBack = null; let openCallBack = null; let hasLogin = false; -let createWebSocket = (url, store) => { - $store = store; +let createWebSocket = (url, id) => { wsurl = url; + userId = id; initWebSocket(); }; @@ -45,7 +45,7 @@ let initWebSocket = () => { // 发送登录命令 let loginInfo = { cmd: 0, - data: {userId: $store.state.userStore.userInfo.id} + data: {userId: userId} }; websock.send(JSON.stringify(loginInfo)); @@ -88,7 +88,7 @@ var heartCheck = { let heartBeat = { cmd: 1, data: { - userId: $store.state.userStore.userInfo.id + userId: userId } }; websock.send(JSON.stringify(heartBeat)) @@ -139,8 +139,6 @@ function onopen(callback) { } - - // 将方法暴露出去 export { createWebSocket, diff --git a/im-ui/src/view/Home.vue b/im-ui/src/view/Home.vue index f50ab7f..4bc2a62 100644 --- a/im-ui/src/view/Home.vue +++ b/im-ui/src/view/Home.vue @@ -63,7 +63,7 @@ init(userInfo) { this.$store.commit("setUserInfo", userInfo); this.$store.commit("initStore"); - this.$wsApi.createWebSocket(process.env.VUE_APP_WS_URL, this.$store); + this.$wsApi.createWebSocket(process.env.VUE_APP_WS_URL, userInfo.id); this.$wsApi.onopen(() => { this.pullUnreadMessage(); }); From a9f05237fb640945e2dbcd5c569591fda7d84680 Mon Sep 17 00:00:00 2001 From: "xie.bx" Date: Sat, 19 Nov 2022 21:49:36 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/bx/imclient/sender/IMSender.java | 4 +- im-commom/im-commom.iml | 37 ------------------- .../java/com/bx/imcommon/enums/IMCmdType.java | 6 ++- .../com/bx/imcommon/enums/IMListenerType.java | 9 +++-- .../com/bx/imcommon/enums/IMSendStatus.java | 18 +++++---- .../com/bx/implatform/enums/FileType.java | 4 +- .../bx/implatform/enums/MessageStatus.java | 4 +- .../com/bx/implatform/enums/MessageType.java | 4 +- .../listener/PrivateMessageListener.java | 4 +- .../service/impl/GroupMessageServiceImpl.java | 8 ++-- .../impl/PrivateMessageServiceImpl.java | 8 ++-- .../processor/GroupMessageProcessor.java | 2 +- .../processor/HeartbeatProcessor.java | 2 +- .../bx/imserver/processor/LoginProcessor.java | 4 +- .../processor/PrivateMessageProcessor.java | 2 +- .../task/PullUnreadGroupMessageTask.java | 2 +- .../task/PullUnreadPrivateMessageTask.java | 2 +- 17 files changed, 45 insertions(+), 75 deletions(-) delete mode 100644 im-commom/im-commom.iml 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 ab6dd11..b6b0de5 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 @@ -40,7 +40,7 @@ public class IMSender { IMRecvInfo[] recvInfos = new IMRecvInfo[messageInfos.length]; for (int i=0;i recvInfo = new IMRecvInfo<>(); - recvInfo.setCmd(IMCmdType.PRIVATE_MESSAGE.getCode()); + recvInfo.setCmd(IMCmdType.PRIVATE_MESSAGE.code()); List recvIds = new LinkedList(); recvIds.add(recvId); recvInfo.setRecvIds(recvIds); @@ -88,7 +88,7 @@ public class IMSender { IMRecvInfo[] recvInfos = new IMRecvInfo[messageInfos.length]; for (int i=0;i recvInfo = new IMRecvInfo<>(); - recvInfo.setCmd(IMCmdType.GROUP_MESSAGE.getCode()); + recvInfo.setCmd(IMCmdType.GROUP_MESSAGE.code()); recvInfo.setRecvIds(new LinkedList<>(entry.getValue())); recvInfo.setData(messageInfos[i]); recvInfos[i] = recvInfo; diff --git a/im-commom/im-commom.iml b/im-commom/im-commom.iml deleted file mode 100644 index 1706946..0000000 --- a/im-commom/im-commom.iml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/im-commom/src/main/java/com/bx/imcommon/enums/IMCmdType.java b/im-commom/src/main/java/com/bx/imcommon/enums/IMCmdType.java index b8c2bc9..aedfde0 100644 --- a/im-commom/src/main/java/com/bx/imcommon/enums/IMCmdType.java +++ b/im-commom/src/main/java/com/bx/imcommon/enums/IMCmdType.java @@ -1,5 +1,7 @@ package com.bx.imcommon.enums; + + public enum IMCmdType { LOGIN(0,"登陆"), @@ -28,11 +30,11 @@ public enum IMCmdType { } - public String getDesc() { + public String description() { return desc; } - public Integer getCode(){ + public Integer code(){ return this.code; } diff --git a/im-commom/src/main/java/com/bx/imcommon/enums/IMListenerType.java b/im-commom/src/main/java/com/bx/imcommon/enums/IMListenerType.java index d6da555..6ec1828 100644 --- a/im-commom/src/main/java/com/bx/imcommon/enums/IMListenerType.java +++ b/im-commom/src/main/java/com/bx/imcommon/enums/IMListenerType.java @@ -1,6 +1,6 @@ package com.bx.imcommon.enums; -public enum IMListenerType { +public enum IMListenerType{ ALL(0,"全部消息"), PRIVATE_MESSAGE(1,"私聊消息"), GROUP_MESSAGE(2,"群聊消息"); @@ -14,11 +14,14 @@ public enum IMListenerType { this.desc=desc; } - public String getDesc() { + + public String description() { return desc; } - public Integer getCode(){ + + public Integer code(){ return this.code; } + } diff --git a/im-commom/src/main/java/com/bx/imcommon/enums/IMSendStatus.java b/im-commom/src/main/java/com/bx/imcommon/enums/IMSendStatus.java index d64e3f7..cf82384 100644 --- a/im-commom/src/main/java/com/bx/imcommon/enums/IMSendStatus.java +++ b/im-commom/src/main/java/com/bx/imcommon/enums/IMSendStatus.java @@ -1,25 +1,27 @@ package com.bx.imcommon.enums; -public enum IMSendStatus { +public enum IMSendStatus { SUCCESS(0,"发送成功"), FAIL(1,"发送失败"); private int code; - private String msg; + private String desc; // 构造方法 - IMSendStatus(int code, String msg) { + IMSendStatus(int code, String desc) { this.code = code; - this.msg = msg; + this.desc = desc; } - public int getCode() { - return code; + + public String description() { + return desc; } - public void setCode(int code) { - this.code = code; + + public Integer code(){ + return this.code; } } diff --git a/im-platform/src/main/java/com/bx/implatform/enums/FileType.java b/im-platform/src/main/java/com/bx/implatform/enums/FileType.java index 669035d..2e628e5 100644 --- a/im-platform/src/main/java/com/bx/implatform/enums/FileType.java +++ b/im-platform/src/main/java/com/bx/implatform/enums/FileType.java @@ -28,11 +28,11 @@ public enum FileType { } - public String getDesc() { + public String description() { return desc; } - public Integer getCode(){ + public Integer code(){ return this.code; } diff --git a/im-platform/src/main/java/com/bx/implatform/enums/MessageStatus.java b/im-platform/src/main/java/com/bx/implatform/enums/MessageStatus.java index 1f0618d..212c3eb 100644 --- a/im-platform/src/main/java/com/bx/implatform/enums/MessageStatus.java +++ b/im-platform/src/main/java/com/bx/implatform/enums/MessageStatus.java @@ -26,11 +26,11 @@ public enum MessageStatus { } - public String getDesc() { + public String description() { return desc; } - public Integer getCode(){ + public Integer code(){ return this.code; } } diff --git a/im-platform/src/main/java/com/bx/implatform/enums/MessageType.java b/im-platform/src/main/java/com/bx/implatform/enums/MessageType.java index 1dfeb99..f6a0622 100644 --- a/im-platform/src/main/java/com/bx/implatform/enums/MessageType.java +++ b/im-platform/src/main/java/com/bx/implatform/enums/MessageType.java @@ -19,11 +19,11 @@ public enum MessageType { } - public String getDesc() { + public String description() { return desc; } - public Integer getCode(){ + public Integer code(){ return this.code; } } diff --git a/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java b/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java index f23e2ab..636ee4e 100644 --- a/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java +++ b/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java @@ -33,8 +33,8 @@ public class PrivateMessageListener implements MessageListener { if(result.getStatus().equals(IMSendStatus.SUCCESS)){ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.lambda().eq(PrivateMessage::getId,messageInfo.getId()) - .eq(PrivateMessage::getStatus, MessageStatus.UNREAD.getCode()) - .set(PrivateMessage::getStatus, MessageStatus.ALREADY_READ.getCode()); + .eq(PrivateMessage::getStatus, MessageStatus.UNREAD.code()) + .set(PrivateMessage::getStatus, MessageStatus.ALREADY_READ.code()); privateMessageService.update(updateWrapper); log.info("消息已读,消息id:{},发送者:{},接收者:{}",messageInfo.getId(),messageInfo.getSendId(),messageInfo.getRecvId()); } 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 e5dab1d..2b5769c 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 @@ -108,12 +108,12 @@ public class GroupMessageServiceImpl extends ServiceImpl userIds = groupMemberService.findUserIdsByGroupId(msg.getGroupId()); GroupMessageInfo msgInfo = BeanUtils.copyProperties(msg, GroupMessageInfo.class); - msgInfo.setType(MessageType.TIP.getCode()); + msgInfo.setType(MessageType.TIP.code()); String content = String.format("'%s'撤回了一条消息",member.getAliasName()); msgInfo.setContent(content); msgInfo.setSendTime(new Date()); @@ -140,7 +140,7 @@ public class GroupMessageServiceImpl extends ServiceImpl wrapper = new QueryWrapper(); wrapper.lambda().eq(GroupMessage::getGroupId,member.getGroupId()) .gt(GroupMessage::getSendTime,member.getCreatedTime()) - .ne(GroupMessage::getStatus, MessageStatus.RECALL.getCode()); + .ne(GroupMessage::getStatus, MessageStatus.RECALL.code()); if(maxReadedId!=null){ wrapper.lambda().gt(GroupMessage::getId,maxReadedId); } @@ -185,7 +185,7 @@ public class GroupMessageServiceImpl extends ServiceImpl wrapper = new QueryWrapper<>(); wrapper.lambda().eq(GroupMessage::getGroupId,groupId) .gt(GroupMessage::getSendTime,member.getCreatedTime()) - .ne(GroupMessage::getStatus, MessageStatus.RECALL.getCode()) + .ne(GroupMessage::getStatus, MessageStatus.RECALL.code()) .orderByDesc(GroupMessage::getId) .last("limit "+stIdx + ","+size); 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 27d9a3a..3e5ba22 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 @@ -52,7 +52,7 @@ public class PrivateMessageServiceImpl extends ServiceImpl wp.eq(PrivateMessage::getRecvId, userId) .eq(PrivateMessage::getSendId, friendId))) - .ne(PrivateMessage::getStatus, MessageStatus.RECALL.getCode()) + .ne(PrivateMessage::getStatus, MessageStatus.RECALL.code()) .orderByDesc(PrivateMessage::getId) .last("limit " + stIdx + "," + size); diff --git a/im-server/src/main/java/com/bx/imserver/processor/GroupMessageProcessor.java b/im-server/src/main/java/com/bx/imserver/processor/GroupMessageProcessor.java index ee1f517..5bf361f 100644 --- a/im-server/src/main/java/com/bx/imserver/processor/GroupMessageProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/processor/GroupMessageProcessor.java @@ -38,7 +38,7 @@ public class GroupMessageProcessor extends MessageProcessor { public void process(ChannelHandlerContext ctx, HeartbeatInfo beatInfo) { // 响应ws IMSendInfo sendInfo = new IMSendInfo(); - sendInfo.setCmd(IMCmdType.HEART_BEAT.getCode()); + sendInfo.setCmd(IMCmdType.HEART_BEAT.code()); ctx.channel().writeAndFlush(sendInfo); // 设置属性 diff --git a/im-server/src/main/java/com/bx/imserver/processor/LoginProcessor.java b/im-server/src/main/java/com/bx/imserver/processor/LoginProcessor.java index 94bac81..c89f1f0 100644 --- a/im-server/src/main/java/com/bx/imserver/processor/LoginProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/processor/LoginProcessor.java @@ -36,7 +36,7 @@ public class LoginProcessor extends MessageProcessor { if(context != null){ // 不允许多地登录,强制下线 IMSendInfo sendInfo = new IMSendInfo(); - sendInfo.setCmd(IMCmdType.FORCE_LOGUT.getCode()); + sendInfo.setCmd(IMCmdType.FORCE_LOGUT.code()); context.channel().writeAndFlush(sendInfo); } // 绑定用户和channel @@ -52,7 +52,7 @@ public class LoginProcessor extends MessageProcessor { redisTemplate.opsForValue().set(key, WSServer.getServerId(), Constant.ONLINE_TIMEOUT_SECOND, TimeUnit.SECONDS); // 响应ws IMSendInfo sendInfo = new IMSendInfo(); - sendInfo.setCmd(IMCmdType.LOGIN.getCode()); + sendInfo.setCmd(IMCmdType.LOGIN.code()); ctx.channel().writeAndFlush(sendInfo); } diff --git a/im-server/src/main/java/com/bx/imserver/processor/PrivateMessageProcessor.java b/im-server/src/main/java/com/bx/imserver/processor/PrivateMessageProcessor.java index a977f0d..ce5f910 100644 --- a/im-server/src/main/java/com/bx/imserver/processor/PrivateMessageProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/processor/PrivateMessageProcessor.java @@ -31,7 +31,7 @@ public class PrivateMessageProcessor extends MessageProcessor