| package com.ruoyi.utils.websocket.service; | 
|   | 
| import com.alibaba.fastjson2.JSONObject; | 
| import com.ruoyi.app.position.domain.ArdAppPosition; | 
| import com.ruoyi.app.position.service.IArdAppPositionService; | 
| import com.ruoyi.app.position.service.impl.AppPositionPush; | 
| import com.ruoyi.app.position.service.impl.AppPositionPushService; | 
| import com.ruoyi.app.position.service.impl.ArdAppPositionServiceImpl; | 
| import com.ruoyi.common.core.domain.entity.SysUser; | 
| import com.ruoyi.common.utils.spring.SpringUtils; | 
| import com.ruoyi.system.service.ISysUserService; | 
| import com.ruoyi.utils.websocket.util.WebSocketUtils; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Component; | 
|   | 
| import javax.annotation.Resource; | 
| import javax.websocket.*; | 
| import javax.websocket.server.PathParam; | 
| import javax.websocket.server.ServerEndpoint; | 
| import java.io.IOException; | 
| import java.util.*; | 
| import java.util.stream.Collectors; | 
|   | 
| /** | 
|  * @ClassName ChatServerEndpoint | 
|  * @Description: websocket操作类 | 
|  * @Author 刘苏义 | 
|  * @Date 2023/1/27 7:42 | 
|  * @Version 1.0 | 
|  */ | 
|   | 
| @Component | 
| @Slf4j(topic = "websocket") | 
| @ServerEndpoint("/websocket/{userId}") | 
| public class ChatServerEndpoint { | 
|     @OnOpen | 
|     public void openSession(@PathParam("userId") String userId, Session session) { | 
|         WebSocketUtils.ONLINE_USER_SESSIONS.put(userId, session); | 
|         String message = "用户[" + userId + "] 成功连接!"; | 
|         log.info("用户登录:" + message); | 
|         WebSocketUtils.sendMessage(session, message); | 
|         //region 旧方法 | 
| //        //每个用户连接时,启动初始所有app用户位置发送 | 
| //        AppPositionPush.initDataMap.put(userId,AppPositionPush.getAppPositionList()); | 
| //        AppPositionPush.initPushTask(userId,session,3000); | 
|         //endregion | 
|     } | 
|   | 
|     @OnMessage | 
|     public void onMessage(@PathParam("userId") String userId, String message) { | 
|         log.info("收到消息:" + message); | 
|         Session session = WebSocketUtils.ONLINE_USER_SESSIONS.get(userId); | 
|         WebSocketUtils.sendMessage(session, message); | 
| //        sendMessageAll("用户[" + userid + "] : " + message); | 
|         // 根据用户新的频率重新调整定时任务 | 
|         AppPositionPushService.messageHandler(userId,message); | 
|     } | 
|   | 
|     @OnClose | 
|     public void onClose(@PathParam("userId") String userId, Session session) { | 
|         //当前的Session 移除 | 
|         WebSocketUtils.ONLINE_USER_SESSIONS.remove(userId); | 
|         //并且通知其他人当前用户已经离开聊天室了 | 
|         String message = "用户[" + userId + "] 断开连接!"; | 
|         //sendMessage(session,message); | 
|         log.info("消息:" + message); | 
|         try { | 
|             session.close(); | 
|             AppPositionPushService.stopHandler(userId); | 
|         } catch (IOException e) { | 
|             log.error("onClose error", e); | 
|         } | 
|     } | 
|   | 
|     @OnError | 
|     public void onError(Session session, Throwable throwable) { | 
|         try { | 
|             session.close(); | 
|         } catch (IOException e) { | 
|             log.error("onError excepiton", e); | 
|         } | 
|         log.info("Throwable msg " + throwable.getMessage()); | 
|     } | 
|   | 
| } |