fuliqi
2024-10-17 8546b3d285af4235a0ef615a0c6e89486ae2c806
src/main/java/com/ycl/jxkg/server/WebsocketServer.java
@@ -1,6 +1,13 @@
package com.ycl.jxkg.server;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ycl.jxkg.domain.query.WebSocketQuery;
import com.ycl.jxkg.domain.vo.WebsocketDataVO;
import com.ycl.jxkg.enums.WebsocketCommendEnum;
import com.ycl.jxkg.service.EducationResourceService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import javax.websocket.OnClose;
@@ -12,6 +19,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.CopyOnWriteArraySet;
/**
@@ -22,6 +30,12 @@
@Slf4j
@ServerEndpoint("/websocket/{userId}")
public class WebsocketServer {
    private static ApplicationContext applicationContext;
    public static void setApplicationContext(ApplicationContext context) {
        applicationContext = context;
    }
    /**
     * 线程安全的无序的集合
@@ -56,6 +70,20 @@
    @OnMessage
    public void onMessage(String message) {
        WebSocketQuery webSocketQuery = JSONObject.parseObject(message, WebSocketQuery.class);
        String command = webSocketQuery.getCommand();
        Integer userId = webSocketQuery.getId();
        if(WebsocketCommendEnum.RECORD_STUDY_TIME.getCommand().equals(command)){
            log.info("存消息");
            EducationResourceService educationResourceService = applicationContext.getBean(EducationResourceService.class);
            educationResourceService.recordTime(userId);
        }
        // 会议操作
        if (WebsocketCommendEnum.MUTE.getCommand().equals(command) || WebsocketCommendEnum.OPEN_CAMERA.getCommand().equals(command) || WebsocketCommendEnum.KICK_OUT.getCommand().equals(command)) {
            WebsocketDataVO websocketDataVO = new WebsocketDataVO();
            websocketDataVO.setCommend(command);
            sendOneMessage(userId, JSON.toJSONString(websocketDataVO));
        }
        log.info("【WebSocket消息】收到客户端消息:" + message);
    }
@@ -117,4 +145,15 @@
        }
    }
    /**
     * 校验用户是否在线
     *
     * @param userId
     * @return
     */
    public Boolean checkUserOnline(Integer userId) {
        Session session = SESSION_POOL.get(userId);
        return Objects.nonNull(session);
    }
}