예제 #1
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
                                        JsonSerializer serializer)
        {
            var obj  = JObject.Load(reader);
            var type = obj["Type"].Value <string>();

            State.IBuilder <State> result = null;

            switch (Enum.Parse(typeof(StateType), type))
            {
            case StateType.Choice:
                result = ChoiceState.GetBuilder();
                break;

            case StateType.Fail:
                result = FailState.GetBuilder();
                break;

            case StateType.Parallel:
                result = ParallelState.GetBuilder();
                break;

            case StateType.Pass:
                result = PassState.GetBuilder();
                break;

            case StateType.Succeed:
                result = SucceedState.GetBuilder();
                break;

            case StateType.Task:
                result = TaskState.GetBuilder();
                break;

            case StateType.Wait:
                result = WaitState.GetBuilder();
                break;

            case StateType.Map:
                result = MapState.GetBuilder();
                break;
            }

            serializer.Populate(obj.CreateReader(), result);

            return(result);
        }
예제 #2
0
 /// <summary>
 ///     REQUIRED. Adds a new state to the state machine. A state machine MUST have at least one state.
 /// </summary>
 /// <param name="stateName">Name of the state</param>
 /// <param name="stateBuilder">
 ///     Instance of <see cref="State.Builder" />. Note that the <see cref="State" /> object is not built until
 ///     the <see cref="StateMachine" /> is built so any modifications on the state model will be reflected in this object.
 /// </param>
 /// <typeparam name="T"></typeparam>
 /// <returns>This object for method chaining.</returns>
 public Builder State <T>(string stateName, State.IBuilder <T> stateBuilder) where T : State
 {
     _states.Add(stateName, stateBuilder);
     return(this);
 }