11import osc from 'osc'
22import { WingModel } from '../models/types.js'
3- import { ModuleLogger } from './logger.js'
43import { EventEmitter } from 'events'
4+ import { ModuleLogger } from './logger.js'
55
66export interface DeviceInfo {
77 deviceName : string
@@ -14,6 +14,7 @@ export interface WingDeviceDetectorInterface {
1414 subscribe ( instanceId : string ) : void
1515 unsubscribe ( instanceId : string ) : void
1616 listKnown ( ) : DeviceInfo [ ]
17+ addLogger ( logger : ModuleLogger ) : void
1718}
1819
1920/**
@@ -25,23 +26,29 @@ export class WingDeviceDetector extends EventEmitter implements WingDeviceDetect
2526 private osc ?: osc . UDPPort
2627 private knownDevices = new Map < string , DeviceInfo > ( )
2728 private queryTimer : NodeJS . Timeout | undefined
28- private logger ?: ModuleLogger
2929 private noDeviceTimeout : NodeJS . Timeout | undefined
30+ private logger ?: ModuleLogger
3031
3132 constructor ( logger ?: ModuleLogger ) {
3233 super ( )
3334 this . logger = logger
3435 }
3536
37+ /**
38+ * Add a logger
39+ * @param logger An instance of a ModuleLogger
40+ */
41+ public addLogger ( logger : ModuleLogger ) : void {
42+ this . logger = logger
43+ }
44+
3645 /**
3746 * Register a subscriber to start device detection.
3847 * @param instanceId Unique identifier for the subscriber.
3948 */
4049 public subscribe ( instanceId : string ) : void {
4150 const startListening = this . subscribers . size === 0
42-
4351 this . subscribers . add ( instanceId )
44-
4552 if ( startListening ) {
4653 this . startListening ( )
4754 }
@@ -71,7 +78,6 @@ export class WingDeviceDetector extends EventEmitter implements WingDeviceDetect
7178 */
7279 private startListening ( ) : void {
7380 this . knownDevices . clear ( )
74-
7581 if ( this . subscribers . size === 0 ) {
7682 return
7783 }
@@ -112,6 +118,7 @@ export class WingDeviceDetector extends EventEmitter implements WingDeviceDetect
112118 } )
113119
114120 this . osc . on ( 'message' , ( message ) : void => {
121+ this . logger ?. debug ( `received device detector message ${ JSON . stringify ( message ) } ` )
115122 const args = message . args as osc . MetaArgument [ ]
116123 if ( ! args || args . length === 0 || args [ 0 ] . type !== 's' ) {
117124 return
@@ -141,7 +148,7 @@ export class WingDeviceDetector extends EventEmitter implements WingDeviceDetect
141148 // If a device has not been seen for over a minute, remove it
142149 this . knownDevices . set ( info . address , info )
143150 for ( const [ id , data ] of Array . from ( this . knownDevices . entries ( ) ) ) {
144- if ( data . lastSeen < Date . now ( ) - 60000 ) {
151+ if ( data . lastSeen < Date . now ( ) - 20000 ) {
145152 this . logger ?. info ( `Removing console ${ data . deviceName } at ${ data . address } from known devices due to timeout` )
146153 this . knownDevices . delete ( id )
147154 }
@@ -152,7 +159,6 @@ export class WingDeviceDetector extends EventEmitter implements WingDeviceDetect
152159 this . noDeviceTimeout = undefined
153160 }
154161 } )
155-
156162 this . osc . open ( )
157163 }
158164
0 commit comments