Mercurial > code > home > repos > light9
annotate web/rdfdbclient.ts @ 2447:361c612e3c60
checkpoint show data
author | drewp@bigasterisk.com |
---|---|
date | Mon, 03 Jun 2024 12:11:54 -0700 |
parents | ac55319a2eac |
children |
rev | line source |
---|---|
2071
56a9eaf5e882
rough ports from coffee to ts. untested
drewp@bigasterisk.com
parents:
1905
diff
changeset
|
1 import debug from "debug"; |
2258 | 2 import { parseJsonPatch, Patch } from "./patch"; |
2256 | 3 import { RdfDbChannel } from "./RdfDbChannel"; |
2289 | 4 const log = debug("rdfdbclient"); |
2071
56a9eaf5e882
rough ports from coffee to ts. untested
drewp@bigasterisk.com
parents:
1905
diff
changeset
|
5 |
2255
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
6 export class RdfDbClient { |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
7 private channel: RdfDbChannel; |
2421
ac55319a2eac
don't drop patches that arrive before we get WS connected
drewp@bigasterisk.com
parents:
2376
diff
changeset
|
8 private patchesToSend: Patch[]; |
2255
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
9 // Send and receive patches from rdfdb. Primarily used in SyncedGraph. |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
10 // |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
11 // What this should do, and does not yet, is keep the graph |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
12 // 'coasting' over a reconnect, applying only the diffs from the old |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
13 // contents to the new ones once they're in. Then, remove all the |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
14 // clearGraph stuff in graph.coffee that doesn't even work right. |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
15 // |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
16 constructor( |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
17 patchSenderUrl: string, |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
18 private clearGraphOnNewConnection: () => void, |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
19 private applyPatch: (p: Patch) => void, |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
20 setStatus: (status: string) => void |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
21 ) { |
2421
ac55319a2eac
don't drop patches that arrive before we get WS connected
drewp@bigasterisk.com
parents:
2376
diff
changeset
|
22 this.patchesToSend = []; |
2255
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
23 this.channel = new RdfDbChannel(patchSenderUrl); |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
24 this.channel.statusDisplay.subscribe((st: string) => { |
2421
ac55319a2eac
don't drop patches that arrive before we get WS connected
drewp@bigasterisk.com
parents:
2376
diff
changeset
|
25 setStatus(st + `; ${this.patchesToSend.length} pending `); |
2255
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
26 }); |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
27 this.channel.newConnection.subscribe(() => { |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
28 this.clearGraphOnNewConnection(); |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
29 }); |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
30 this.channel.serverMessage.subscribe((m) => { |
2284 | 31 parseJsonPatch(m.body, (p: Patch) => { |
32 log('patch from server:', p.dump()) | |
33 if (p.isEmpty()) { | |
34 return; | |
35 } | |
36 this.applyPatch(p); | |
37 }); | |
2255
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
38 }); |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
39 } |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
40 |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
41 sendPatch(patch: Patch) { |
2258 | 42 log("queue patch to server ", patch.summary()); |
2421
ac55319a2eac
don't drop patches that arrive before we get WS connected
drewp@bigasterisk.com
parents:
2376
diff
changeset
|
43 this.patchesToSend.push(patch); |
2255
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
44 this._continueSending(); |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
45 } |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
46 |
2322 | 47 disconnect(why:string) { |
48 this.channel.disconnect(why); | |
2255
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
49 } |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
50 |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
51 async _continueSending() { |
2071
56a9eaf5e882
rough ports from coffee to ts. untested
drewp@bigasterisk.com
parents:
1905
diff
changeset
|
52 // we could call this less often and coalesce patches together to optimize |
2289 | 53 // the dragging cases. See rdfdb 'compactPatches' and 'processInbox'. |
2421
ac55319a2eac
don't drop patches that arrive before we get WS connected
drewp@bigasterisk.com
parents:
2376
diff
changeset
|
54 while (this.patchesToSend.length) { |
ac55319a2eac
don't drop patches that arrive before we get WS connected
drewp@bigasterisk.com
parents:
2376
diff
changeset
|
55 const patch = this.patchesToSend.splice(0, 1)[0]; |
2258 | 56 const json = await patch.toJsonPatch(); |
2255
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
57 const ret = this.channel.sendMessage(json); |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
58 if (!ret) { |
2421
ac55319a2eac
don't drop patches that arrive before we get WS connected
drewp@bigasterisk.com
parents:
2376
diff
changeset
|
59 log('sendMessage failed- retrying') |
ac55319a2eac
don't drop patches that arrive before we get WS connected
drewp@bigasterisk.com
parents:
2376
diff
changeset
|
60 this.patchesToSend.unshift(patch); |
2255
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
61 setTimeout(this._continueSending.bind(this), 500); |
1361
c20dc52e5593
move to rdfdbclient.coffee
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
62 |
2255
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
63 // this.disconnect() |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
64 return; |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
65 } |
7c94348d6127
big refactor of RdfDbClient, separating the websocket layer
drewp@bigasterisk.com
parents:
2074
diff
changeset
|
66 } |
2071
56a9eaf5e882
rough ports from coffee to ts. untested
drewp@bigasterisk.com
parents:
1905
diff
changeset
|
67 } |
56a9eaf5e882
rough ports from coffee to ts. untested
drewp@bigasterisk.com
parents:
1905
diff
changeset
|
68 } |