(request: CurrentWebsocketRequest)
| 84 | } |
| 85 | |
| 86 | async function serverConnect(request: CurrentWebsocketRequest): Promise<string> { |
| 87 | return new Promise((resolve, reject) => { |
| 88 | try { |
| 89 | const websocket = new WebSocket('/api/ws'); |
| 90 | websocket.onopen = () => { |
| 91 | sendMessageToWebsocket(websocket, currentRequest.id, { |
| 92 | type: 'ws-connect', |
| 93 | request, |
| 94 | }) |
| 95 | .then((msg: any) => { |
| 96 | if (msg.status === 'error') { |
| 97 | reject(msg.err); |
| 98 | } else { |
| 99 | ws.current = websocket; |
| 100 | resolve(msg.wsId); |
| 101 | } |
| 102 | }) |
| 103 | .catch(reject); |
| 104 | }; |
| 105 | websocket.onmessage = (event) => { |
| 106 | const msg = JSON.parse(event.data); |
| 107 | if (!msg) { |
| 108 | console.error('server message', msg); |
| 109 | return; |
| 110 | } |
| 111 | if (msg.type === 'ws-read') { |
| 112 | if (!msg || msg?.type !== 'ws-read' || msg.result?.wsId !== wsId.current) { |
| 113 | return; |
| 114 | } |
| 115 | dispatchCurrentRequest({ |
| 116 | type: CurrentRequestActionType.ADD_WEBSOCKET_RESPONSE_MESSAGE, |
| 117 | message: { |
| 118 | message: msg.result.message, |
| 119 | date: Date.now(), |
| 120 | type: 'incoming', |
| 121 | }, |
| 122 | }); |
| 123 | } else if (msg.type === 'ws-error') { |
| 124 | ws.current?.close(); |
| 125 | wsId.current = null; |
| 126 | setConnectionStatus('disconnected'); |
| 127 | errorToast('WebSocket error: ' + msg.result.error, toast); |
| 128 | } else if (msg.type === 'ws-close') { |
| 129 | ws.current?.close(); |
| 130 | wsId.current = null; |
| 131 | setConnectionStatus('disconnected'); |
| 132 | errorToast('WebSocket closed unexpectedly', toast); |
| 133 | } |
| 134 | }; |
| 135 | websocket.onerror = (err) => { |
| 136 | ws.current?.close(); |
| 137 | reject(err); |
| 138 | }; |
| 139 | } catch (err) { |
| 140 | reject(err); |
| 141 | } |
| 142 | }); |
| 143 | } |
no test coverage detected