public SessionsControl(IAdaptersControl adapters, SessionRecorderFactoryLocator recorders) { _adapters = adapters; _recorders = recorders; CompletedRecordings = _recordings.SelectMany(r => recorders.CreateForRecording(r)) .Do(r => r.Record()) .SelectMany(r => Observable.FromEventPattern <ISessionRecordingResult>(h => r.Closed += h, h => r.Closed -= h) .FirstOrDefaultAsync() .Where(e => e != null) .Select(e => e.EventArgs)) .Publish() .RefCount(); _recordersSubscription = CompletedRecordings.Subscribe(); }
internal SessionRecording(SessionDefinition definition, IAdaptersControl adapters) { definition.ThrowIfNull(nameof(definition)); Definition = definition; _adapters = adapters; DateTime openedAt = DateTime.Now; string sessionId = CreateRecordingId(openedAt, definition.Project, definition.Name); Settings = new SessionRecordingSettings(definition, sessionId, openedAt); InsertSteps(_preSteps, definition.PreSessionSteps); InsertSteps(_postSteps, definition.PostSessionSteps); InsertSteps(_steps, definition.SessionSteps); if (_steps.Count == 0) { InsertStep(_steps, SessionStep.Default); } if (definition.Welcome != null && definition.Welcome.Ignore == false) { InsertStep(_preSteps, new SessionStep() { Action = definition.Welcome }); } RecorderConfigurations = ValidateRecorders(definition.Recorders).DefaultIfEmpty(DefaultRecorderDefinition).ToDictionary ( d => d.Name, d => (IDictionary <string, object>)d.Configuration.ToDictionary(r => r.Key, r => r.Value, StringComparer.CurrentCultureIgnoreCase), StringComparer.CurrentCultureIgnoreCase ); DeviceConfigurations = ValidateDevices(definition.Devices).ToDictionary ( d => d.Device, d => (IDictionary <string, object>)d.Configuration.ToDictionary(c => c.Key, c => c.Value, StringComparer.CurrentCultureIgnoreCase) ); _stateMachine = CreateStateMachine(); }