on master help sign in
hosting: reconnect to event stream on error
9e3a8f0Liam Fitzgerald
src/store/lib/useHostingStore.js+25−25
@@ -60,18 +60,9 @@ function useHostingStore(url, domain, disabled) {
60 setRunEvents([]);
60 setRunEvents([]);
61 }, [setSysEvents, setNewEvents, setRunEvents]);
61 }, [setSysEvents, setNewEvents, setRunEvents]);
62
62
63− const getEvents = useCallback(() => {
63+ const newSource = useCallback(
64− try {
64+ (url, retry = 0) => {
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);
65+ let source = new EventSource(url);
75
66
76 source.addEventListener('sys', event => {
67 source.addEventListener('sys', event => {
77 const sysEvent = JSON.parse(event.data);
68 const sysEvent = JSON.parse(event.data);
@@ -82,7 +73,6 @@ function useHostingStore(url, domain, disabled) {
82 });
73 });
83
74
84 source.addEventListener('new', event => {
75 source.addEventListener('new', event => {
85− const elapsed = (Date.now() - startTime) / 1000;
86 if (event.data !== '') {
76 if (event.data !== '') {
87 setNewEvents(previous => [...previous, event.data]);
77 setNewEvents(previous => [...previous, event.data]);
88 }
78 }
@@ -115,28 +105,39 @@ function useHostingStore(url, domain, disabled) {
115 }
105 }
116 });
106 });
117
107
118− source.addEventListender(
108+ source.addEventListener(
119 'error',
109 'error',
120 error => {
110 error => {
121 if (source.readyState === EventSource.CLOSED) {
111 if (source.readyState === EventSource.CLOSED) {
112+ if (retry < 5) {
113+ newSource(url, retry + 1);
114+ return;
115+ }
122 setError(error);
116 setError(error);
123 }
117 }
124 },
118 },
125 false
119 false
126 );
120 );
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);
127 } catch (error) {
137 } catch (error) {
128 setError(error);
138 setError(error);
129 }
139 }
130− }, [
140+ }, [setError, disabled, resetEvents, client, pointCursor, newSource]);
131− setError,
132− disabled,
133− resetEvents,
134− client,
135− pointCursor,
136− setBootMessage,
137− startTime,
138− syncStatus,
139− ]);
140
141
141 syncStatus = useCallback(async () => {
142 syncStatus = useCallback(async () => {
142 try {
143 try {
@@ -193,7 +194,6 @@ function useHostingStore(url, domain, disabled) {
193 const patp = ob.patp(pointCursor.value).slice(1);
194 const patp = ob.patp(pointCursor.value).slice(1);
194 setError(undefined);
195 setError(undefined);
195
196
196− const start = Date.now();
197 setStatus(STATE.PENDING);
197 setStatus(STATE.PENDING);
198 setBootProgress(0.1);
198 setBootProgress(0.1);
199
199