From 2463d1b5bbfcc51f75c8fc624fb706996dac8068 Mon Sep 17 00:00:00 2001 From: Chopper711 Date: Fri, 10 May 2024 17:04:32 +0800 Subject: [PATCH] =?UTF-8?q?=E9=AA=8C=E8=AF=81=20TOKEN?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lili/controller/im/WebSocketServer.java | 49 ++++++++++--------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/im-api/src/main/java/cn/lili/controller/im/WebSocketServer.java b/im-api/src/main/java/cn/lili/controller/im/WebSocketServer.java index 97db2ad9..509b2706 100644 --- a/im-api/src/main/java/cn/lili/controller/im/WebSocketServer.java +++ b/im-api/src/main/java/cn/lili/controller/im/WebSocketServer.java @@ -1,6 +1,7 @@ package cn.lili.controller.im; import cn.hutool.json.JSONUtil; +import cn.lili.cache.Cache; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.security.enums.UserEnums; @@ -15,18 +16,21 @@ import cn.lili.modules.im.service.ImTalkService; import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import java.io.IOException; +import java.util.concurrent.ConcurrentHashMap; +import javax.websocket.OnClose; +import javax.websocket.OnError; +import javax.websocket.OnMessage; +import javax.websocket.OnOpen; +import javax.websocket.Session; +import javax.websocket.server.PathParam; +import javax.websocket.server.ServerEndpoint; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; -import javax.websocket.*; -import javax.websocket.server.PathParam; -import javax.websocket.server.ServerEndpoint; -import java.io.IOException; -import java.util.concurrent.ConcurrentHashMap; - /** * @author liushuai */ @@ -36,19 +40,16 @@ import java.util.concurrent.ConcurrentHashMap; @Slf4j @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class WebSocketServer { + /** + * 在线人数 PS 注意,只能单节点,如果多节点部署需要自行寻找方案 + */ + private static ConcurrentHashMap sessionPools = new ConcurrentHashMap<>(); /** * 消息服务 */ private final ImMessageService imMessageService; - private final ImTalkService imTalkService; - - /** - * 在线人数 - * PS 注意,只能单节点,如果多节点部署需要自行寻找方案 - */ - private static ConcurrentHashMap sessionPools = new ConcurrentHashMap<>(); - + private final Cache cache; /** * 建立连接 @@ -58,15 +59,15 @@ public class WebSocketServer { @OnOpen public void onOpen(@PathParam("accessToken") String accessToken, Session session) { - - AuthUser authUser = UserContext.getAuthUser(accessToken); + AuthUser authUser = UserContext.getAuthUser(cache, accessToken); String sessionId = UserEnums.STORE.equals(authUser.getRole()) ? authUser.getStoreId() : authUser.getId(); //如果已有会话,则进行下线提醒。 if (sessionPools.containsKey(sessionId)) { log.info("用户重复登陆,旧用户下线"); Session oldSession = sessionPools.get(sessionId); - sendMessage(oldSession, MessageVO.builder().messageResultType(MessageResultType.OFFLINE).result("用户异地登陆").build()); + sendMessage(oldSession, + MessageVO.builder().messageResultType(MessageResultType.OFFLINE).result("用户异地登陆").build()); try { oldSession.close(); } catch (Exception e) { @@ -116,9 +117,10 @@ public class WebSocketServer { ImMessage imMessage = new ImMessage(messageOperation); imMessageService.save(imMessage); //修改最后消息信息 - imTalkService.update(new LambdaUpdateWrapper().eq(ImTalk::getId, messageOperation.getTalkId()).set(ImTalk::getLastTalkMessage, messageOperation.getContext()) - .set(ImTalk::getLastTalkTime, imMessage.getCreateTime()) - .set(ImTalk::getLastMessageType, imMessage.getMessageType())); + imTalkService.update(new LambdaUpdateWrapper().eq(ImTalk::getId, messageOperation.getTalkId()) + .set(ImTalk::getLastTalkMessage, messageOperation.getContext()) + .set(ImTalk::getLastTalkTime, imMessage.getCreateTime()) + .set(ImTalk::getLastMessageType, imMessage.getMessageType())); //发送消息 sendMessage(messageOperation.getTo(), new MessageVO(MessageResultType.MESSAGE, imMessage)); break; @@ -128,10 +130,12 @@ public class WebSocketServer { } break; case UNREAD: - sendMessage(authUser.getId(), new MessageVO(MessageResultType.UN_READ, imMessageService.unReadMessages(accessToken))); + sendMessage(authUser.getId(), + new MessageVO(MessageResultType.UN_READ, imMessageService.unReadMessages(accessToken))); break; case HISTORY: - sendMessage(authUser.getId(), new MessageVO(MessageResultType.HISTORY, imMessageService.historyMessage(accessToken, messageOperation.getTo()))); + sendMessage(authUser.getId(), new MessageVO(MessageResultType.HISTORY, + imMessageService.historyMessage(accessToken, messageOperation.getTo()))); break; default: break; @@ -176,5 +180,4 @@ public class WebSocketServer { log.error("socket异常: {}", session.getId(), throwable); } - }