(event: ws.MessageEvent)
| 286 | } |
| 287 | |
| 288 | protected async onMessage(event: ws.MessageEvent): Promise<void> { |
| 289 | const [parsed_data, parse_error] = parse_message_data(event.data); |
| 290 | |
| 291 | if (parse_error) { |
| 292 | console.error('Failed to parse message data.', parse_error || ''); |
| 293 | return; |
| 294 | } |
| 295 | |
| 296 | const [msg, msg_error] = validate_socket_message<any>(parsed_data); |
| 297 | |
| 298 | if (!msg || msg_error) { |
| 299 | console.error('Failed to validate message data.', msg_error || ''); |
| 300 | return; |
| 301 | } |
| 302 | |
| 303 | if ('type' in msg) { // Request |
| 304 | const queue = this.queues.find(q => q.types.indexOf(msg.type) >= 0); |
| 305 | |
| 306 | if (queue) { |
| 307 | queue.items.push({ event: event, req: msg }); |
| 308 | |
| 309 | if (!queue.isExecuting) { |
| 310 | queue.isExecuting = true; |
| 311 | while (queue.items.length > 0) { |
| 312 | const item = queue.items.shift(); |
| 313 | if (item) { |
| 314 | await this.handleMessage(item.event, item.req); |
| 315 | } |
| 316 | } |
| 317 | queue.isExecuting = false; |
| 318 | } |
| 319 | } else { |
| 320 | this.handleMessage(event, msg); |
| 321 | } |
| 322 | } else { // Response |
| 323 | this.handleMessage(event, msg); |
| 324 | } |
| 325 | } |
| 326 | |
| 327 | protected async handleMessage(event: ws.MessageEvent, data: SocketRequestData | SocketResponseData<any>): Promise<void> { |
| 328 | // Prepare event |
nothing calls this directly
no test coverage detected