diff --git a/publish/changeLog.md b/publish/changeLog.md index 7c849ff2..48cc592a 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,5 +1,4 @@ ### 修复 -- 修复处于最新版本时更新弹窗日志内容显示异常的问题 -- 修复更新到最新版本后的首次启动时的更新日志未显示的问题 +- 修复同步连接的处理问题 diff --git a/src/main/modules/sync/server/syncList.ts b/src/main/modules/sync/server/syncList.ts index 8340a293..11d7c5c5 100644 --- a/src/main/modules/sync/server/syncList.ts +++ b/src/main/modules/sync/server/syncList.ts @@ -71,8 +71,13 @@ const getLocalListData = async(): Promise => { return lists } -const getSyncMode = async(keyInfo: LX.Sync.KeyInfo): Promise => await new Promise((resolve, reject) => { - let removeListener = sendSelectMode(keyInfo, (mode) => { +const getSyncMode = async(socket: LX.Sync.Socket): Promise => await new Promise((resolve, reject) => { + const handleDisconnect = () => { + sendCloseSelectMode() + reject(new Error('disconnect')) + } + socket.on('disconnect', handleDisconnect) + let removeListener = sendSelectMode(socket.data.keyInfo, (mode) => { removeListener() resolve(mode) }) @@ -221,15 +226,8 @@ const overwriteList = (sourceListData: LX.Sync.ListData, targetListData: LX.Sync } const handleMergeListData = async(socket: LX.Sync.Socket): Promise => { - let isSelectingMode = false - const handleDisconnect = () => { - if (!isSelectingMode) return - sendCloseSelectMode() - } - socket.on('disconnect', handleDisconnect) - isSelectingMode = true - const mode: LX.Sync.Mode = await getSyncMode(socket.data.keyInfo) - isSelectingMode = false + const mode: LX.Sync.Mode = await getSyncMode(socket) + const [remoteListData, localListData] = await Promise.all([getRemoteListData(socket), getLocalListData()]) console.log('handleMergeListData', 'remoteListData, localListData') let listData: LX.Sync.ListData @@ -452,12 +450,12 @@ const syncList = async(socket: LX.Sync.Socket): Promise return await handleMergeListDataFromSnapshot(socket, patchListData(fileData)) } -const checkSyncQueue = async(): Promise => { - if (!syncingId) return - console.log('sync queue...') - await wait() - await checkSyncQueue() -} +// const checkSyncQueue = async(): Promise => { +// if (!syncingId) return +// console.log('sync queue...') +// await wait() +// await checkSyncQueue() +// } // export { // syncList = async(_io: Server, socket: LX.Sync.Socket) => { @@ -475,7 +473,18 @@ const checkSyncQueue = async(): Promise => { const _syncList = async(_io: Server, socket: LX.Sync.Socket) => { io = _io - await checkSyncQueue() + let disconnected = false + socket.on('disconnect', () => { + disconnected = true + if (syncingId == socket.data.keyInfo.clientId) syncingId = null + }) + + while (true) { + if (disconnected) throw new Error('disconnected') + if (!syncingId) break + await wait() + } + syncingId = socket.data.keyInfo.clientId return await syncList(socket).then(newListData => { if (newListData) registerUpdateSnapshotTask(socket, { ...newListData })