From 72fe8f3af12eae9752a5502399e30244e1ec30f9 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Mon, 21 Aug 2023 13:57:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=BD=9C=E5=9C=A8=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 2 +- src/main/modules/sync/client/client.ts | 9 +++++-- .../modules/sync/server/modules/list/sync.ts | 2 ++ src/main/modules/sync/server/server.ts | 26 +++++++++++++------ 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index 468559d9..3548e27e 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -3,7 +3,7 @@ ### 不兼容性变更 -该版本修改了同步协议逻辑,至少需要PC端v2.4.0或移动端v1.0.7版本才能连接使用。 +该版本修改了同步协议逻辑,同步功能至少需要PC端v2.4.0或移动端v1.1.0版本或同步服务v2.0.0才能连接使用。 ### 新增 diff --git a/src/main/modules/sync/client/client.ts b/src/main/modules/sync/client/client.ts index 721c2344..72a0548a 100644 --- a/src/main/modules/sync/client/client.ts +++ b/src/main/modules/sync/client/client.ts @@ -219,9 +219,14 @@ export const connect = (urlInfo: LX.Sync.Client.UrlInfo, keyInfo: LX.Sync.Client }) client.addEventListener('close', ({ code }) => { const err = new Error('closed') - for (const handler of closeEvents) void handler(err) - handleDisconnection() + try { + for (const handler of closeEvents) void handler(err) + } catch (err: any) { + log.error(err?.message) + } closeEvents = [] + handleDisconnection() + message2read.onDestroy() switch (code) { case SYNC_CLOSE_CODE.normal: // case SYNC_CLOSE_CODE.failed: diff --git a/src/main/modules/sync/server/modules/list/sync.ts b/src/main/modules/sync/server/modules/list/sync.ts index 27b26d39..4fe8da53 100644 --- a/src/main/modules/sync/server/modules/list/sync.ts +++ b/src/main/modules/sync/server/modules/list/sync.ts @@ -62,6 +62,8 @@ const overwriteRemoteListData = async(socket: LX.Sync.Server.Socket, listData: L if (excludeIds.includes(client.keyInfo.clientId) || !client.isReady) return tasks.push(client.remoteSyncList.onListSyncAction(action).then(() => { updateDeviceSnapshotKey(socket.keyInfo, key) + }).catch(err => { + console.log(err.message) })) }) if (!tasks.length) return diff --git a/src/main/modules/sync/server/server.ts b/src/main/modules/sync/server/server.ts index dcc278c4..ea00def3 100644 --- a/src/main/modules/sync/server/server.ts +++ b/src/main/modules/sync/server/server.ts @@ -41,8 +41,13 @@ const codeTools: { } const syncData = async(socket: LX.Sync.Server.Socket) => { + let disconnected = false + socket.onClose(() => { + disconnected = true + }) for (const module of Object.values(modules)) { await module.sync(socket) + if (disconnected) throw new Error('disconnected') } } @@ -215,17 +220,22 @@ const handleStartServer = async(port = 9527, ip = '0.0.0.0') => await new Promis }) }) socket.addEventListener('close', () => { - if (!socket.isReady) { + const err = new Error('closed') + try { + for (const handler of closeEvents) void handler(err) + } catch (err: any) { + log.error(err?.message) + } + closeEvents = [] + msg2call.onDestroy() + if (socket.isReady) { + log.info('deconnection', socket.keyInfo.deviceName) + // events = {} + if (!status.devices.length) handleUnconnection() + } else { const queryData = url.parse(request.url as string, true).query as Record log.info('deconnection', queryData.i) - return } - const err = new Error('closed') - for (const handler of closeEvents) void handler(err) - // events = {} - closeEvents = [] - if (!status.devices.length) handleUnconnection() - log.info('deconnection', socket.keyInfo.deviceName) }) socket.onClose = function(handler: typeof closeEvents[number]) { closeEvents.push(handler)