09-16-netty优化
This commit is contained in:
@ -68,12 +68,12 @@ public class ChatServer {
|
||||
});
|
||||
|
||||
log.info("Netty聊天服务器启动,端口:" + port);
|
||||
bootstrap.bind(port).sync();
|
||||
// ChannelFuture future = bootstrap.bind(port).sync();
|
||||
// future.channel().closeFuture().sync();
|
||||
// bootstrap.bind(port).sync();
|
||||
ChannelFuture future = bootstrap.bind(port).sync();
|
||||
future.channel().closeFuture().sync();
|
||||
} finally {
|
||||
// workerGroup.shutdownGracefully().sync();
|
||||
// bossGroup.shutdownGracefully().sync();
|
||||
workerGroup.shutdownGracefully().sync();
|
||||
bossGroup.shutdownGracefully().sync();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -21,6 +21,7 @@ import org.dromara.system.service.impl.SysOssServiceImpl;
|
||||
import org.dromara.system.service.impl.SysUserServiceImpl;
|
||||
import org.dromara.websocket.domain.ChatGroup;
|
||||
import org.dromara.websocket.domain.ChatHistory;
|
||||
import org.dromara.websocket.domain.enums.ChatRoomEnum;
|
||||
import org.dromara.websocket.service.Impl.ChatGroupServiceImpl;
|
||||
import org.dromara.websocket.service.Impl.ChatHistoryServiceImpl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -154,16 +155,16 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
userRoomCountMap.put(loginUser.getUserId()+"+"+chatGroup.getId().toString(), list.size());
|
||||
}
|
||||
//在遍历的同时寻找是否有系统消息房间
|
||||
if (!isHaveSystemRoom && chatGroup.getMembers().contains("[99")){
|
||||
if (!isHaveSystemRoom && chatGroup.getMembers().contains("["+ ChatRoomEnum.SYSTEM.getRoomId())){
|
||||
isHaveSystemRoom = true;
|
||||
}
|
||||
if (!isHaveAttendanceRoom && chatGroup.getMembers().contains("[100")){
|
||||
if (!isHaveAttendanceRoom && chatGroup.getMembers().contains("["+ChatRoomEnum.ATTENDANCE.getRoomId())){
|
||||
isHaveAttendanceRoom = true;
|
||||
}
|
||||
if (!isHaveSafeRoom && chatGroup.getMembers().contains("[101")){
|
||||
if (!isHaveSafeRoom && chatGroup.getMembers().contains("["+ChatRoomEnum.SAFE.getRoomId())){
|
||||
isHaveSafeRoom = true;
|
||||
}
|
||||
if (!isHaveQualityRoom && chatGroup.getMembers().contains("[102")){
|
||||
if (!isHaveQualityRoom && chatGroup.getMembers().contains("["+ChatRoomEnum.QUALITY.getRoomId())){
|
||||
isHaveQualityRoom = true;
|
||||
}
|
||||
}
|
||||
@ -180,7 +181,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
if (!isHaveSystemRoom){
|
||||
ChatGroup chatGroup = new ChatGroup();
|
||||
chatGroup.setType(String.valueOf(2));
|
||||
chatGroup.setMembers("[99, "+loginUser.getUserId()+"]");
|
||||
chatGroup.setMembers("["+ChatRoomEnum.SYSTEM.getRoomId()+", " + loginUser.getUserId()+"]");
|
||||
chatGroupService.save(chatGroup);
|
||||
}
|
||||
|
||||
@ -188,7 +189,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
if (!isHaveAttendanceRoom){
|
||||
ChatGroup chatGroup = new ChatGroup();
|
||||
chatGroup.setType(String.valueOf(3));
|
||||
chatGroup.setMembers("[100, "+loginUser.getUserId()+"]");
|
||||
chatGroup.setMembers("["+ChatRoomEnum.ATTENDANCE.getRoomId() +", "+loginUser.getUserId()+"]");
|
||||
chatGroupService.save(chatGroup);
|
||||
}
|
||||
|
||||
@ -196,7 +197,8 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
if (!isHaveSafeRoom){
|
||||
ChatGroup chatGroup = new ChatGroup();
|
||||
chatGroup.setType(String.valueOf(4));
|
||||
chatGroup.setMembers("[101, "+loginUser.getUserId()+"]");
|
||||
chatGroup.setMembers("["+ChatRoomEnum.SAFE.getRoomId() +", "+loginUser.getUserId()+"]");
|
||||
// chatGroup.setMembers("[101, "+loginUser.getUserId()+"]");
|
||||
chatGroupService.save(chatGroup);
|
||||
}
|
||||
|
||||
@ -204,7 +206,8 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
if (!isHaveQualityRoom){
|
||||
ChatGroup chatGroup = new ChatGroup();
|
||||
chatGroup.setType(String.valueOf(5));
|
||||
chatGroup.setMembers("[102, "+loginUser.getUserId()+"]");
|
||||
chatGroup.setMembers("["+ChatRoomEnum.QUALITY.getRoomId() +", "+loginUser.getUserId()+"]");
|
||||
// chatGroup.setMembers("[102, "+loginUser.getUserId()+"]");
|
||||
chatGroupService.save(chatGroup);
|
||||
}
|
||||
|
||||
@ -250,17 +253,17 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
userChannelMap.remove(userId);
|
||||
|
||||
//构建推送消息
|
||||
List<Long> userIds = new ArrayList<>();
|
||||
//类型转换
|
||||
for (String s : onlineUserList) {
|
||||
userIds.add(Long.parseLong(s));
|
||||
}
|
||||
List<UserDTO> userDTOS = sysUserService.selectListByIds(userIds);
|
||||
|
||||
JSONObject message = new JSONObject();
|
||||
message.put("type", "2");
|
||||
message.put("users", userDTOS);
|
||||
channelGroup.writeAndFlush(new TextWebSocketFrame(message.toJSONString()));
|
||||
// List<Long> userIds = new ArrayList<>();
|
||||
// //类型转换
|
||||
// for (String s : onlineUserList) {
|
||||
// userIds.add(Long.parseLong(s));
|
||||
// }
|
||||
// List<UserDTO> userDTOS = sysUserService.selectListByIds(userIds);
|
||||
//
|
||||
// JSONObject message = new JSONObject();
|
||||
// message.put("type", "2");
|
||||
// message.put("users", userDTOS);
|
||||
// channelGroup.writeAndFlush(new TextWebSocketFrame(message.toJSONString()));
|
||||
} else {
|
||||
userChannelMap.put(userId, channelHandlerContexts);
|
||||
}
|
||||
@ -467,13 +470,13 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
//1:系统消息
|
||||
case "0" ->{
|
||||
//生成系统消息的聊天记录
|
||||
lambdaQueryWrapper.eq(ChatGroup::getMembers,"[99, "+userId+"]");
|
||||
lambdaQueryWrapper.eq(ChatGroup::getMembers,"["+ChatRoomEnum.SYSTEM.getRoomId()+", "+userId+"]");
|
||||
groupServiceOne = chatGroupService.getOne(lambdaQueryWrapper);
|
||||
//如果给成员发送系统消息 而该成员还没有建立过连接从而没有群聊房间 则创建该成员系统消息房间
|
||||
if (groupServiceOne == null){
|
||||
groupServiceOne = new ChatGroup();
|
||||
groupServiceOne.setType(String.valueOf(2));
|
||||
groupServiceOne.setMembers("[99, "+userId+"]");
|
||||
groupServiceOne.setMembers("["+ChatRoomEnum.SYSTEM.getRoomId()+", "+userId+"]");
|
||||
groupServiceOne.setLastMessage(message);
|
||||
groupServiceOne.setLastMessageTime(new Date());
|
||||
// chatGroupService.save(groupServiceOne);
|
||||
@ -495,13 +498,14 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
|
||||
//2:考勤消息
|
||||
case "1" ->{
|
||||
lambdaQueryWrapper.eq(ChatGroup::getMembers,"[100, "+userId+"]");
|
||||
// lambdaQueryWrapper.eq(ChatGroup::getMembers,"[100, "+userId+"]");
|
||||
lambdaQueryWrapper.eq(ChatGroup::getMembers,"["+ChatRoomEnum.ATTENDANCE.getRoomId()+", "+userId+"]");
|
||||
groupServiceOne = chatGroupService.getOne(lambdaQueryWrapper);
|
||||
//如果给成员发送考勤消息 而该成员还没有建立过连接从而没有考勤房间 则创建该成员考勤消息房间
|
||||
if (groupServiceOne == null){
|
||||
groupServiceOne = new ChatGroup();
|
||||
groupServiceOne.setType(String.valueOf(3));
|
||||
groupServiceOne.setMembers("[100, "+userId+"]");
|
||||
groupServiceOne.setMembers("["+ChatRoomEnum.ATTENDANCE.getRoomId()+", "+userId+"]");
|
||||
groupServiceOne.setLastMessage(message);
|
||||
groupServiceOne.setLastMessageTime(new Date());
|
||||
// chatGroupService.save(groupServiceOne);
|
||||
@ -523,13 +527,13 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
|
||||
//安全消息
|
||||
case "2" ->{
|
||||
lambdaQueryWrapper.eq(ChatGroup::getMembers,"[101, "+userId+"]");
|
||||
lambdaQueryWrapper.eq(ChatGroup::getMembers,"["+ChatRoomEnum.SAFE.getRoomId()+", "+userId+"]");
|
||||
groupServiceOne = chatGroupService.getOne(lambdaQueryWrapper);
|
||||
//如果给成员发送安全消息 而该成员还没有建立过连接从而没有安全消息 则创建该成员安全消息房间
|
||||
if (groupServiceOne == null){
|
||||
groupServiceOne = new ChatGroup();
|
||||
groupServiceOne.setType(String.valueOf(4));
|
||||
groupServiceOne.setMembers("[101, "+userId+"]");
|
||||
groupServiceOne.setMembers("["+ChatRoomEnum.SAFE.getRoomId()+", "+userId+"]");
|
||||
groupServiceOne.setLastMessage(message);
|
||||
groupServiceOne.setLastMessageTime(new Date());
|
||||
// chatGroupService.save(groupServiceOne);
|
||||
@ -551,13 +555,13 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
|
||||
//质量消息
|
||||
case "3" ->{
|
||||
lambdaQueryWrapper.eq(ChatGroup::getMembers,"[102, "+userId+"]");
|
||||
lambdaQueryWrapper.eq(ChatGroup::getMembers,"["+ChatRoomEnum.QUALITY.getRoomId()+", "+userId+"]");
|
||||
groupServiceOne = chatGroupService.getOne(lambdaQueryWrapper);
|
||||
//如果给成员发送质量消息 而该成员还没有建立过连接从而没有质量消息 则创建该成员质量消息房间
|
||||
if (groupServiceOne == null){
|
||||
groupServiceOne = new ChatGroup();
|
||||
groupServiceOne.setType(String.valueOf(5));
|
||||
groupServiceOne.setMembers("[102, "+userId+"]");
|
||||
groupServiceOne.setMembers("["+ChatRoomEnum.QUALITY.getRoomId()+", "+userId+"]");
|
||||
groupServiceOne.setLastMessage(message);
|
||||
groupServiceOne.setLastMessageTime(new Date());
|
||||
// chatGroupService.save(groupServiceOne);
|
||||
@ -583,6 +587,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
}
|
||||
|
||||
chatGroupService.saveOrUpdate(groupServiceOne);
|
||||
chatHistory.setMessageType(jsonObject.get("messageType").toString());
|
||||
chatHistoryService.save(chatHistory);
|
||||
|
||||
//发送消息后 将该房间未读消息数加1
|
||||
|
||||
@ -0,0 +1,29 @@
|
||||
package org.dromara.websocket.domain.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum ChatRoomEnum {
|
||||
|
||||
|
||||
SYSTEM("99", "系统消息"),
|
||||
|
||||
ATTENDANCE("100", "考勤消息"),
|
||||
|
||||
SAFE("101", "安全消息"),
|
||||
|
||||
QUALITY("102", "质量消息");
|
||||
|
||||
/**
|
||||
* ID
|
||||
*/
|
||||
private final String roomId;
|
||||
|
||||
/**
|
||||
* 名称
|
||||
*/
|
||||
private final String roomName;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user