Esempio n. 1
0
        /// <summary>
        /// Updates task state for a given taskId based on the task event
        /// </summary>
        private void UpdateState(string taskId, TaskStateEvent taskEvent)
        {
            var taskInfo = GetTaskInfo(taskId);

            RecordingTime(taskId, taskInfo, taskEvent);
            taskInfo.TaskState.MoveNext(taskEvent);
            taskInfo.TimeStateUpdated = DateTime.Now;
        }
Esempio n. 2
0
 /// <summary>
 /// Recording timing from one task state to another
 /// The method can be extended to record the time for other task states
 /// The log level should be changed to verb once we complete the testing
 /// </summary>
 private void RecordingTime(string taskId, TaskInfo taskInfo, TaskStateEvent taskEvent)
 {
     if (taskInfo.TaskState.CurrentState.Equals(TaskState.TaskWaitingForClose) && taskEvent.Equals(TaskStateEvent.CompletedTask))
     {
         var timeSpan = DateTime.Now - taskInfo.TimeStateUpdated;
         _totalNumberOfClosedTasksByDriver++;
         _totalTaskClosingTimeSpan = _totalTaskClosingTimeSpan.Add(timeSpan);
         Logger.Log(Level.Info, "RecordClosingTime for task id {0}, closing time: {1}, average closing time: {2}.", taskId, timeSpan.Milliseconds, _totalTaskClosingTimeSpan.Milliseconds / _totalNumberOfClosedTasksByDriver);
     }
 }
Esempio n. 3
0
        /// <summary>
        /// Get next valid state based on the current state and event given without changing the current state
        /// If there is no valid next state, TaskStateTransitionException will be thrown.
        /// </summary>
        /// <param name="taskEvent"></param>
        /// <returns></returns>
        internal TaskState GetNext(TaskStateEvent taskEvent)
        {
            StateTransition <TaskState, TaskStateEvent> transition = new StateTransition <TaskState, TaskStateEvent>(_currentState, taskEvent);
            TaskState nextState;

            if (!Transitions.TryGetValue(transition, out nextState))
            {
                throw new TaskStateTransitionException(_currentState, taskEvent);
            }
            return(nextState);
        }
Esempio n. 4
0
 /// <summary>
 /// Move to the next state
 /// If it is not able to move to the next valid state for a given event, TaskStateTransitionException will be thrown.
 /// </summary>
 /// <param name="taskEvent"></param>
 /// <returns></returns>
 internal TaskState MoveNext(TaskStateEvent taskEvent)
 {
     _currentState = GetNext(taskEvent);
     return(_currentState);
 }
Esempio n. 5
0
 /// <summary>
 /// Updates task state for a given taskId based on the task event
 /// </summary>
 /// <param name="taskId"></param>
 /// <param name="taskEvent"></param>
 private void UpdateState(string taskId, TaskStateEvent taskEvent)
 {
     GetTaskInfo(taskId).TaskState.MoveNext(taskEvent);
 }
Esempio n. 6
0
 /// <summary>
 /// Exception when error happens in task state transition
 /// </summary>
 /// <param name="taskState"></param>
 /// <param name="taskEvent"></param>
 internal TaskStateTransitionException(TaskState taskState, TaskStateEvent taskEvent)
     : base(ExceptionMessage(taskState, taskEvent))
 {
 }
Esempio n. 7
0
 /// <summary>
 /// Format a message
 /// </summary>
 /// <param name="taskState"></param>
 /// <param name="taskEvent"></param>
 /// <returns></returns>
 private static string ExceptionMessage(TaskState taskState, TaskStateEvent taskEvent)
 {
     return(string.Format(CultureInfo.InvariantCulture, "Unexpected event {0} in state {1}.", taskEvent, taskState));
 }
Esempio n. 8
0
 /// <summary>
 /// Move to the next state
 /// If it is not able to move to the next valid state for a given event, TaskStateTransitionException will be thrown.
 /// </summary>
 /// <param name="taskEvent"></param>
 /// <returns></returns>
 internal TaskState MoveNext(TaskStateEvent taskEvent)
 {
     _currentState = GetNext(taskEvent);
     return _currentState;
 }
Esempio n. 9
0
 /// <summary>
 /// Get next valid state based on the current state and event given without changing the current state
 /// If there is no valid next state, TaskStateTransitionException will be thrown.
 /// </summary>
 /// <param name="taskEvent"></param>
 /// <returns></returns>
 internal TaskState GetNext(TaskStateEvent taskEvent)
 {
     StateTransition<TaskState, TaskStateEvent> transition = new StateTransition<TaskState, TaskStateEvent>(_currentState, taskEvent);
     TaskState nextState;
     if (!Transitions.TryGetValue(transition, out nextState))
     {
         throw new TaskStateTransitionException(_currentState, taskEvent);
     }
     return nextState;
 }
Esempio n. 10
0
 /// <summary>
 /// Updates task state for a given taskId based on the task event
 /// </summary>
 /// <param name="taskId"></param>
 /// <param name="taskEvent"></param>
 private void UpdateState(string taskId, TaskStateEvent taskEvent)
 {
     GetTaskInfo(taskId).TaskState.MoveNext(taskEvent);
 }
 /// <summary>
 /// Format a message
 /// </summary>
 /// <param name="taskState"></param>
 /// <param name="taskEvent"></param>
 /// <returns></returns>
 private static string ExceptionMessage(TaskState taskState, TaskStateEvent taskEvent)
 {
     return string.Format(CultureInfo.InvariantCulture, "Unexpected event {0} in state {1}.", taskEvent, taskState);
 }
 /// <summary>
 /// Exception when error happens in task state transition
 /// </summary>
 /// <param name="taskState"></param>
 /// <param name="taskEvent"></param>
 internal TaskStateTransitionException(TaskState taskState, TaskStateEvent taskEvent)
     : base(ExceptionMessage(taskState, taskEvent))
 {            
 }