修复同步连接的处理问题

pull/1229/head
lyswhut 2023-02-22 14:44:34 +08:00
parent 5544a469c4
commit 60b357e6f9
2 changed files with 28 additions and 20 deletions

View File

@ -1,5 +1,4 @@
### 修复
- 修复处于最新版本时更新弹窗日志内容显示异常的问题
- 修复更新到最新版本后的首次启动时的更新日志未显示的问题
- 修复同步连接的处理问题

View File

@ -71,8 +71,13 @@ const getLocalListData = async(): Promise<LX.Sync.ListData> => {
return lists
}
const getSyncMode = async(keyInfo: LX.Sync.KeyInfo): Promise<LX.Sync.Mode> => await new Promise((resolve, reject) => {
let removeListener = sendSelectMode(keyInfo, (mode) => {
const getSyncMode = async(socket: LX.Sync.Socket): Promise<LX.Sync.Mode> => 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<LX.Sync.ListData | null> => {
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<LX.Sync.ListData | null>
return await handleMergeListDataFromSnapshot(socket, patchListData(fileData))
}
const checkSyncQueue = async(): Promise<void> => {
if (!syncingId) return
console.log('sync queue...')
await wait()
await checkSyncQueue()
}
// const checkSyncQueue = async(): Promise<void> => {
// 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<void> => {
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 })