aboutsummaryrefslogtreecommitdiff
path: root/src/server/websocket.ts
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2024-10-09 21:55:06 -0400
committerbobzel <zzzman@gmail.com>2024-10-09 21:55:06 -0400
commit4864f06dcc6eac232bbb9346c68f831fd6420dae (patch)
tree36354417e952c979ceb03e8370f39b6223b964f3 /src/server/websocket.ts
parent139a3cb0b3b081c270187e9b4ca281d04ca923bf (diff)
parentb9fda86731a01ebfc3f21ebdd4eaf43a1c9eccc6 (diff)
Merge branch 'master' into ajs-before-executable
Diffstat (limited to 'src/server/websocket.ts')
-rw-r--r--src/server/websocket.ts42
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) {