@@ -104,45 +104,48 @@ export function doRpcHidHandshake(rpcHidChannel: RTCDataChannel, setRpcHidProtoc
104104 setRpcHidProtocolVersion ( message . version ) ;
105105
106106 // clean up
107- handshakeCompleted = true ;
108- if ( handshakeInterval ) {
109- clearInterval ( handshakeInterval ) ;
110- handshakeInterval = null ;
111- }
112107 const timeUsed = lastSendTime ? Date . now ( ) - lastSendTime . getTime ( ) : 0 ;
113108 logger . info ( `Handshake completed in ${ timeUsed } ms after ${ attempts } attempts (Version: ${ message . version } / ${ HID_RPC_VERSION } )` ) ;
109+ resetHandshake ( { completed : true } ) ;
114110
115111 rpcHidChannel . removeEventListener ( "message" , onMessage ) ;
116112 } ;
117113
118- const resetHandshake = ( newLastConnectedTime ?: Date | undefined ) => {
119- lastConnectedTime = newLastConnectedTime ;
114+ const resetHandshake = ( { lastConnectedTime : newLastConnectedTime , completed } : { lastConnectedTime ?: Date | undefined , completed ?: boolean } ) => {
115+ if ( newLastConnectedTime ) lastConnectedTime = newLastConnectedTime ;
120116 lastSendTime = undefined ;
121117 attempts = 0 ;
122- handshakeCompleted = false ;
118+ if ( completed !== undefined ) handshakeCompleted = completed ;
123119 if ( handshakeInterval ) {
124120 clearInterval ( handshakeInterval ) ;
125121 handshakeInterval = null ;
126122 }
127123 } ;
128124
129125 const onConnected = ( ) => {
130- resetHandshake ( new Date ( ) ) ;
126+ resetHandshake ( { lastConnectedTime : new Date ( ) } ) ;
131127 logger . info ( "Channel connected" ) ;
132128
133129 sendHandshake ( true ) ;
134130 rpcHidChannel . addEventListener ( "message" , onMessage ) ;
135131 } ;
136132
137133 const onClose = ( ) => {
138- resetHandshake ( ) ;
134+ resetHandshake ( { lastConnectedTime : undefined , completed : false } ) ;
139135
140136 logger . info ( "Channel closed" ) ;
141137 setRpcHidProtocolVersion ( null ) ;
138+
139+ rpcHidChannel . removeEventListener ( "message" , onMessage ) ;
142140 } ;
143141
144142 rpcHidChannel . addEventListener ( "open" , onConnected ) ;
145143 rpcHidChannel . addEventListener ( "close" , onClose ) ;
144+
145+ // handle case where channel is already open when the hook is mounted
146+ if ( rpcHidChannel . readyState === "open" ) {
147+ onConnected ( ) ;
148+ }
146149}
147150
148151export function useHidRpc ( onHidRpcMessage ?: ( payload : RpcMessage ) => void ) {
@@ -289,13 +292,15 @@ export function useHidRpc(onHidRpcMessage?: (payload: RpcMessage) => void) {
289292
290293 if ( message instanceof HandshakeMessage ) return ; // handshake message is handled by the doRpcHidHandshake function
291294
295+ // to remove it from the production build, we need to use the /* @__PURE__ */ comment here
296+ // setting `esbuild.pure` doesn't work
292297 /* @__PURE__ */ logger . debug ( "Received message" , message ) ;
293298
294299 onHidRpcMessage ?.( message ) ;
295300 } ;
296301
297302 const errorHandler = ( e : Event ) => {
298- console . error ( `[HIDRPC] Error on channel '${ rpcHidChannel . label } ': ${ e } ` )
303+ logger . error ( `Error on channel '${ rpcHidChannel . label } '` , e ) ;
299304 } ;
300305
301306 rpcHidChannel . addEventListener ( "message" , messageHandler ) ;
0 commit comments