Example #1
0
        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();
        }
Example #2
0
        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();
        }