Mercurial > code > home > repos > streamed-graph
diff src/streamed_graph_client.ts @ 36:8b4dc9e87b56
reindent to 2-spaces with prettier
author | drewp@bigasterisk.com |
---|---|
date | Sat, 28 Dec 2019 02:24:55 -0800 |
parents | 9ec3cbc8791a |
children | 163b4339804d |
line wrap: on
line diff
--- a/src/streamed_graph_client.ts Sat Dec 28 02:01:23 2019 -0800 +++ b/src/streamed_graph_client.ts Sat Dec 28 02:24:55 2019 -0800 @@ -1,128 +1,129 @@ // from /my/site/homepage/www/rdf/streamed-graph.js import { eachJsonLdQuad } from "./json_ld_quads"; -import { N3Store } from 'n3'; -import { Store } from 'n3'; +import { N3Store } from "n3"; +import { Store } from "n3"; export class StreamedGraphClient { - // holds a n3 Store, which is synced to a server-side - // store that sends patches over SSE + // holds a n3 Store, which is synced to a server-side + // store that sends patches over SSE - onStatus: (msg: string) => void; - onGraphChanged: () => void; - store: N3Store; - events!: EventSource; - constructor( - eventsUrl: string, - onGraphChanged: () => void, - onStatus: (status: string) => void, - prefixes: Array<Record<string, string>>, - staticGraphUrls: Array<string>) { - console.log('new StreamedGraph', eventsUrl); - this.onStatus = onStatus; - this.onGraphChanged = onGraphChanged; - this.onStatus('startup...'); + onStatus: (msg: string) => void; + onGraphChanged: () => void; + store: N3Store; + events!: EventSource; + constructor( + eventsUrl: string, + onGraphChanged: () => void, + onStatus: (status: string) => void, + prefixes: Array<Record<string, string>>, + staticGraphUrls: Array<string> + ) { + console.log("new StreamedGraph", eventsUrl); + this.onStatus = onStatus; + this.onGraphChanged = onGraphChanged; + this.onStatus("startup..."); - this.store = new Store(); + this.store = new Store(); + + // // Object.keys(prefixes).forEach((prefix) => { + // // this.store.setPrefix(prefix, prefixes[prefix]); + // // }); - // // Object.keys(prefixes).forEach((prefix) => { - // // this.store.setPrefix(prefix, prefixes[prefix]); - // // }); + this.connect(eventsUrl); + this.reconnectOnWake(); - this.connect(eventsUrl); - this.reconnectOnWake(); + // staticGraphUrls.forEach((url) => { + // fetch(url).then((response) => response.text()) + // .then((body) => { + // // parse with n3, add to output + // }); + // }); + } - // staticGraphUrls.forEach((url) => { - // fetch(url).then((response) => response.text()) - // .then((body) => { - // // parse with n3, add to output - // }); - // }); + reconnectOnWake() { + // it's not this, which fires on every mouse-in on a browser window, and doesn't seem to work for screen-turned-back-on + //window.addEventListener('focus', function() { this.connect(eventsUrl); }.bind(this)); + } - } + connect(eventsUrl: string) { + // need to exit here if this obj has been replaced - reconnectOnWake() { - // it's not this, which fires on every mouse-in on a browser window, and doesn't seem to work for screen-turned-back-on - //window.addEventListener('focus', function() { this.connect(eventsUrl); }.bind(this)); + this.onStatus("start connect..."); + this.close(); + if (this.events && this.events.readyState != EventSource.CLOSED) { + this.onStatus("zombie"); + throw new Error("zombie eventsource"); } - connect(eventsUrl: string) { - // need to exit here if this obj has been replaced + this.events = new EventSource(eventsUrl); - this.onStatus('start connect...'); - this.close(); - if (this.events && this.events.readyState != EventSource.CLOSED) { - this.onStatus('zombie'); - throw new Error("zombie eventsource"); - } - - this.events = new EventSource(eventsUrl); + this.events.addEventListener("error", ev => { + // todo: this is piling up tons of retries and eventually multiple connections + // this.testEventUrl(eventsUrl); + this.onStatus("connection lost- retrying"); + setTimeout(() => { + requestAnimationFrame(() => { + this.connect(eventsUrl); + }); + }, 3000); + }); - this.events.addEventListener('error', (ev) => { - // todo: this is piling up tons of retries and eventually multiple connections - // this.testEventUrl(eventsUrl); - this.onStatus('connection lost- retrying'); - setTimeout(() => { - requestAnimationFrame(() => { - this.connect(eventsUrl); - }); - }, 3000); - }); + this.events.addEventListener("fullGraph", async ev => { + this.onStatus("sync- full graph update"); + await this.replaceFullGraph((ev as MessageEvent).data); + this.onStatus(`synced ${this.store.size}`); + this.onGraphChanged(); + }); - this.events.addEventListener('fullGraph', async (ev) => { - this.onStatus('sync- full graph update'); - await this.replaceFullGraph((ev as MessageEvent).data); - this.onStatus(`synced ${this.store.size}`); - this.onGraphChanged(); - }); - - this.events.addEventListener('patch', async (ev) => { - this.onStatus('sync- updating'); - await this.patchGraph((ev as MessageEvent).data); - this.onStatus(`synced ${this.store.size}`); - this.onGraphChanged(); - }); - this.onStatus('connecting...'); - } + this.events.addEventListener("patch", async ev => { + this.onStatus("sync- updating"); + await this.patchGraph((ev as MessageEvent).data); + this.onStatus(`synced ${this.store.size}`); + this.onGraphChanged(); + }); + this.onStatus("connecting..."); + } - // these need some locks - async replaceFullGraph(jsonLdText: string) { - this.store = new Store(); - await eachJsonLdQuad(JSON.parse(jsonLdText), - this.store.addQuad.bind(this.store)); - } - - async patchGraph(patchJson: string) { - var patch = JSON.parse(patchJson).patch; + // these need some locks + async replaceFullGraph(jsonLdText: string) { + this.store = new Store(); + await eachJsonLdQuad( + JSON.parse(jsonLdText), + this.store.addQuad.bind(this.store) + ); + } - await eachJsonLdQuad(patch.deletes, - this.store.removeQuad.bind(this.store)); - await eachJsonLdQuad(patch.adds, - this.store.addQuad.bind(this.store)); - } + async patchGraph(patchJson: string) { + var patch = JSON.parse(patchJson).patch; - close() { - if (this.events) { - this.events.close(); - } + await eachJsonLdQuad(patch.deletes, this.store.removeQuad.bind(this.store)); + await eachJsonLdQuad(patch.adds, this.store.addQuad.bind(this.store)); + } + + close() { + if (this.events) { + this.events.close(); } + } - async testEventUrl(eventsUrl: string): Promise<void> { - return new Promise<void>((resolve, reject) => { - this.onStatus('testing connection'); - fetch(eventsUrl, { - method: "HEAD", - credentials: "include", - }).then((value) => { - if (value.status == 403) { - reject(); - return; - } - resolve(); - }).catch((err) => { - reject(); - }); + async testEventUrl(eventsUrl: string): Promise<void> { + return new Promise<void>((resolve, reject) => { + this.onStatus("testing connection"); + fetch(eventsUrl, { + method: "HEAD", + credentials: "include" + }) + .then(value => { + if (value.status == 403) { + reject(); + return; + } + resolve(); + }) + .catch(err => { + reject(); }); - } - -} \ No newline at end of file + }); + } +}