feat(Device): add connection timeout

This commit is contained in:
AkiChase 2024-04-17 22:52:17 +08:00
parent 93389f825b
commit fde4f7ef56

View File

@ -51,7 +51,7 @@ const port = ref(27183);
const localStore = new Store("store.bin"); const localStore = new Store("store.bin");
//#region listener //#region listener
const deviceWaitForMetadataTask: ((deviceName: string) => void)[] = []; let deviceWaitForMetadataTask: ((deviceName: string) => void) | null = null;
let unlisten: UnlistenFn | undefined; let unlisten: UnlistenFn | undefined;
onMounted(async () => { onMounted(async () => {
@ -67,8 +67,7 @@ onMounted(async () => {
let payload = JSON.parse(event.payload as string); let payload = JSON.parse(event.payload as string);
switch (payload.type) { switch (payload.type) {
case "MetaData": case "MetaData":
let task = deviceWaitForMetadataTask.shift(); deviceWaitForMetadataTask?.(payload.deviceName);
task?.(payload.deviceName);
break; break;
case "ClipboardChanged": case "ClipboardChanged":
console.log("剪切板变动", payload.clipboard); console.log("剪切板变动", payload.clipboard);
@ -195,7 +194,7 @@ async function onMenuSelect(key: string) {
sizeW: store.screenSizeW, sizeW: store.screenSizeW,
sizeH: store.screenSizeH, sizeH: store.screenSizeH,
}); });
message.info("屏幕尺寸已保存,正在启动控制服务"); message.info("屏幕尺寸已保存,正在启动控制服务,请保持设备亮屏");
let device = devices.value[rowIndex]; let device = devices.value[rowIndex];
@ -207,17 +206,29 @@ async function onMenuSelect(key: string) {
await forwardServerPort(device.id, scid, port.value); await forwardServerPort(device.id, scid, port.value);
await startScrcpyServer(device.id, scid, `127.0.0.1:${port.value}`); await startScrcpyServer(device.id, scid, `127.0.0.1:${port.value}`);
// connection timeout check
let id = setTimeout(async () => {
if (deviceWaitForMetadataTask) {
await shutdown();
store.controledDevice = null;
store.hideLoading();
message.error("设备连接超时");
}
}, 4000);
// add cb for metadata // add cb for metadata
deviceWaitForMetadataTask.push((deviceName: string) => { deviceWaitForMetadataTask = (deviceName: string) => {
store.controledDevice = { store.controledDevice = {
scid, scid,
deviceName, deviceName,
device, device,
}; };
nextTick(() => { nextTick(() => {
deviceWaitForMetadataTask = null;
clearTimeout(id);
store.hideLoading(); store.hideLoading();
}); });
}); };
break; break;
} }
} }