浏览代码

feat: 增加disconnectSocket

TIANYONG 1 年之前
父节点
当前提交
89b5364355

+ 5 - 0
src/helpers/communication.ts

@@ -357,4 +357,9 @@ export const addSocketStatus = (callback: CallBack) => {
 /** 取消检测socket链接状态 */
 export const removeSocketStatus = (callback: CallBack) => {
 	removeListenerMessage("socketConnectSuccessReport", callback);
+};
+
+/** 检查APP端websocket状态 */
+export const api_disconnectSocket = () => {
+	return promisefiyPostMessage({ api: "disconnectSocket" });
 };

+ 19 - 2
src/page-instrument/evaluat-model/delay-check/index.tsx

@@ -27,7 +27,7 @@ import icon_3_0 from "./image/icon_3_0.png";
 import icon_3_1 from "./image/icon_3_1.png";
 import icon_3_2 from "./image/icon_3_2.png";
 import iconBack from "./image/icon-back.png";
-import { evaluatingData } from "/src/view/evaluating";
+import { evaluatingData, startCheckDelay } from "/src/view/evaluating";
 import { IPostMessage } from "/src/utils/native-message";
 import state from "/src/state";
 
@@ -37,6 +37,7 @@ export default defineComponent({
 	setup(props, { emit }) {
 		// startTune定时器
 		let startTuneTimer: any = null
+		let checkErjiTimer: any = null
 		const anim = ref();
 		const data = reactive({
 			show: false,
@@ -52,6 +53,8 @@ export default defineComponent({
 			startTuneResult: false, // 发送startTune后,能否收到正常的result回调
 			abnormalPopShow: false, // 异常弹窗
 		});
+		// 调用'isWiredHeadsetOn'最小时间间隔,1秒
+		let minInterval = 0;
 		/** 获取耳机状态 */
 		const getEarphoneState = async () => {
 			const res = await getEarphone();
@@ -61,6 +64,12 @@ export default defineComponent({
 		/** 持续检测耳机状态 */
 		const keepCheckEarphone = async () => {
 			if (data.step >= 7 || !data.show) return;
+			let momentTime = +new Date()
+			// console.log('间隔123',momentTime - minInterval)
+			if (momentTime - minInterval < 1000) {
+			  return
+			}
+			minInterval = momentTime
 			evaluatingData.earphone = await getEarphoneState();
 			// console.log('erji',evaluatingData.earphone,data.step)
 			if (evaluatingData.earphone) {
@@ -75,7 +84,7 @@ export default defineComponent({
 					data.checkStatus = "init"
 				}
 			}
-			setTimeout(() => {
+			checkErjiTimer = setTimeout(() => {
 				keepCheckEarphone();
 			}, 1000);
 		};
@@ -109,18 +118,22 @@ export default defineComponent({
 		}
 
 		onMounted(() => {
+			clearTimeout(checkErjiTimer)
 			data.show = true;
 			sendResult(listenerResult);
 			addCheckPlayEnd(checkAudioPlayEnd);
 			keepCheckEarphone();
 		});
 		onUnmounted(() => {
+			clearTimeout(checkErjiTimer)
 			data.show = false;
 			removeResult(listenerResult);
 			removeCheckPlayEnd(checkAudioPlayEnd);
 		});
 
 		const handleStartTune = async () => {
+			// 检测APP端socket状态
+			await startCheckDelay();
 			// data.step = evaluatingData.earphone ? 4 : 3;
 			if (evaluatingData.earphone) {
 				if (data.step <= 5) {
@@ -183,16 +196,19 @@ export default defineComponent({
 		};
 
 		const resetCheck = () => {
+			api_toggleTune("stop");
 			clearTimeout(data.startAbnormalTimer);
 			data.abnormalPopShow = false
 			data.step = 2
 			data.checkStatus = 'init'
 			data.count = 0
 			data.startTuneResult = false
+			evaluatingData.delayCheckSocketError = false
 		}
 		watch(
 			() => evaluatingData.delayCheckSocketError,
 			() => {
+				// 监听到网络异常,重置延迟检测状态
 				if (evaluatingData.delayCheckSocketError) {
 					resetCheck()
 				}
@@ -210,6 +226,7 @@ export default defineComponent({
 					{/*返回按钮*/}
 					<img class={styles.delayBackBtn} src={iconBack} onClick={() => {
 						clearTimeout(startTuneTimer)
+						api_toggleTune("stop");
 						emit("back")
 					}} />
 					{/* 异常提示弹窗 */}

+ 4 - 2
src/page-instrument/evaluat-model/index.tsx

@@ -1,5 +1,5 @@
 import { Transition, defineComponent, onMounted, reactive, watch } from "vue";
-import { connectWebsocket, evaluatingData, handleEndBegin, handleStartBegin, handleStartEvaluat, handleViewReport } from "/src/view/evaluating";
+import { connectWebsocket, evaluatingData, handleEndBegin, handleStartBegin, handleStartEvaluat, handleViewReport, startCheckDelay } from "/src/view/evaluating";
 import Earphone from "./earphone";
 import styles from "./index.module.less";
 import SoundEffect from "./sound-effect";
@@ -304,7 +304,9 @@ export default defineComponent({
       showToast("上传成功");
     };
 
-    const startBtnHandle = () => {
+    const startBtnHandle = async () => {
+      // 检测APP端socket状态
+      await startCheckDelay();
       handleConnect();
       handleStartBegin(calculateInfo.firstNoteTime);
     }

+ 6 - 1
src/page-instrument/header-top/settting/index.tsx

@@ -151,9 +151,14 @@ export default defineComponent({
 									extra: () => (
 										<Switch
 											v-model={state.setting.camera}
-											onChange={(value) => {
+											onChange={ async (value) => {
 												if (value) {
 													api_openCamera();
+													const res = await api_openCamera();
+													// 没有授权
+													if (res?.content?.reson) {
+														state.setting.camera = false
+													}
 												} else {
 													api_closeCamera();
 												}

+ 6 - 2
src/page-instrument/view-detail/index.tsx

@@ -90,7 +90,7 @@ export default defineComponent({
         }
       }
     };
-    onBeforeMount(() => {
+    onBeforeMount(async () => {
       console.time("渲染加载耗时");
       api_keepScreenLongLight();
       getAPPData();
@@ -99,7 +99,11 @@ export default defineComponent({
       if (settting) {
         state.setting = settting;
         if (state.setting.camera) {
-          api_openCamera();
+          const res = await api_openCamera();
+          // 没有授权
+          if (res?.content?.reson) {
+            state.setting.camera = false
+          }
         }
       }
     });

+ 22 - 4
src/view/evaluating/index.tsx

@@ -27,6 +27,7 @@ import {
 	removeAccompanyError,
 	addSocketStatus,
 	removeSocketStatus,
+	api_disconnectSocket,
 } from "/src/helpers/communication";
 import state, {
 	IPlayState,
@@ -72,7 +73,9 @@ export const evaluatingData = reactive({
 	isDisabledPlayMusic: false,
 	/** socket异常状态弹窗 */
 	socketErrorPop: false,
+	/** 异常提示 */
 	errorContents: '',
+	/** 是否显示异常弹窗按钮 */
 	showConfirmBtn: false,
 	delayCheckSocketError: false,
 });
@@ -88,8 +91,8 @@ export const handleStartEvaluat = async () => {
 			handleStopPlay();
 		} else {
 			// socket未连接
-			evaluatingData.socketErrorPop = true
-			evaluatingData.errorContents = '网络异常,正在重新链接...'
+			// evaluatingData.socketErrorPop = true
+			// evaluatingData.errorContents = '网络异常,正在重新链接...'
 		}
 		
 	}
@@ -100,6 +103,20 @@ export const handleStartEvaluat = async () => {
 	}
 };
 
+/** 开始评测 & 延迟检测开始按钮 */
+export const startCheckDelay = async () => {
+	// 评测前先检查APP端的websocket状态
+	const res = await api_checkSocketStatus();
+	if (res?.content?.status === "connected") {
+		handleStopPlay();
+	} else {
+		// socket未连接
+		evaluatingData.socketErrorPop = true
+		evaluatingData.errorContents = '网络异常,正在重新链接...'
+		return
+	}
+}
+
 const check_currentTime = () => {
 	let preTime = 0;
 	// 选段评测模式
@@ -472,7 +489,7 @@ const handleAccompanyError = (res?: IPostMessage) => {
 				// socket连接断开,评测中,则取消评测
 				// 延迟检测中
 				if (evaluatingData.soundEffectMode) {
-					evaluatingData.errorContents = '网络异常,正在重新链接...'
+					evaluatingData.errorContents = '网络异常2,正在重新链接...'
 					evaluatingData.delayCheckSocketError = true
 					evaluatingData.socketErrorPop = true
 					evaluatingData.showConfirmBtn = true
@@ -480,7 +497,7 @@ const handleAccompanyError = (res?: IPostMessage) => {
 					return
 				}
 				// 评测中
-				if (state.modeType === "evaluating") {
+				if (state.modeType === "evaluating" && evaluatingData.startBegin) {
 					handleCancelEvaluat();
 					evaluatingData.errorContents = '网络异常,重新开始评测?'
 					evaluatingData.socketErrorPop = true
@@ -589,6 +606,7 @@ export default defineComponent({
 			handle_reduction();
 			removeAccompanyError(handleAccompanyError);
 			removeSocketStatus(handleSocketStatus);
+			api_disconnectSocket();
 			console.log("卸载评测模块成功");
 		});
 		return () => (