on master help sign in
hosting: reconnect to event stream on error
commit9e3a8f03bc678a7fabbe0531e2ba7f737d41047d authorLiam Fitzgerald <liam@urizen.co> dateTue 31 Mar 2020, 13:41 (7 years ago) parentebdf08c
1 file changed+25−25
src/store/lib/useHostingStore.js+25−25
src/store/lib/useHostingStore.js+25−25
@@ -60,18 +60,9 @@ function useHostingStore(url, domain, disabled) {
6060 setRunEvents([]);
6161 }, [setSysEvents, setNewEvents, setRunEvents]);
6262
63− const getEvents = useCallback(() => {
64− try {
65− if (Nothing.hasInstance(pointCursor) || disabled) {
66− return;
67− }
68− const patp = ob.patp(pointCursor.value);
69− setError(undefined);
70−
71− resetEvents();
72−
73− const url = client.getShipsByPatpUrl(patp) + '/events';
74− const source = new EventSource(url);
63+ const newSource = useCallback(
64+ (url, retry = 0) => {
65+ let source = new EventSource(url);
7566
7667 source.addEventListener('sys', event => {
7768 const sysEvent = JSON.parse(event.data);
@@ -82,7 +73,6 @@ function useHostingStore(url, domain, disabled) {
8273 });
8374
8475 source.addEventListener('new', event => {
85− const elapsed = (Date.now() - startTime) / 1000;
8676 if (event.data !== '') {
8777 setNewEvents(previous => [...previous, event.data]);
8878 }
@@ -115,28 +105,39 @@ function useHostingStore(url, domain, disabled) {
115105 }
116106 });
117107
118− source.addEventListender(
108+ source.addEventListener(
119109 'error',
120110 error => {
121111 if (source.readyState === EventSource.CLOSED) {
112+ if (retry < 5) {
113+ newSource(url, retry + 1);
114+ return;
115+ }
122116 setError(error);
123117 }
124118 },
125119 false
126120 );
121+ },
122+ [setError, startTime, syncStatus]
123+ );
124+
125+ const getEvents = useCallback(() => {
126+ try {
127+ if (Nothing.hasInstance(pointCursor) || disabled) {
128+ return;
129+ }
130+ const patp = ob.patp(pointCursor.value);
131+ setError(undefined);
132+
133+ resetEvents();
134+
135+ const url = client.getShipsByPatpUrl(patp) + '/events';
136+ newSource(url);
127137 } catch (error) {
128138 setError(error);
129139 }
130− }, [
131− setError,
132− disabled,
133− resetEvents,
134− client,
135− pointCursor,
136− setBootMessage,
137− startTime,
138− syncStatus,
139− ]);
140+ }, [setError, disabled, resetEvents, client, pointCursor, newSource]);
140141
141142 syncStatus = useCallback(async () => {
142143 try {
@@ -193,7 +194,6 @@ function useHostingStore(url, domain, disabled) {
193194 const patp = ob.patp(pointCursor.value).slice(1);
194195 setError(undefined);
195196
196− const start = Date.now();
197197 setStatus(STATE.PENDING);
198198 setBootProgress(0.1);
199199