@@ -1,166 +0,0 @@
1−import { useCallback, useState } from 'react';
2−
3−const STATE = {
4− // container states
5− UNKNOWN: 'UNKNOWN',
6− MISSING: 'MISSING',
7− RUNNING: 'RUNNING',
8− PENDING: 'PENDING',
9− // api states
10− QUERYING: 'QUERYING',
11− BOOTING: 'BOOTING',
12− CONNECTING: 'CONNECTING',
13− // connection states
14− CONNECTED: 'CONNECTED',
15−};
16−
17−export function useHostedShip(client, patp) {
18− const [state, _setState] = useState(STATE.UNKNOWN);
19− const setState = useCallback(
20− s => {
21− console.log(s);
22− _setState(s);
23− },
24− [_setState]
25− );
26−
27− const [sysEvents, setSysEvents] = useState([]);
28− const [newEvents, setNewEvents] = useState([]);
29− const [runEvents, setRunEvents] = useState([]);
30−
31− const [error, _setError] = useState();
32− const setError = useCallback(
33− error => {
34− _setError(error);
35− if (error) {
36− setState(STATE.UNKNOWN);
37− console.error(error);
38− }
39− },
40− [_setError, setState]
41− );
42−
43− const unknown = state === STATE.UNKNOWN;
44− const missing = state === STATE.MISSING;
45− const running = state === STATE.RUNNING;
46− const pending = state === STATE.PENDING;
47− const querying = state === STATE.QUERYING;
48− const booting = state === STATE.BOOTING;
49− const connecting = state === STATE.CONNECTING;
50− const connected = state === STATE.CONNECTED;
51−
52− const resetEvents = useCallback(() => {
53− setSysEvents([]);
54− setNewEvents([]);
55− setRunEvents([]);
56− }, []);
57−
58− const getStatus = useCallback(async () => {
59− try {
60− setError(undefined);
61−
62− resetEvents();
63−
64− setState(STATE.QUERYING);
65−
66− const response = await client.getShipsByPatp(patp);
67−
68− if (response.status === 404) {
69− setState(STATE.MISSING);
70− } else if (!response.ok) {
71− setError(response.statusText);
72− } else {
73− const ship = await response.json();
74−
75− if (ship.status === 'Pending') {
76− setState(STATE.PENDING);
77− } else if (ship.status === 'Running') {
78− setState(STATE.RUNNING);
79− } else {
80− setError(ship);
81− }
82− }
83− } catch (error) {
84− setError(error);
85− }
86− }, [client, patp, resetEvents, setError, setState]);
87−
88− const getEvents = useCallback(() => {
89− try {
90− setError(undefined);
91−
92− resetEvents();
93−
94− setState(STATE.CONNECTING);
95−
96− const url = client.getShipsByPatpUrl(patp) + '/events';
97− const source = new EventSource(url);
98−
99− source.onopen = () => setState(STATE.CONNECTED);
100− // source.onerror = () => setState(STATE.UNKNOWN);
101− // source.onmessage = console.log;
102−
103− source.addEventListener('sys', event => {
104− setSysEvents(previous => [...previous, JSON.parse(event.data)]);
105− });
106−
107− source.addEventListener('new', event => {
108− if (event.data !== '') {
109− setNewEvents(previous => [...previous, event.data]);
110− }
111− });
112−
113− source.addEventListener('run', event => {
114− if (event.data !== '') {
115− setRunEvents(previous => [...previous, event.data]);
116− }
117− });
118− } catch (error) {
119− setError(error);
120− }
121− }, [setError, resetEvents, client, patp, setState]);
122−
123− const create = useCallback(async () => {
124− try {
125− setError(undefined);
126−
127− setState(STATE.BOOTING);
128−
129− const response = await client.postShips({
130− patp,
131− key: '123',
132− });
133−
134− if (!response.ok) {
135− setError(response.statusText);
136− } else {
137− getEvents();
138− }
139− } catch (error) {
140− setError(error);
141− }
142− }, [setError, setState, client, patp, getEvents]);
143−
144− return {
145− error,
146− unknown,
147− missing,
148− running,
149− pending,
150− querying,
151− booting,
152− connecting,
153− connected,
154−
155− sysEvents,
156− newEvents,
157− runEvents,
158−
159− getStatus,
160− getEvents,
161− create,
162−
163− // debugging
164− state,
165− };
166−}