public ConnectionService(ILogger logger, IStateTransitionStrategy stateTransitionStrategy, IEventAggregatorService eventAggregatorService, IEnumerable<ITestState> testStates) { _logger = logger; _stateTransitionStrategy = stateTransitionStrategy; _eventAggregatorService = eventAggregatorService; _testStates = testStates; Initailise(_stateTransitionStrategy); LogCurrentState(); }
/// <summary> /// TODO move the logic for each strategy into own class, or create different versions of the ConnectionService class? /// TODO prefer enum over string name /// </summary> private void Initailise(IStateTransitionStrategy stateTransitionStrategy) { switch(stateTransitionStrategy.Name) { case "CallbackToController": { _currentState = new DisconnectedState(_stateTransitionStrategy); _continue = true; break; } case "EventAggregator": { _currentState = new DisconnectedState(_stateTransitionStrategy); // Subscribe to the event aggregator for state transition events _eventAggregatorService.Subscribe<StateTransitionEventArgs>(OnStateTransitionRequest); _continue = true; break; } case "RaiseEvent": { _currentState = new DisconnectedState(_stateTransitionStrategy); // Subscribe to the state transition for events _stateTransitionStrategy.ChangeState += _stateTransitionStrategy_ChangeState; _continue = true; break; } case "SequentialState": { // Sequential _testStates = _testStates.OrderBy(x => x.Order); _currentState = _testStates.First(); _continue = true; break; } default: { _logger.Log("Unknown strategy: " + stateTransitionStrategy.Name); _continue = false; break; } } }
public DisconnectedState(IStateTransitionStrategy stateTransitionStrategy) { _stateTransitionStrategy = stateTransitionStrategy; }