diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/websocket.ts | 42 | 
1 files changed, 21 insertions, 21 deletions
| diff --git a/src/server/websocket.ts b/src/server/websocket.ts index 1e25a8a27..effe94219 100644 --- a/src/server/websocket.ts +++ b/src/server/websocket.ts @@ -61,27 +61,6 @@ export namespace WebSocket {          Database.Instance.getDocuments(ids, callback);      } -    const pendingOps = new Map<string, { diff: Diff; socket: Socket }[]>(); - -    function dispatchNextOp(id: string): unknown { -        const next = pendingOps.get(id)?.shift(); -        // eslint-disable-next-line @typescript-eslint/no-unused-vars -        const nextOp = (res: boolean) => dispatchNextOp(id); -        if (next) { -            const { diff, socket } = next; -            // ideally, we'd call the Database update method for all actions, but for now we handle list insertion/removal on our own -            switch (diff.diff.$addToSet ? 'add' : diff.diff.$remFromSet ? 'rem' : 'set') { -                case 'add': return GetRefFieldLocal(id, (result) => addToListField(socket, diff, result, nextOp)); // prettier-ignore -                case 'rem': return GetRefFieldLocal(id, (result) => remFromListField(socket, diff, result, nextOp)); // prettier-ignore -                default:    return Database.Instance.update(id, diff.diff,  -                                                            () => nextOp(socket.broadcast.emit(MessageStore.UpdateField.Message, diff)), -                                                            false -                                                        ); // prettier-ignore -            } -        } -        return !pendingOps.get(id)?.length && pendingOps.delete(id); -    } -      function addToListField(socket: Socket, diff: Diff, listDoc: serializedDoctype | undefined, cb: (res: boolean) => void): void {          const $addToSet = diff.diff.$addToSet as serializedFieldsType;          const updatefield = Array.from(Object.keys($addToSet ?? {}))[0]; @@ -181,6 +160,27 @@ export namespace WebSocket {          } else cb(false);      } +    const pendingOps = new Map<string, { diff: Diff; socket: Socket }[]>(); + +    function dispatchNextOp(id: string): unknown { +        const next = pendingOps.get(id)?.shift(); +        // eslint-disable-next-line @typescript-eslint/no-unused-vars +        const nextOp = (res: boolean) => dispatchNextOp(id); +        if (next) { +            const { diff, socket } = next; +            // ideally, we'd call the Database update method for all actions, but for now we handle list insertion/removal on our own +            switch (diff.diff.$addToSet ? 'add' : diff.diff.$remFromSet ? 'rem' : 'set') { +                case 'add': return GetRefFieldLocal(id, (result) => addToListField(socket, diff, result, nextOp)); // prettier-ignore +                case 'rem': return GetRefFieldLocal(id, (result) => remFromListField(socket, diff, result, nextOp)); // prettier-ignore +                default:    return Database.Instance.update(id, diff.diff,  +                                                            () => nextOp(socket.broadcast.emit(MessageStore.UpdateField.Message, diff)), +                                                            false +                                                        ); // prettier-ignore +            } +        } +        return !pendingOps.get(id)?.length && pendingOps.delete(id); +    } +      function UpdateField(socket: Socket, diff: Diff) {          const curUser = socketMap.get(socket);          if (curUser) { | 
