Browse Source

代码规范

master
xie.bx 3 years ago
parent
commit
3d77aefa21
  1. 21
      im-client/src/main/java/com/bx/imclient/IMClient.java
  2. 3
      im-client/src/main/java/com/bx/imclient/listener/MessageListenerMulticaster.java
  3. 6
      im-commom/src/main/java/com/bx/imcommon/enums/IMListenerType.java
  4. 18
      im-commom/src/main/java/com/bx/imcommon/model/GroupMessageInfo.java
  5. 9
      im-commom/src/main/java/com/bx/imcommon/model/IMRecvInfo.java
  6. 7
      im-commom/src/main/java/com/bx/imcommon/model/IMSendInfo.java
  7. 18
      im-commom/src/main/java/com/bx/imcommon/model/PrivateMessageInfo.java
  8. 12
      im-commom/src/main/java/com/bx/imcommon/model/SendResult.java
  9. 2
      im-server/src/main/java/com/bx/imserver/IMServerApp.java
  10. 6
      im-server/src/main/java/com/bx/imserver/processor/GroupMessageProcessor.java
  11. 4
      im-server/src/main/java/com/bx/imserver/processor/HeartbeatProcessor.java
  12. 10
      im-server/src/main/java/com/bx/imserver/processor/LoginProcessor.java
  13. 2
      im-server/src/main/java/com/bx/imserver/processor/MessageProcessor.java
  14. 6
      im-server/src/main/java/com/bx/imserver/processor/PrivateMessageProcessor.java
  15. 2
      im-server/src/main/java/com/bx/imserver/processor/ProcessorFactory.java
  16. 2
      im-server/src/main/java/com/bx/imserver/task/AbstractPullMessageTask.java
  17. 6
      im-server/src/main/java/com/bx/imserver/task/PullUnreadGroupMessageTask.java
  18. 6
      im-server/src/main/java/com/bx/imserver/task/PullUnreadPrivateMessageTask.java
  19. 4
      im-server/src/main/java/com/bx/imserver/util/UserChannelCtxHolder.java
  20. 11
      im-server/src/main/java/com/bx/imserver/ws/WebSocketHandler.java
  21. 6
      im-server/src/main/java/com/bx/imserver/ws/WebsocketServer.java
  22. 2
      im-server/src/main/java/com/bx/imserver/ws/endecode/MessageProtocolDecoder.java
  23. 2
      im-server/src/main/java/com/bx/imserver/ws/endecode/MessageProtocolEncoder.java
  24. 12
      im-ui/src/api/wssocket.js
  25. 2
      im-ui/src/view/Home.vue

21
im-client/src/main/java/com/bx/imclient/IMClient.java

@ -14,16 +14,27 @@ public class IMClient {
@Autowired @Autowired
private MessageListenerMulticaster listenerMulticaster; private MessageListenerMulticaster listenerMulticaster;
@Autowired @Autowired
private IMSender imSender; 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<Long> userTokens, GroupMessageInfo... messageInfo){ /**
imSender.sendGroupMessage(userTokens,messageInfo); * 发送群聊消息
*
* @param recvIds 群聊用户id列表
* @param messageInfo 消息体将转成json发送到客户端
*/
public void sendGroupMessage(List<Long> recvIds, GroupMessageInfo... messageInfo){
imSender.sendGroupMessage(recvIds,messageInfo);
} }

3
im-client/src/main/java/com/bx/imclient/listener/MessageListenerMulticaster.java

@ -13,14 +13,13 @@ import java.util.List;
@Component @Component
public class MessageListenerMulticaster { public class MessageListenerMulticaster {
@Autowired(required = false) @Autowired(required = false)
private List<MessageListener> messageListeners = Collections.emptyList(); private List<MessageListener> messageListeners = Collections.emptyList();
public void multicast(IMListenerType type, SendResult result){ public void multicast(IMListenerType type, SendResult result){
for(MessageListener listener:messageListeners){ for(MessageListener listener:messageListeners){
IMListener annotation = listener.getClass().getAnnotation(IMListener.class); 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); listener.process(result);
} }
} }

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

@ -1,9 +1,9 @@
package com.bx.imcommon.enums; package com.bx.imcommon.enums;
public enum IMListenerType { public enum IMListenerType {
ALL(0,"全部消息"),
PRIVATE_MESSAGE(0,"私聊消息"), PRIVATE_MESSAGE(1,"私聊消息"),
GROUP_MESSAGE(1,"群聊消息"); GROUP_MESSAGE(2,"群聊消息");
private Integer code; private Integer code;

18
im-commom/src/main/java/com/bx/imcommon/model/GroupMessageInfo.java

@ -9,16 +9,34 @@ import java.util.Date;
@Data @Data
public class GroupMessageInfo { public class GroupMessageInfo {
/*
* 消息id
*/
private Long id; private Long id;
/*
* 群聊id
*/
private Long groupId; private Long groupId;
/*
* 发送者id
*/
private Long sendId; private Long sendId;
/*
* 消息内容
*/
private String content; private String content;
/*
* 消息内容类型 具体枚举值由应用层定义
*/
private Integer type; private Integer type;
/**
* 发送时间
*/
@JsonSerialize(using = DateToLongSerializer.class) @JsonSerialize(using = DateToLongSerializer.class)
private Date sendTime; private Date sendTime;
} }

9
im-commom/src/main/java/com/bx/imcommon/model/IMRecvInfo.java

@ -7,10 +7,19 @@ import java.util.List;
@Data @Data
public class IMRecvInfo<T> { public class IMRecvInfo<T> {
/*
* 命令类型
*/
private Integer cmd; private Integer cmd;
/*
* 接收者id列表
*/
private List<Long> recvIds; private List<Long> recvIds;
/*
* 推送消息体
*/
private T data; private T data;
} }

7
im-commom/src/main/java/com/bx/imcommon/model/IMSendInfo.java

@ -5,7 +5,14 @@ import lombok.Data;
@Data @Data
public class IMSendInfo<T> { public class IMSendInfo<T> {
/*
* 命令
*/
private Integer cmd; private Integer cmd;
/*
* 推送消息体
*/
private T data; private T data;
} }

18
im-commom/src/main/java/com/bx/imcommon/model/PrivateMessageInfo.java

@ -9,16 +9,34 @@ import java.util.Date;
@Data @Data
public class PrivateMessageInfo { public class PrivateMessageInfo {
/*
* 消息id
*/
private long id; private long id;
/*
* 发送者id
*/
private Long sendId; private Long sendId;
/*
* 接收者id
*/
private Long recvId; private Long recvId;
/*
* 发送内容
*/
private String content; private String content;
/*
* 消息内容类型 具体枚举值由应用层定义
*/
private Integer type; private Integer type;
/**
* 发送时间
*/
@JsonSerialize(using = DateToLongSerializer.class) @JsonSerialize(using = DateToLongSerializer.class)
private Date sendTime; private Date sendTime;
} }

12
im-commom/src/main/java/com/bx/imcommon/model/SendResult.java

@ -6,12 +6,24 @@ import lombok.Data;
@Data @Data
public class SendResult<T> { public class SendResult<T> {
/*
* 接收者id
*/
private Long recvId; private Long recvId;
/*
* 发送状态
*/
private IMSendStatus status; private IMSendStatus status;
/*
* 失败原因
*/
private String failReason=""; private String failReason="";
/*
* 消息体(透传)
*/
private T messageInfo; private T messageInfo;
} }

2
im-server/src/main/java/com/bx/imserver/IMServerApp.java

@ -1,7 +1,7 @@
package com.bx.imserver; 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.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner; import org.springframework.boot.CommandLineRunner;

6
im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java → 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.contant.RedisKey;
import com.bx.imcommon.enums.IMCmdType; 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.IMRecvInfo;
import com.bx.imcommon.model.IMSendInfo; import com.bx.imcommon.model.IMSendInfo;
import com.bx.imcommon.model.SendResult; import com.bx.imcommon.model.SendResult;
import com.bx.imserver.websocket.WebsocketChannelCtxHolder; import com.bx.imserver.util.UserChannelCtxHolder;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -32,7 +32,7 @@ public class GroupMessageProcessor extends MessageProcessor<IMRecvInfo<GroupMes
log.info("接收到群消息,发送者:{},群id:{},接收id:{},内容:{}",messageInfo.getSendId(),messageInfo.getGroupId(),recvIds,messageInfo.getContent()); log.info("接收到群消息,发送者:{},群id:{},接收id:{},内容:{}",messageInfo.getSendId(),messageInfo.getGroupId(),recvIds,messageInfo.getContent());
for(Long recvId:recvIds){ for(Long recvId:recvIds){
try { try {
ChannelHandlerContext channelCtx = WebsocketChannelCtxHolder.getChannelCtx(recvId); ChannelHandlerContext channelCtx = UserChannelCtxHolder.getChannelCtx(recvId);
if(channelCtx != null){ if(channelCtx != null){
// 自己发的消息不用推送 // 自己发的消息不用推送
if(recvId != messageInfo.getSendId()){ if(recvId != messageInfo.getSendId()){

4
im-server/src/main/java/com/bx/imserver/websocket/processor/HeartbeatProcessor.java → im-server/src/main/java/com/bx/imserver/processor/HeartbeatProcessor.java

@ -1,4 +1,4 @@
package com.bx.imserver.websocket.processor; package com.bx.imserver.processor;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.bx.imcommon.contant.Constant; import com.bx.imcommon.contant.Constant;
@ -6,7 +6,7 @@ import com.bx.imcommon.contant.RedisKey;
import com.bx.imcommon.enums.IMCmdType; import com.bx.imcommon.enums.IMCmdType;
import com.bx.imcommon.model.HeartbeatInfo; import com.bx.imcommon.model.HeartbeatInfo;
import com.bx.imcommon.model.IMSendInfo; import com.bx.imcommon.model.IMSendInfo;
import com.bx.imserver.websocket.WebsocketServer; import com.bx.imserver.ws.WebsocketServer;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.util.AttributeKey; import io.netty.util.AttributeKey;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

10
im-server/src/main/java/com/bx/imserver/websocket/processor/LoginProcessor.java → im-server/src/main/java/com/bx/imserver/processor/LoginProcessor.java

@ -1,4 +1,4 @@
package com.bx.imserver.websocket.processor; package com.bx.imserver.processor;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.bx.imcommon.contant.Constant; import com.bx.imcommon.contant.Constant;
@ -6,8 +6,8 @@ import com.bx.imcommon.contant.RedisKey;
import com.bx.imcommon.enums.IMCmdType; import com.bx.imcommon.enums.IMCmdType;
import com.bx.imcommon.model.IMSendInfo; import com.bx.imcommon.model.IMSendInfo;
import com.bx.imcommon.model.LoginInfo; import com.bx.imcommon.model.LoginInfo;
import com.bx.imserver.websocket.WebsocketChannelCtxHolder; import com.bx.imserver.util.UserChannelCtxHolder;
import com.bx.imserver.websocket.WebsocketServer; import com.bx.imserver.ws.WebsocketServer;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.util.AttributeKey; import io.netty.util.AttributeKey;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -32,7 +32,7 @@ public class LoginProcessor extends MessageProcessor<LoginInfo> {
@Override @Override
synchronized public void process(ChannelHandlerContext ctx, LoginInfo loginInfo) { synchronized public void process(ChannelHandlerContext ctx, LoginInfo loginInfo) {
log.info("用户登录,userId:{}",loginInfo.getUserId()); log.info("用户登录,userId:{}",loginInfo.getUserId());
ChannelHandlerContext context = WebsocketChannelCtxHolder.getChannelCtx(loginInfo.getUserId()); ChannelHandlerContext context = UserChannelCtxHolder.getChannelCtx(loginInfo.getUserId());
if(context != null){ if(context != null){
// 不允许多地登录,强制下线 // 不允许多地登录,强制下线
IMSendInfo sendInfo = new IMSendInfo(); IMSendInfo sendInfo = new IMSendInfo();
@ -40,7 +40,7 @@ public class LoginProcessor extends MessageProcessor<LoginInfo> {
context.channel().writeAndFlush(sendInfo); context.channel().writeAndFlush(sendInfo);
} }
// 绑定用户和channel // 绑定用户和channel
WebsocketChannelCtxHolder.addChannelCtx(loginInfo.getUserId(),ctx); UserChannelCtxHolder.addChannelCtx(loginInfo.getUserId(),ctx);
// 设置用户id属性 // 设置用户id属性
AttributeKey<Long> attr = AttributeKey.valueOf("USER_ID"); AttributeKey<Long> attr = AttributeKey.valueOf("USER_ID");
ctx.channel().attr(attr).set(loginInfo.getUserId()); ctx.channel().attr(attr).set(loginInfo.getUserId());

2
im-server/src/main/java/com/bx/imserver/websocket/processor/MessageProcessor.java → 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; import io.netty.channel.ChannelHandlerContext;

6
im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java → 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.contant.RedisKey;
import com.bx.imcommon.enums.IMCmdType; 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.IMSendInfo;
import com.bx.imcommon.model.PrivateMessageInfo; import com.bx.imcommon.model.PrivateMessageInfo;
import com.bx.imcommon.model.SendResult; import com.bx.imcommon.model.SendResult;
import com.bx.imserver.websocket.WebsocketChannelCtxHolder; import com.bx.imserver.util.UserChannelCtxHolder;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -27,7 +27,7 @@ public class PrivateMessageProcessor extends MessageProcessor<IMRecvInfo<Privat
Long recvId = recvInfo.getRecvIds().get(0); Long recvId = recvInfo.getRecvIds().get(0);
log.info("接收到消息,发送者:{},接收者:{},内容:{}",messageInfo.getSendId(),recvId,messageInfo.getContent()); log.info("接收到消息,发送者:{},接收者:{},内容:{}",messageInfo.getSendId(),recvId,messageInfo.getContent());
try{ try{
ChannelHandlerContext channelCtx = WebsocketChannelCtxHolder.getChannelCtx(recvId); ChannelHandlerContext channelCtx = UserChannelCtxHolder.getChannelCtx(recvId);
if(channelCtx != null ){ if(channelCtx != null ){
// 推送消息到用户 // 推送消息到用户
IMSendInfo sendInfo = new IMSendInfo(); IMSendInfo sendInfo = new IMSendInfo();

2
im-server/src/main/java/com/bx/imserver/websocket/processor/ProcessorFactory.java → im-server/src/main/java/com/bx/imserver/processor/ProcessorFactory.java

@ -1,4 +1,4 @@
package com.bx.imserver.websocket.processor; package com.bx.imserver.processor;
import com.bx.imcommon.enums.IMCmdType; import com.bx.imcommon.enums.IMCmdType;
import com.bx.imserver.util.SpringContextHolder; import com.bx.imserver.util.SpringContextHolder;

2
im-server/src/main/java/com/bx/imserver/task/AbstractPullMessageTask.java

@ -1,6 +1,6 @@
package com.bx.imserver.task; package com.bx.imserver.task;
import com.bx.imserver.websocket.WebsocketServer; import com.bx.imserver.ws.WebsocketServer;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

6
im-server/src/main/java/com/bx/imserver/task/PullUnreadGroupMessageTask.java

@ -4,9 +4,9 @@ import com.bx.imcommon.contant.RedisKey;
import com.bx.imcommon.enums.IMCmdType; import com.bx.imcommon.enums.IMCmdType;
import com.bx.imcommon.model.GroupMessageInfo; import com.bx.imcommon.model.GroupMessageInfo;
import com.bx.imcommon.model.IMRecvInfo; import com.bx.imcommon.model.IMRecvInfo;
import com.bx.imserver.websocket.WebsocketServer; import com.bx.imserver.ws.WebsocketServer;
import com.bx.imserver.websocket.processor.MessageProcessor; import com.bx.imserver.processor.MessageProcessor;
import com.bx.imserver.websocket.processor.ProcessorFactory; import com.bx.imserver.processor.ProcessorFactory;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;

6
im-server/src/main/java/com/bx/imserver/task/PullUnreadPrivateMessageTask.java

@ -5,9 +5,9 @@ import com.bx.imcommon.contant.RedisKey;
import com.bx.imcommon.enums.IMCmdType; import com.bx.imcommon.enums.IMCmdType;
import com.bx.imcommon.model.IMRecvInfo; import com.bx.imcommon.model.IMRecvInfo;
import com.bx.imcommon.model.PrivateMessageInfo; import com.bx.imcommon.model.PrivateMessageInfo;
import com.bx.imserver.websocket.WebsocketServer; import com.bx.imserver.ws.WebsocketServer;
import com.bx.imserver.websocket.processor.MessageProcessor; import com.bx.imserver.processor.MessageProcessor;
import com.bx.imserver.websocket.processor.ProcessorFactory; import com.bx.imserver.processor.ProcessorFactory;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;

4
im-server/src/main/java/com/bx/imserver/websocket/WebsocketChannelCtxHolder.java → im-server/src/main/java/com/bx/imserver/util/UserChannelCtxHolder.java

@ -1,4 +1,4 @@
package com.bx.imserver.websocket; package com.bx.imserver.util;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
@ -6,7 +6,7 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
public class WebsocketChannelCtxHolder { public class UserChannelCtxHolder {
/* /*
* 维护userId和ctx的关联关系格式:Map<userId,ctx> * 维护userId和ctx的关联关系格式:Map<userId,ctx>

11
im-server/src/main/java/com/bx/imserver/websocket/WebSocketHandler.java → 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.contant.RedisKey;
import com.bx.imcommon.enums.IMCmdType; import com.bx.imcommon.enums.IMCmdType;
import com.bx.imcommon.model.IMSendInfo; 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.util.SpringContextHolder;
import com.bx.imserver.websocket.processor.MessageProcessor; import com.bx.imserver.util.UserChannelCtxHolder;
import com.bx.imserver.websocket.processor.ProcessorFactory;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler; import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.timeout.IdleState; import io.netty.handler.timeout.IdleState;
@ -66,11 +67,11 @@ public class WebSocketHandler extends SimpleChannelInboundHandler<IMSendInfo> {
public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
AttributeKey<Long> attr = AttributeKey.valueOf("USER_ID"); AttributeKey<Long> attr = AttributeKey.valueOf("USER_ID");
Long userId = ctx.channel().attr(attr).get(); 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())){ if(context != null && ctx.channel().id().equals(context.channel().id())){
// 移除channel // 移除channel
WebsocketChannelCtxHolder.removeChannelCtx(userId); UserChannelCtxHolder.removeChannelCtx(userId);
// 用户下线 // 用户下线
RedisTemplate redisTemplate = SpringContextHolder.getBean("redisTemplate"); RedisTemplate redisTemplate = SpringContextHolder.getBean("redisTemplate");
String key = RedisKey.IM_USER_SERVER_ID + userId; String key = RedisKey.IM_USER_SERVER_ID + userId;

6
im-server/src/main/java/com/bx/imserver/websocket/WebsocketServer.java → 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.imcommon.contant.RedisKey;
import com.bx.imserver.websocket.endecode.MessageProtocolDecoder; import com.bx.imserver.ws.endecode.MessageProtocolDecoder;
import com.bx.imserver.websocket.endecode.MessageProtocolEncoder; import com.bx.imserver.ws.endecode.MessageProtocolEncoder;
import io.netty.bootstrap.ServerBootstrap; import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*; import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup;

2
im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolDecoder.java → 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.bx.imcommon.model.IMSendInfo;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;

2
im-server/src/main/java/com/bx/imserver/websocket/endecode/MessageProtocolEncoder.java → 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.bx.imcommon.model.IMSendInfo;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;

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

@ -2,14 +2,14 @@ var websock = null;
let rec; //断线重连后,延迟5秒重新创建WebSocket连接 rec用来存储延迟请求的代码 let rec; //断线重连后,延迟5秒重新创建WebSocket连接 rec用来存储延迟请求的代码
let isConnect = false; //连接标识 避免重复连接 let isConnect = false; //连接标识 避免重复连接
let wsurl = ""; let wsurl = "";
let $store = null; let userId = null;
let messageCallBack = null; let messageCallBack = null;
let openCallBack = null; let openCallBack = null;
let hasLogin = false; let hasLogin = false;
let createWebSocket = (url, store) => { let createWebSocket = (url, id) => {
$store = store;
wsurl = url; wsurl = url;
userId = id;
initWebSocket(); initWebSocket();
}; };
@ -45,7 +45,7 @@ let initWebSocket = () => {
// 发送登录命令 // 发送登录命令
let loginInfo = { let loginInfo = {
cmd: 0, cmd: 0,
data: {userId: $store.state.userStore.userInfo.id} data: {userId: userId}
}; };
websock.send(JSON.stringify(loginInfo)); websock.send(JSON.stringify(loginInfo));
@ -88,7 +88,7 @@ var heartCheck = {
let heartBeat = { let heartBeat = {
cmd: 1, cmd: 1,
data: { data: {
userId: $store.state.userStore.userInfo.id userId: userId
} }
}; };
websock.send(JSON.stringify(heartBeat)) websock.send(JSON.stringify(heartBeat))
@ -139,8 +139,6 @@ function onopen(callback) {
} }
// 将方法暴露出去 // 将方法暴露出去
export { export {
createWebSocket, createWebSocket,

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

@ -63,7 +63,7 @@
init(userInfo) { init(userInfo) {
this.$store.commit("setUserInfo", userInfo); this.$store.commit("setUserInfo", userInfo);
this.$store.commit("initStore"); 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.$wsApi.onopen(() => {
this.pullUnreadMessage(); this.pullUnreadMessage();
}); });

Loading…
Cancel
Save