crossmate

A collaborative crossword app for iOS
Log | Files | Refs | LICENSE

InputMonitor.swift (1104B)


      1 import GameController
      2 import Observation
      3 
      4 @MainActor
      5 @Observable
      6 final class InputMonitor {
      7     private(set) var isConnected: Bool
      8 
      9     private var observers: [NSObjectProtocol] = []
     10 
     11     init() {
     12         #if targetEnvironment(simulator)
     13         self.isConnected = false
     14         #else
     15         self.isConnected = GCKeyboard.coalesced != nil
     16 
     17         let center = NotificationCenter.default
     18         observers.append(center.addObserver(
     19             forName: .GCKeyboardDidConnect,
     20             object: nil,
     21             queue: .main
     22         ) { [weak self] _ in
     23             Task { @MainActor in
     24                 self?.update()
     25             }
     26         })
     27         observers.append(center.addObserver(
     28             forName: .GCKeyboardDidDisconnect,
     29             object: nil,
     30             queue: .main
     31         ) { [weak self] _ in
     32             Task { @MainActor in
     33                 self?.update()
     34             }
     35         })
     36         #endif
     37     }
     38 
     39     func update() {
     40         #if targetEnvironment(simulator)
     41         isConnected = false
     42         #else
     43         isConnected = GCKeyboard.coalesced != nil
     44         #endif
     45     }
     46 }