1- import { EventEmitter } from "@yume-chan/event" ;
1+ import { EventEmitter , StickyEventEmitter } from "@yume-chan/event" ;
22
33import { Ref } from "../utils/index.js" ;
44
@@ -95,6 +95,17 @@ export class AdbServerDeviceObserverOwner {
9595 throw options . signal . reason ;
9696 }
9797
98+ const onDeviceAdd = new EventEmitter < AdbServerClient . Device [ ] > ( ) ;
99+ const onDeviceRemove = new EventEmitter < AdbServerClient . Device [ ] > ( ) ;
100+ const onListChange = new StickyEventEmitter < AdbServerClient . Device [ ] > ( ) ;
101+ const onError = new StickyEventEmitter < Error > ( ) ;
102+
103+ const observer = { onDeviceAdd, onDeviceRemove, onListChange, onError } ;
104+ // Register `observer` before `#connect`.
105+ // Because `#connect` might immediately receive some data
106+ // and want to trigger observers
107+ this . #observers. push ( observer ) ;
108+
98109 this . #stream ??= this . #connect( ) ;
99110 const stream = await this . #stream;
100111
@@ -103,14 +114,6 @@ export class AdbServerDeviceObserverOwner {
103114 throw options . signal . reason ;
104115 }
105116
106- const onDeviceAdd = new EventEmitter < AdbServerClient . Device [ ] > ( ) ;
107- const onDeviceRemove = new EventEmitter < AdbServerClient . Device [ ] > ( ) ;
108- const onListChange = new EventEmitter < AdbServerClient . Device [ ] > ( ) ;
109- const onError = new EventEmitter < Error > ( ) ;
110-
111- const observer = { onDeviceAdd, onDeviceRemove, onListChange, onError } ;
112- this . #observers. push ( observer ) ;
113-
114117 const ref = new Ref ( options ) ;
115118
116119 const stop = async ( ) => {
0 commit comments