验证 TOKEN
This commit is contained in:
parent
88ab071ac7
commit
2463d1b5bb
@ -1,6 +1,7 @@
|
|||||||
package cn.lili.controller.im;
|
package cn.lili.controller.im;
|
||||||
|
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import cn.lili.cache.Cache;
|
||||||
import cn.lili.common.security.AuthUser;
|
import cn.lili.common.security.AuthUser;
|
||||||
import cn.lili.common.security.context.UserContext;
|
import cn.lili.common.security.context.UserContext;
|
||||||
import cn.lili.common.security.enums.UserEnums;
|
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.druid.util.StringUtils;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
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.RequiredArgsConstructor;
|
||||||
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.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
import org.springframework.stereotype.Component;
|
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
|
* @author liushuai
|
||||||
*/
|
*/
|
||||||
@ -36,19 +40,16 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||||
public class WebSocketServer {
|
public class WebSocketServer {
|
||||||
|
/**
|
||||||
|
* 在线人数 PS 注意,只能单节点,如果多节点部署需要自行寻找方案
|
||||||
|
*/
|
||||||
|
private static ConcurrentHashMap<String, Session> sessionPools = new ConcurrentHashMap<>();
|
||||||
/**
|
/**
|
||||||
* 消息服务
|
* 消息服务
|
||||||
*/
|
*/
|
||||||
private final ImMessageService imMessageService;
|
private final ImMessageService imMessageService;
|
||||||
|
|
||||||
private final ImTalkService imTalkService;
|
private final ImTalkService imTalkService;
|
||||||
|
private final Cache cache;
|
||||||
/**
|
|
||||||
* 在线人数
|
|
||||||
* PS 注意,只能单节点,如果多节点部署需要自行寻找方案
|
|
||||||
*/
|
|
||||||
private static ConcurrentHashMap<String, Session> sessionPools = new ConcurrentHashMap<>();
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 建立连接
|
* 建立连接
|
||||||
@ -58,15 +59,15 @@ public class WebSocketServer {
|
|||||||
@OnOpen
|
@OnOpen
|
||||||
public void onOpen(@PathParam("accessToken") String accessToken, Session session) {
|
public void onOpen(@PathParam("accessToken") String accessToken, Session session) {
|
||||||
|
|
||||||
|
AuthUser authUser = UserContext.getAuthUser(cache, accessToken);
|
||||||
AuthUser authUser = UserContext.getAuthUser(accessToken);
|
|
||||||
|
|
||||||
String sessionId = UserEnums.STORE.equals(authUser.getRole()) ? authUser.getStoreId() : authUser.getId();
|
String sessionId = UserEnums.STORE.equals(authUser.getRole()) ? authUser.getStoreId() : authUser.getId();
|
||||||
//如果已有会话,则进行下线提醒。
|
//如果已有会话,则进行下线提醒。
|
||||||
if (sessionPools.containsKey(sessionId)) {
|
if (sessionPools.containsKey(sessionId)) {
|
||||||
log.info("用户重复登陆,旧用户下线");
|
log.info("用户重复登陆,旧用户下线");
|
||||||
Session oldSession = sessionPools.get(sessionId);
|
Session oldSession = sessionPools.get(sessionId);
|
||||||
sendMessage(oldSession, MessageVO.builder().messageResultType(MessageResultType.OFFLINE).result("用户异地登陆").build());
|
sendMessage(oldSession,
|
||||||
|
MessageVO.builder().messageResultType(MessageResultType.OFFLINE).result("用户异地登陆").build());
|
||||||
try {
|
try {
|
||||||
oldSession.close();
|
oldSession.close();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -116,7 +117,8 @@ public class WebSocketServer {
|
|||||||
ImMessage imMessage = new ImMessage(messageOperation);
|
ImMessage imMessage = new ImMessage(messageOperation);
|
||||||
imMessageService.save(imMessage);
|
imMessageService.save(imMessage);
|
||||||
//修改最后消息信息
|
//修改最后消息信息
|
||||||
imTalkService.update(new LambdaUpdateWrapper<ImTalk>().eq(ImTalk::getId, messageOperation.getTalkId()).set(ImTalk::getLastTalkMessage, messageOperation.getContext())
|
imTalkService.update(new LambdaUpdateWrapper<ImTalk>().eq(ImTalk::getId, messageOperation.getTalkId())
|
||||||
|
.set(ImTalk::getLastTalkMessage, messageOperation.getContext())
|
||||||
.set(ImTalk::getLastTalkTime, imMessage.getCreateTime())
|
.set(ImTalk::getLastTalkTime, imMessage.getCreateTime())
|
||||||
.set(ImTalk::getLastMessageType, imMessage.getMessageType()));
|
.set(ImTalk::getLastMessageType, imMessage.getMessageType()));
|
||||||
//发送消息
|
//发送消息
|
||||||
@ -128,10 +130,12 @@ public class WebSocketServer {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case UNREAD:
|
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;
|
break;
|
||||||
case HISTORY:
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -176,5 +180,4 @@ public class WebSocketServer {
|
|||||||
log.error("socket异常: {}", session.getId(), throwable);
|
log.error("socket异常: {}", session.getId(), throwable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user