示例#1
0
        private static IObservable <GazeData> ReadInputData(string filePath, IDataSerializationFactory serializationFactory)
        {
            return(Observable.Create <GazeData>(observer =>
            {
                CancellationDisposable cancel = new CancellationDisposable();
                Task.Run(() =>
                {
                    try
                    {
                        using (var file = File.OpenText(filePath))
                        {
                            using (var reader = serializationFactory.CreateReaderForType(file, typeof(GazeData)))
                            {
                                foreach (var data in reader.ReadAll <GazeData>())
                                {
                                    observer.OnNext(data);
                                }
                            }
                        }
                        observer.OnCompleted();
                    }
                    catch (Exception ex)
                    {
                        observer.OnError(ex);
                    }
                }, cancel.Token);

                return cancel;
            }).Publish().RefCount());
        }
示例#2
0
 public LocalSessionRecorder(SessionRecording recording, IObserversManager observers, IDataSerializationFactory writerFactory, ISessionsConfiguration configuration)
 {
     _recording     = recording;
     _observers     = observers;
     _writerFactory = writerFactory;
     _configuration = new Configuration.LocalSessionRecorderConfiguration(configuration);
 }
        public string Target => "Local"; // SessionRecorderTarget.Local;

        public ISessionRecorder Create(SessionRecording recording)
        {
            var definition = recording.Definition;
            IDataSerializationFactory writerFactory = _writers.FirstOrDefault(w => w.FormatName.Equals(definition.SerializationFormat, StringComparison.InvariantCultureIgnoreCase));

            if (writerFactory == null)
            {
                // get any writer if the specified format was not found
                writerFactory = _writers.FirstOrDefault();
            }

            writerFactory.ThrowIfNull(() => new ArgumentOutOfRangeException(nameof(definition.SerializationFormat), "No writer for session recording found."));

            return(new LocalSessionRecorder(recording, _observers, writerFactory, _configuration));
        }
示例#4
0
        private IObservable <T> WriteOutput <T>(IObservable <T> data, string path, IDataSerializationFactory serializationFactory)
        {
            TextWriter outputWriter;
            FileStream fileStream = null;

            fileStream   = new FileStream(path, FileMode.Create, FileAccess.Write);
            outputWriter = new StreamWriter(fileStream, new UTF8Encoding(false));

            var dataWriter = serializationFactory.CreateWriterForType(outputWriter, typeof(T));

            return(data.Do(d => dataWriter.Write(d)).Finally(() =>
            {
                dataWriter.Close();
                dataWriter.Dispose();
                outputWriter.Dispose();
                fileStream?.Dispose();
            }));
        }
示例#5
0
        internal LocalSessionDeviceRecorder
        (
            SessionRecording recording,
            IDataSerializationFactory writerFactory,
            SessionRecordingPathsBuilder paths,
            LocalSessionRecordingResult result,
            IScheduler scheduler
        )
        {
            _sessionEvents = recording.Events;
            _devices       = recording.SelectedDevices.ToList();
            _writerFactory = writerFactory;
            _paths         = paths;
            _result        = result;
            _scheduler     = scheduler;

            _sessionRecordingEvents = _sessionEvents.FirstOrDefaultAsync(e => e.State == SessionState.Processing || e.State == SessionState.Completed);
        }
示例#6
0
        public static IObservable <T> AttachWriter <T>(this IObservable <T> data, string path, IDataSerializationFactory factory, Type targetDataType, int bufferSize)
        {
            return(Observable.Create <T>(o =>
            {
                var streamWriter = new StreamWriter(path, true, new UTF8Encoding(false));
                var dataWriter = factory.CreateWriterForType(streamWriter, targetDataType);

                var bufferedWriter = new BufferedDataWriter(dataWriter, bufferSize);

                return new CompositeDisposable
                (
                    data.Do(d => bufferedWriter.Write(d))
                    .Finally(bufferedWriter.Close)
                    .Subscribe(o),
                    dataWriter,
                    streamWriter
                );
            }));

            // removed this implementation due to exceptions being raised that the streamWriter was disposed sooner than the dataWriter.
            //return Observable.Using
            //(
            //    () => new StreamWriter(path, true, new UTF8Encoding(false)),
            //    streamWriter => Observable.Using
            //    (
            //        () => factory.CreateWriterForType(streamWriter, targetDataType),
            //        dataWriter => Observable.Using
            //        (
            //            () => new BufferedDataWriter(dataWriter, bufferSize),
            //            bufferedWriter => data.Do(d => bufferedWriter.Write(d))
            //                                  .Finally(bufferedWriter.Close)
            //        )
            //    )
            //);
        }
示例#7
0
 public static IObservable <T> AttachWriter <T>(this IObservable <T> data, string path, IDataSerializationFactory factory)
 {
     return(AttachWriter(data, path, factory, typeof(T)));
 }
 public static IDataWriter CreateWriter <TData>(this IDataSerializationFactory factory, TextWriter writer)
 {
     return(factory.CreateWriterForType(writer, typeof(TData)));
 }