| | |
| | | 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; |
| | |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.util.concurrent.CopyOnWriteArraySet; |
| | | |
| | | /** |
| | |
| | | @Slf4j |
| | | @ServerEndpoint("/websocket/{userId}") |
| | | public class WebsocketServer { |
| | | |
| | | private static ApplicationContext applicationContext; |
| | | |
| | | public static void setApplicationContext(ApplicationContext context) { |
| | | applicationContext = context; |
| | | } |
| | | |
| | | /** |
| | | * 线程安全的无序的集合 |
| | |
| | | |
| | | @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); |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 校验用户是否在线 |
| | | * |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | public Boolean checkUserOnline(Integer userId) { |
| | | Session session = SESSION_POOL.get(userId); |
| | | return Objects.nonNull(session); |
| | | } |
| | | |
| | | } |