public BLECBCentralManagerWrapper(CBCentralManager manager)
        {
            _wes = new WeakEventSource();

            Manager = manager;

            _o1 = Manager.AddObserver(
                "state",
                NSKeyValueObservingOptions.OldNew,
                change =>
            {
                using (var ov = (NSNumber)change.OldValue)
                    using (var nv = (NSNumber)change.NewValue)
                    {
                        var oldState = (CBCentralManagerState)ov.Int32Value;
                        var newState = (CBCentralManagerState)nv.Int32Value;

                        _wes.RaiseEvent(nameof(StateChanged), Manager, new BLECBCentralManagerStateEventArgs(oldState, newState));
                    }
            });

            _o2 = manager.AddObserver(
                "isScanning",
                NSKeyValueObservingOptions.New,
                change => _wes.RaiseEvent(nameof(ScanStateChanged), Manager, EventArgs.Empty));

            Manager.ConnectedPeripheral           += OnConnectedPeripheral;
            Manager.DisconnectedPeripheral        += OnDisconnectedPeripheral;
            Manager.DiscoveredPeripheral          += OnDiscoveredPeripheral;
            Manager.FailedToConnectPeripheral     += OnFailedToConnectPeripheral;
            Manager.RetrievedConnectedPeripherals += OnRetrievedConnectedPeripherals;
            Manager.RetrievedPeripherals          += OnRetrievedPeripherals;
            Manager.UpdatedState     += OnUpdatedState;
            Manager.WillRestoreState += OnWillRestoreState;
        }
示例#2
0
        private CentralManager()
        {
            @delegate = new CentralManagerDelegate();
            central   = new CBCentralManager(@delegate, new DispatchQueue("Dandy.Devices.BLE.Mac.CentralManager"));
            var isScanningSubject = new BehaviorSubject <bool>(central.IsScanning);

            isScanningObserver = central.AddObserver("isScanning", NSKeyValueObservingOptions.New, change => {
                var value = ((NSNumber)change.NewValue).BoolValue;
                isScanningSubject.OnNext(value);
            });
            isScanningObservable = isScanningSubject.AsObservable();
        }