1/* 2 * Copyright (C) 2025 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17import {WebSocketStream} from './websocket_stream'; 18 19export type DevicesMsgListener = (data: string) => Promise<void>; 20 21export class DevicesStream extends WebSocketStream { 22 constructor( 23 sock: WebSocket, 24 private dataListener: DevicesMsgListener, 25 errorListener: () => void, 26 ) { 27 super(sock); 28 sock.onerror = errorListener; 29 } 30 31 override async connect() { 32 let messagePromiseQueue = Promise.resolve(); 33 this.sock.onmessage = (e: MessageEvent<string>) => { 34 messagePromiseQueue = messagePromiseQueue.then(async () => { 35 await this.dataListener(e.data); 36 }); 37 }; 38 } 39} 40