本文没有写完~~~~
聊天相关数据结构:
我们初步设计了如下几个数据结构。
//存放 sessionId 与 userId 的map
private Map<String,String> sessionId_userId =new HashMap<>();
// 用于存储用户与群组的关联关系,键为用户ID,值为群组ID列表 一个用户可以加入多个群组 它是一个Map,键是用户ID,值是群组ID列表
private Map<String, List<String>> userGroups = new HashMap<>();
// 用于存储群组信息,键为群组ID,值包含在线用户会话列表和历史消息列表
private Map<String, GroupInfo> groupInfos = new HashMap<>();
用户通过socket和服务端连接的时候,都会传递
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
LOGGER.info("WebSocket收到的消息: {}", message.getPayload());
// 将消息反序列化,假设消息是JSON格式,这里解析为Message对象(下面定义)
Message msg = objectMapper.readValue(message.getPayload().toString(), Message.class);
String groupId = msg.getGroupId();
String userId=msg.getUserId();
int flag=this.checkUserIdAndSessionId(session.getId(),userId); //检查userId和sessionId是否匹配
//flag==0 说明userId和sessionId匹配 ,不做更多的操作 直接执行下面的代码
if(flag==2){ //userId一致 但是 sessionId不一致,说明用户重新建立了session,要把原来该用户相关的session等全部删除掉
//找到这个用户下原来所有的session,然后全部删除掉
for (Map.Entry<String, String> entry : sessionId_userId.entrySet()) {
String storedSessionId = entry.getKey();
String storedUserId = entry.getValue();
if (storedUserId.e