123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- using Wayne.ForecourtControl.Fusion.ReadDeviceStatus;
- using Wayne.Lib;
- using Wayne.Lib.StateEngine;
- using Wayne.Lib.StateEngine.Generic;
- namespace Wayne.ForecourtControl.Fusion.StatusStateMachine.States
- {
- [TimeoutDescription(BasicTransitionType.Error)]
- [EventDescription(EventType.Response, "Success", BasicTransitionType.Done)]
- [EventDescription(EventType.Response, "Failure", BasicTransitionType.Error)]
- internal abstract class ReadFromFdcConfigurationBase<TServiceResponse> : TimeoutState<ReadDeviceStatusController>
- {
- private object _userToken;
- protected override void Enter(StateEntry stateEntry, ref Transition transition)
- {
- base.Enter(stateEntry, ref transition);
- MakeRequest(_userToken = new object());
- }
- protected abstract void MakeRequest(object userToken);
- protected override void HandleNonTimeoutEvent(StateEngineEvent stateEngineEvent, ref Transition transition)
- {
- GenericEvent<AsyncCompletedEventArgs> genericEvent = stateEngineEvent as GenericEvent<AsyncCompletedEventArgs>;
- if (genericEvent != null && genericEvent.EventArgs.UserToken.Equals(_userToken))
- {
- _userToken = null;
- genericEvent.Handled = true;
- if (genericEvent.EventArgs.Success)
- {
- genericEvent.EventArgs.WhenOfType((AsyncCompletedEventArgs<TServiceResponse> args) =>
- Response(args.Result));
- transition = new Transition(this, BasicTransitionType.Done);
- }
- else
- {
- transition = new Transition(this, BasicTransitionType.Error);
- }
- }
- }
- protected abstract void Response(TServiceResponse args);
- protected override int TimeoutInterval
- {
- get { return 10000; }
- }
- protected override void Timeout(ref Transition transition)
- {
- transition = new Transition(this, BasicTransitionType.Error);
- }
- }
- }
|