ReadFromFdcConfigurationBase.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using Wayne.ForecourtControl.Fusion.ReadDeviceStatus;
  2. using Wayne.Lib;
  3. using Wayne.Lib.StateEngine;
  4. using Wayne.Lib.StateEngine.Generic;
  5. namespace Wayne.ForecourtControl.Fusion.StatusStateMachine.States
  6. {
  7. [TimeoutDescription(BasicTransitionType.Error)]
  8. [EventDescription(EventType.Response, "Success", BasicTransitionType.Done)]
  9. [EventDescription(EventType.Response, "Failure", BasicTransitionType.Error)]
  10. internal abstract class ReadFromFdcConfigurationBase<TServiceResponse> : TimeoutState<ReadDeviceStatusController>
  11. {
  12. private object _userToken;
  13. protected override void Enter(StateEntry stateEntry, ref Transition transition)
  14. {
  15. base.Enter(stateEntry, ref transition);
  16. MakeRequest(_userToken = new object());
  17. }
  18. protected abstract void MakeRequest(object userToken);
  19. protected override void HandleNonTimeoutEvent(StateEngineEvent stateEngineEvent, ref Transition transition)
  20. {
  21. GenericEvent<AsyncCompletedEventArgs> genericEvent = stateEngineEvent as GenericEvent<AsyncCompletedEventArgs>;
  22. if (genericEvent != null && genericEvent.EventArgs.UserToken.Equals(_userToken))
  23. {
  24. _userToken = null;
  25. genericEvent.Handled = true;
  26. if (genericEvent.EventArgs.Success)
  27. {
  28. genericEvent.EventArgs.WhenOfType((AsyncCompletedEventArgs<TServiceResponse> args) =>
  29. Response(args.Result));
  30. transition = new Transition(this, BasicTransitionType.Done);
  31. }
  32. else
  33. {
  34. transition = new Transition(this, BasicTransitionType.Error);
  35. }
  36. }
  37. }
  38. protected abstract void Response(TServiceResponse args);
  39. protected override int TimeoutInterval
  40. {
  41. get { return 10000; }
  42. }
  43. protected override void Timeout(ref Transition transition)
  44. {
  45. transition = new Transition(this, BasicTransitionType.Error);
  46. }
  47. }
  48. }