Exemple #1
0
        public IDisposable Connect(IObservableDevice device)
        {
            DeviceType deviceType = device.DeviceType;

            var observer = device.States
                           //.Where(state => DeviceStatesHelper.IsBusy(state) == false)
                           .Throttle(TimeSpan.FromSeconds(THROTTLE_SECONDS))
                           .DistinctUntilChanged()
                           .ObserveOnDispatcher()
                           .Subscribe(onNext: state => Device_StateChanged(device, state.State));

            var currentState = device.States.Select(s => s.State).MostRecent(DeviceState.Disconnected).First();

            DeviceStatus status;

            if (_context.TryAddDevice(deviceType, currentState, out status))
            {
                StartedObservingDevice?.Invoke(this, status);
            }

            return(new CompositeDisposable
                   (
                       observer,
                       Disposable.Create(() =>
            {
                DeviceStatus lastStatus;
                if (_context.TryRemoveDevice(deviceType, out lastStatus))
                {
                    StoppedObservingDevice?.Invoke(this, lastStatus);
                }
            })
                   ));
        }
        public IDisposable Connect(IObservableDevice device)
        {
            var writer = new InMemoryDataBufferWriter(device.DeviceType, _buffer, device.DataType);

            var bufferedWriter = new BufferedDataWriter(writer, TimeSpan.FromMilliseconds(_configuration.BufferSize));

            return(new CompositeDisposable
                   (
                       device.Data.Do(d => bufferedWriter.Write(d))
                       .Finally(bufferedWriter.Close)
                       .Subscribe(),
                       bufferedWriter,
                       writer
                   ));

            //return Observable.Using
            //(
            //    () => new InMemoryDataBufferWriter(device.DeviceType, _buffer, device.RecordingDataType),
            //    writer => Observable.Using
            //    (
            //        () => new BufferedDataWriter(writer, TimeSpan.FromMilliseconds(_configuration.BufferSize)),
            //        bufferedWriter => device.Data.Do(d => bufferedWriter.Write(d))
            //                                     .Finally(bufferedWriter.Close)
            //    )
            //).Subscribe();
        }
Exemple #3
0
        public IDisposable Connect(IObservableDevice device)
        {
            Data   = device.Data.Cast <GazeData>();
            States = device.States;

            return(new CompositeDisposable
                   (
                       Data.StartWith(GazeData.Empty).Subscribe(d => RecentData = d),
                       States.Select(s => s.State).StartWith(DeviceState.Disconnected).Subscribe(s => RecentState = s)
                   ));
        }
Exemple #4
0
        private void Device_StateChanged(IObservableDevice device, DeviceState state)
        {
            _logger.Info(device.DeviceType.Code + " " + state);

            DeviceStatus status;

            if (_context.TryUpdateDevice(device.DeviceType, state, out status))
            {
                DeviceStateChanged?.Invoke(this, status);
            }
        }
Exemple #5
0
        public IDisposable Connect(IObservableDevice device)
        {
            var gazeData = device.Data
                           .OfType <GazeData>()
                           .Select(g => g.ToToolkit())
                           .ObserveOnDispatcher();

            _gazeStreams.OnNext(gazeData);

            return(Disposable.Create(Clear));
        }
        public IDisposable Connect(IObservableDevice device)
        {
            string extension = _writerFactory.FileExtension;

            IDisposable data = Disposable.Empty;

            if (device.DataType.IsSubclassOf(typeof(DeviceData)))
            {
                string deviceDataPath = _paths.BuildDeviceFilePath(device.DeviceType, "data", extension);
                data = RecordForSessionWithWriter(device.Data, deviceDataPath);
                //.TakeUntilOtherCompletes(_sessionRecordingEvents)
                //.AttachWriter(deviceDataPath, _writerFactory, device.RecordingDataType, DATA_BUFFER_SIZE)
                //.ObserveOn(scheduler: _scheduler)
                //.Subscribe();
                _result.Paths.Add(deviceDataPath);
            }


            string      deviceStatesPath = _paths.BuildDeviceFilePath(device.DeviceType, "states", extension);
            IDisposable states           = RecordForSessionWithWriter(device.States, deviceStatesPath);

            //.TakeUntilOtherCompletes(_sessionRecordingEvents)
            //.AttachWriter(deviceStatesPath, _writerFactory)
            //.ObserveOn(scheduler: _scheduler)
            //.Subscribe();
            _result.Paths.Add(deviceStatesPath);


            string      deviceLogsPath = _paths.BuildDeviceFilePath(device.DeviceType, "log", extension);
            IDisposable logs           = RecordForSessionWithWriter(device.Logs, deviceLogsPath);

            //.TakeUntilOtherCompletes(_sessionRecordingEvents)
            //.AttachWriter(deviceLogsPath, _writerFactory)
            //.ObserveOn(scheduler: _scheduler)
            //.Subscribe();
            _result.Paths.Add(deviceLogsPath);

            return(new CompositeDisposable(data, states, logs));
        }