11import EventEmitter from 'events'
2- import { ModuleLogger } from './logger.js'
32import { ModelSpec } from '../models/types.js'
43import { WingState } from '../state/index.js'
54import PQueue from 'p-queue'
65import osc , { OscMessage } from 'osc'
76import debounceFn from 'debounce-fn'
7+ import { ModuleLogger } from './logger.js'
88
99/**
1010 * Manages the internal state of the Behringer Wing, processes OSC messages, and emits state updates.
1111 * Handles request queueing and state synchronization.
1212 */
1313export class StateHandler extends EventEmitter {
1414 private model : ModelSpec
15+ private logger : ModuleLogger | undefined
1516 state ?: WingState
16- private logger ?: ModuleLogger
1717
1818 private inFlightRequests : { [ path : string ] : ( ) => void } = { }
1919 private readonly requestQueue : PQueue = new PQueue ( {
@@ -35,8 +35,8 @@ export class StateHandler extends EventEmitter {
3535 constructor ( model : ModelSpec , logger ?: ModuleLogger ) {
3636 super ( )
3737 this . model = model
38- this . state = new WingState ( model )
3938 this . logger = logger
39+ this . state = new WingState ( model )
4040
4141 this . debounceUpdateCompanion = debounceFn ( this . updateCompanionWithState . bind ( this ) , {
4242 wait : 200 ,
@@ -99,22 +99,27 @@ export class StateHandler extends EventEmitter {
9999 * Process an OSC message, update state, and emit events as needed.
100100 * @param msg OSC message to process.
101101 */
102- processMessage ( msg : OscMessage ) : void {
103- const { address, args } = msg
104-
105- const wasExpected = ! ! this . inFlightRequests [ msg . address ]
106- if ( this . inFlightRequests [ msg . address ] ) {
107- this . logger ?. debug ( `Received answer for request ${ msg . address } ` )
108- this . inFlightRequests [ msg . address ] ( )
109- delete this . inFlightRequests [ msg . address ]
110- }
102+ processMessage ( msgs : Set < OscMessage > ) : void {
103+ for ( const msg of msgs ) {
104+ const { address, args } = msg
105+
106+ const wasExpected = ! ! this . inFlightRequests [ msg . address ]
107+ if ( this . inFlightRequests [ msg . address ] ) {
108+ this . logger ?. debug ( `Received answer for request ${ msg . address } ` )
109+ this . inFlightRequests [ msg . address ] ( )
110+ delete this . inFlightRequests [ msg . address ]
111+ }
111112
112- this . state ?. set ( address , args as osc . MetaArgument [ ] )
113- this . logger ?. debug ( `State updated for ${ address } with args: ${ JSON . stringify ( args ) } ` )
113+ const value = args as osc . MetaArgument [ ]
114+ this . state ?. set ( address , value )
114115
115- const hadStructuralChange = this . updateLists ( msg )
116- if ( ! wasExpected && hadStructuralChange ) {
117- this . requestUpdate ( )
116+ const stringValue = value [ 0 ] . value
117+ this . logger ?. debug ( `State updated for ${ address } : ${ stringValue } ` )
118+
119+ const hadStructuralChange = this . updateLists ( msg )
120+ if ( ! wasExpected && hadStructuralChange ) {
121+ this . requestUpdate ( )
122+ }
118123 }
119124 }
120125
0 commit comments