|
@@ -0,0 +1,99 @@
|
|
|
+package com.fdkankan.fusion.websocket;
|
|
|
+
|
|
|
+
|
|
|
+import com.fdkankan.fusion.common.ResultData;
|
|
|
+import com.fdkankan.fusion.websocket.enums.CommonEnum;
|
|
|
+import com.fdkankan.fusion.websocket.service.MessageService;
|
|
|
+import com.fdkankan.fusion.websocket.vo.WsMessage;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
+
|
|
|
+import javax.websocket.*;
|
|
|
+import javax.websocket.server.PathParam;
|
|
|
+import javax.websocket.server.ServerEndpoint;
|
|
|
+import java.io.IOException;
|
|
|
+
|
|
|
+@Component
|
|
|
+@ServerEndpoint(value = "/ws/{caseId}",configurator = WebSocketConfigurator.class)
|
|
|
+public class MyWebSocketServer {
|
|
|
+
|
|
|
+ private Logger webSocketLogger = LoggerFactory.getLogger("webSocketLogger");
|
|
|
+
|
|
|
+ private static SessionService sessionService;
|
|
|
+
|
|
|
+ private static MessageService messageService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ public void setWebSocketServerHandler(SessionService sessionService, MessageService messageService) {
|
|
|
+ MyWebSocketServer.sessionService = sessionService;
|
|
|
+ MyWebSocketServer.messageService = messageService;
|
|
|
+ }
|
|
|
+
|
|
|
+ @OnOpen
|
|
|
+ public void onOpen(Session session, @PathParam("caseId") Integer caseId) {
|
|
|
+ try {
|
|
|
+ Long startTime = System.currentTimeMillis();
|
|
|
+ session.getUserProperties().put("caseId" , caseId);
|
|
|
+ sessionService.onOpen(session, caseId);
|
|
|
+ sessionService.sendSingleBySession(WsMessage.okResult(CommonEnum.ON_OPEN, ResultData.ok("连接建立成功")),session);
|
|
|
+ Long endTime = System.currentTimeMillis();
|
|
|
+ if(endTime -startTime > 100){
|
|
|
+ webSocketLogger.info("WebSocketServer|onOpenStart|" + "session = [" + session.getId() + "]" +",startTime = "+ startTime);
|
|
|
+ webSocketLogger.info("WebSocketServer|onOpenOver|" + "session = [" + session.getId() + "]" +",endTime = "+ endTime+", totalTime = "+(endTime-startTime));
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @OnClose
|
|
|
+ public void onClose(Session session) {
|
|
|
+ try {
|
|
|
+ sessionService.onClose(session);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @OnError
|
|
|
+ public void onError(Session session, Throwable error) {
|
|
|
+ if (error instanceof IOException) {
|
|
|
+ webSocketLogger.error("错误,断开链接{},{}", session, error.getMessage());
|
|
|
+ } else {
|
|
|
+ webSocketLogger.error("错误,断开链接{}", session, error);
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ session.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 收到客户端消息后调用的方法
|
|
|
+ *
|
|
|
+ * @param msg 客户端发送过来的消息
|
|
|
+ */
|
|
|
+ @OnMessage
|
|
|
+ public void onMessage(String msg, Session session) {
|
|
|
+ try {
|
|
|
+ if(StringUtils.isEmpty(msg)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Long startTime = System.currentTimeMillis();
|
|
|
+ messageService.onMessage(msg, session);
|
|
|
+ Long endTime = System.currentTimeMillis();
|
|
|
+ if(endTime -startTime > 100){
|
|
|
+ webSocketLogger.info("WebSocketServer|onMessageStart|" + "request = "+ msg + "session = [" + session.getId() + "]"+ ",startTime = "+ startTime);
|
|
|
+ webSocketLogger.info("WebSocketServer|onMessageOver|" + "request = "+ msg +"session = [" + session.getId() + "]" +",endTime = "+ endTime+", totalTime = "+(endTime-startTime));
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|