Prechádzať zdrojové kódy

feat:修复小节评分因异常断开导致的数据存储失败

Joburgess 4 rokov pred
rodič
commit
dd6980598a

+ 53 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/WebSocketClientDetail.java

@@ -0,0 +1,53 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.web.socket.WebSocketSession;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/8/4 0004
+ */
+public class WebSocketClientDetail {
+
+    private WebSocketSession session;
+
+    @ApiModelProperty(value = "用户登录时间")
+    private Date loginTime;
+
+    @ApiModelProperty(value = "用户退出或断开时间")
+    private Date logoutTime;
+
+    public WebSocketClientDetail() {
+    }
+
+    public WebSocketClientDetail(WebSocketSession session, Date loginTime) {
+        this.session = session;
+        this.loginTime = loginTime;
+    }
+
+    public WebSocketSession getSession() {
+        return session;
+    }
+
+    public void setSession(WebSocketSession session) {
+        this.session = session;
+    }
+
+    public Date getLoginTime() {
+        return loginTime;
+    }
+
+    public void setLoginTime(Date loginTime) {
+        this.loginTime = loginTime;
+    }
+
+    public Date getLogoutTime() {
+        return logoutTime;
+    }
+
+    public void setLogoutTime(Date logoutTime) {
+        this.logoutTime = logoutTime;
+    }
+}

+ 4 - 8
mec-biz/src/main/java/com/ym/mec/biz/handler/WebSocketHandler.java

@@ -7,10 +7,7 @@ import be.tarsos.dsp.pitch.PitchProcessor;
 import be.tarsos.dsp.util.PitchConverter;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.ym.mec.biz.dal.dto.MusicPitchDetailDto;
-import com.ym.mec.biz.dal.dto.SoundCompareHelper;
-import com.ym.mec.biz.dal.dto.WavHeader;
-import com.ym.mec.biz.dal.dto.WebSocketInfo;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.service.SoundSocketService;
 import com.ym.mec.biz.service.SysMusicCompareRecordService;
 import com.ym.mec.common.constant.CommonConstants;
@@ -24,7 +21,6 @@ import org.springframework.web.socket.*;
 import org.springframework.web.socket.handler.AbstractWebSocketHandler;
 
 import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.UnsupportedAudioFileException;
 import java.io.File;
 import java.io.IOException;
 import java.io.RandomAccessFile;
@@ -45,7 +41,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
     private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketHandler.class);
 
     //存储客户端链接
-    public static final Map<String, WebSocketSession> WS_CLIENTS = new ConcurrentHashMap<>();
+    public static final Map<String, WebSocketClientDetail> WS_CLIENTS = new ConcurrentHashMap<>();
 
     private final BigDecimal oneHundred = new BigDecimal(100);
     private final float simpleRate = 44100;
@@ -76,7 +72,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
     public void afterConnectionEstablished(WebSocketSession session) throws Exception {
         String phone = session.getPrincipal().getName().split(":")[1];
         LOGGER.info("{}上线", phone);
-        WS_CLIENTS.put(phone, session);
+        WS_CLIENTS.put(phone, new WebSocketClientDetail(session, new Date()));
         super.afterConnectionEstablished(session);
     }
 
@@ -579,7 +575,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
         LOGGER.info("小节频分:{}", JSON.toJSONString(webSocketInfo));
 
         //推送结果
-        WS_CLIENTS.get(phone).sendMessage(new TextMessage(JSON.toJSONString(webSocketInfo)));
+        WS_CLIENTS.get(phone).getSession().sendMessage(new TextMessage(JSON.toJSONString(webSocketInfo)));
         return webSocketInfo;
     }
 }

+ 4 - 4
mec-teacher/src/main/java/com/ym/mec/teacher/controller/SoundController.java

@@ -54,10 +54,10 @@ public class SoundController extends BaseController {
         if(!WebSocketHandler.WS_CLIENTS.containsKey(phone)){
             return failed("未上线");
         }
-        if(!WebSocketHandler.WS_CLIENTS.get(phone).isOpen()){
+        if(!WebSocketHandler.WS_CLIENTS.get(phone).getSession().isOpen()){
             return failed("已离线");
         }
-        WebSocketHandler.WS_CLIENTS.get(phone).sendMessage(new TextMessage(message));
+        WebSocketHandler.WS_CLIENTS.get(phone).getSession().sendMessage(new TextMessage(message));
         return succeed();
     }
 
@@ -66,10 +66,10 @@ public class SoundController extends BaseController {
         if(!WebSocketHandler.WS_CLIENTS.containsKey(phone)){
             return failed("未上线");
         }
-        if(!WebSocketHandler.WS_CLIENTS.get(phone).isOpen()){
+        if(!WebSocketHandler.WS_CLIENTS.get(phone).getSession().isOpen()){
             return failed("已离线");
         }
-        WebSocketHandler.WS_CLIENTS.get(phone).close();
+        WebSocketHandler.WS_CLIENTS.get(phone).getSession().close();
         return succeed();
     }