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()); }
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)); }
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(); })); }
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); }
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) // ) // ) //); }
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))); }