* fix: buffer HID response channel and reduce timeout to prevent goroutine leaks (#1154)
* fix: remove goroutine from HID message handler to prevent leak and disconnect race (#1154)
The goroutine+select pattern in onHidMessage leaked permanently when
timeouts fired (unbuffered channel, no reader). On the single-core
RV1106, boot-time CPU contention cascaded these leaks, causing
persistent mouse latency until reboot.
Processing synchronously is safe — every path in handleHidRPCMessage
is already bounded (10ms HID write deadline, cancellable macros,
non-blocking DataChannel sends). This also eliminates a race where
timed-out goroutines could overwrite the all-keys-up report on
session disconnect.
---------
Co-authored-by: Adam Shiervani <adam@shiervani.com>
- Changed log level from WARN to DEBUG for session-related messages in hidrpc.go to reduce noise during expected conditions.
- Adjusted logging in nmlite/interface.go to use DEBUG for non-critical DHCP lease messages and router solicitation failures.
- Improved link manager logging in nmlite/link/manager.go to differentiate between expected and persistent interface down states.
- Enhanced DHCP client logging in udhcpc/udhcpc.go to indicate non-fatal errors when calculating lease expiry.
* feat: release keyPress automatically
* send keepalive when pressing the key
* remove logging
* clean up logging
* chore: use unreliable channel to send keepalive events
* chore: use ordered unreliable channel for pointer events
* chore: adjust auto release key interval
* chore: update logging for kbdAutoReleaseLock
* chore: update comment for KEEPALIVE_INTERVAL
* fix: should cancelAutorelease when pressed is true
* fix: handshake won't happen if webrtc reconnects
* chore: add trace log for writeWithTimeout
* chore: add timeout for KeypressReport
* chore: use the proper key to send release command
* refactor: simplify HID RPC keyboard input handling and improve key state management
- Updated `handleHidRPCKeyboardInput` to return errors directly instead of keys down state.
- Refactored `rpcKeyboardReport` and `rpcKeypressReport` to return errors instead of states.
- Introduced a queue for managing key down state updates in the `Session` struct to prevent input handling stalls.
- Adjusted the `UpdateKeysDown` method to handle state changes more efficiently.
- Removed unnecessary logging and commented-out code for clarity.
* refactor: enhance keyboard auto-release functionality and key state management
* fix: correct Windows default auto-repeat delay comment from 1ms to 1s
* refactor: send keypress as early as possible
* refactor: replace console.warn with console.info for HID RPC channel events
* refactor: remove unused NewKeypressKeepAliveMessage function from HID RPC
* fix: handle error in key release process and log warnings
* fix: log warning on keypress report failure
* fix: update auto-release keyboard interval to 225
* refactor: enhance keep-alive handling and jitter compensation in HID RPC
- Implemented staleness guard to ignore outdated keep-alive packets.
- Added jitter compensation logic to adjust timer extensions based on packet arrival times.
- Introduced new methods for managing keep-alive state and reset functionality in the Session struct.
- Updated auto-release delay mechanism to use dynamic durations based on keep-alive timing.
- Adjusted keep-alive interval in the UI to improve responsiveness.
* gofmt
* clean up code
* chore: use dynamic duration for scheduleAutoRelease
* Use harcoded timer reset value for now
* fix: prevent nil pointer dereference when stopping timers in Close method
* refactor: remove nil check for kbdAutoReleaseTimers in DelayAutoReleaseWithDuration
* refactor: optimize dependencies in useHidRpc hooks
* refactor: streamline keep-alive timer management in useKeyboard hook
* refactor: clarify comments in useKeyboard hook for resetKeyboardState function
* refactor: reduce keysDownStateQueueSize
* refactor: close and reset keysDownStateQueue in newSession function
* chore: resolve conflicts
* resolve conflicts
---------
Co-authored-by: Adam Shiervani <adam.shiervani@gmail.com>