static void CreateSampleAnswer() { ChatItem item1 = new ChatItem(); item1.Id = "Cortana"; item1.ChatText = "Hi this is Cortana"; ChatItem item2 = new ChatItem(); item2.Id = "User"; item2.ChatText = "Hi this is User"; ChatItem item3 = new ChatItem(); item3.Id = "Cortana"; item3.ChatText = "Hi shall we complete the Task?"; ChatWindow chatWindow = new ChatWindow(); chatWindow.ChatList.Add(item1); chatWindow.ChatList.Add(item2); chatWindow.ChatList.Add(item3); TrainBookingState bookingState = new TrainBookingState(); bookingState.Source = new Station(); bookingState.Source.Name = "Hyderabad"; bookingState.Source.Code = "SC"; bookingState.Destination = new Station(); bookingState.Destination.Name = "Chennai Central"; bookingState.Destination.Code = "MAS"; bookingState.DateOfJourney = DateTime.Now.AddDays(10); bookingState.TrainInfo = new TrainInfo(); bookingState.TrainInfo.Name = "Chennai Express"; bookingState.TrainInfo.Number = "12604"; bookingState.CoachPreference = CoachType.SecondAC; bookingState.PhoneNumber = "1234567890"; bookingState.NumberOfPassangers = 4; PassangerInfo pas1 = new PassangerInfo(); pas1.Name = "BillGates"; pas1.Age = 50; pas1.Gender = Gender.Male; pas1.BerthChoice = BerthChoice.SideLower; PassangerInfo pas2 = new PassangerInfo(); pas2.Name = "Balmer"; pas2.Age = 49; pas2.Gender = Gender.Male; pas2.BerthChoice = BerthChoice.SideUpper; PassangerInfo pas3 = new PassangerInfo(); pas3.Name = "BillGates"; pas3.Age = 45; pas3.Gender = Gender.Male; pas3.BerthChoice = BerthChoice.Lower; bookingState.PassangerInfoList = new List<PassangerInfo>(); bookingState.PassangerInfoList.Add(pas1); bookingState.PassangerInfoList.Add(pas2); bookingState.PassangerInfoList.Add(pas3); TaskAnswer answer = new TaskAnswer(); answer.Title = "Book Train Ticket Task"; answer.TaskType = TaskType.Train; answer.ChatWindow = chatWindow; answer.TaskState = bookingState; string jsonString = JsonConvert.SerializeObject(answer); return; }
private TaskAnswer PostStateAction(TaskAnswer answer, UserProfile profile, string query) { TrainBookingState taskState = answer.TaskState as TrainBookingState; if (taskState == null) { return null; } TaskStateCode nextState = GetNextState(answer); answer.CurrentState = nextState; string question; if (!_chatItemMap.TryGetValue(nextState, out question)) { question = "Some Error. it shouldn't"; return null; } ChatItem chatItem = new ChatItem(); PassangerInfo passenger = taskState.PassangerInfoList.FirstOrDefault(x => x.Id == answer.CurrentPassengerId); if (passenger == null) { // Fixme; avoid dummy passenger PassangerInfo passanger = new PassangerInfo(); } switch (nextState) { case TaskStateCode.InitState: break; case TaskStateCode.SourceStationState: break; case TaskStateCode.DestinationStationState: break; case TaskStateCode.DateOfJourneyState: break; case TaskStateCode.TrainSelectionState: question = string.Format(question, taskState.Source.Code, taskState.Destination.Code); FillTrainList(chatItem, taskState.Source.Code, taskState.Destination.Code); break; case TaskStateCode.PreferredCoachState: FillPreferredCoachList(chatItem); break; case TaskStateCode.NumberOfPassangersState: break; case TaskStateCode.PassengerNameState: question = string.Format(question, answer.CurrentPassengerId); break; case TaskStateCode.PassengerGenderState: question = string.Format(question, passenger.Name); break; case TaskStateCode.PassengerAgeState: question = string.Format(question, (passenger.Gender.Equals(Gender.Male)) ? "his" : "her"); break; case TaskStateCode.PassengerSeatPreferenceState: FillePreferredBerthList(chatItem); break; case TaskStateCode.PassengerDetailsState: break; case TaskStateCode.PhoneNumberState: break; case TaskStateCode.BookTicketState: break; case TaskStateCode.EndState: profileHelper.UpdateUserProfile(taskState, profile); break; default: break; } chatItem.Id = "Cortana"; chatItem.ChatText = question; answer.ChatWindow.ChatList.Add(chatItem); return answer; }
private bool TryGetNextPassengerState(PassangerInfo passanger, out TaskStateCode nextState) { nextState = TaskStateCode.ExceptionState; if (string.IsNullOrEmpty(passanger.Name)) { nextState = TaskStateCode.PassengerNameState; return true; } if (passanger.Gender.Equals(Gender.None)) { nextState = TaskStateCode.PassengerGenderState; return true; } if (passanger.Age == 0) { nextState = TaskStateCode.PassengerAgeState; return true; } if (passanger.BerthChoice.Equals(BerthChoice.None)) { nextState = TaskStateCode.PassengerSeatPreferenceState; return true; } return false; }
public bool TryUpdateTaskState(TaskAnswer answer, UserProfile userProfile, string query) { TrainBookingState taskState = answer.TaskState as TrainBookingState; if (taskState == null) { return false; } TaskStateCode currentState = answer.CurrentState; bool updated = false; switch (currentState) { case TaskStateCode.SourceStationState: Station sourceStation; if (TryGetStation(query, out sourceStation)) { taskState.Source = sourceStation; updated = true; } break; case TaskStateCode.DestinationStationState: Station destinationStation; if (TryGetStation(query, out destinationStation)) { taskState.Destination = destinationStation; updated = true; } break; case TaskStateCode.DateOfJourneyState: DateTime date; if (DateTime.TryParse(query, out date)) { taskState.DateOfJourney = date; updated = true; } break; case TaskStateCode.TrainSelectionState: TrainInfo trainInfo; if (TryGetTrain(query, out trainInfo)) { taskState.TrainInfo = trainInfo; updated = true; } break; case TaskStateCode.PreferredCoachState: CoachType coachType; if (TryGetCoach(query, out coachType)) { taskState.CoachPreference = coachType; updated = true; } break; case TaskStateCode.NumberOfPassangersState: uint number; if (TryGetNumberOfPassengers(query, out number)) { taskState.NumberOfPassangers = number; updated = true; } break; case TaskStateCode.PassengerNameState: string name; if (TryGetPassengerName(query, out name)) { uint iPassenger = answer.CurrentPassengerId; var passengerList = taskState.PassangerInfoList; var passenger = passengerList.FirstOrDefault(x => x.Id == iPassenger); if (passenger == null) { passenger = new PassangerInfo(); passengerList.Add(passenger); passenger.Id = (uint)passengerList.Count; answer.CurrentPassengerId = passenger.Id; } passenger.Name = name; updated = true; } break; case TaskStateCode.PassengerAgeState: uint age; if (TryGetPassengerAge(query, out age)) { uint iPassenger = answer.CurrentPassengerId; var passengerList = taskState.PassangerInfoList; var passenger = passengerList.FirstOrDefault(x => x.Id == iPassenger); if (passenger == null) { passenger = new PassangerInfo(); passengerList.Add(passenger); passenger.Id = (uint)passengerList.Count; answer.CurrentPassengerId = passenger.Id; } passenger.Age = age; updated = true; } break; case TaskStateCode.PassengerGenderState: Gender gender; if (TryGetPassengerGender(query, out gender)) { uint iPassenger = answer.CurrentPassengerId; var passengerList = taskState.PassangerInfoList; var passenger = passengerList.FirstOrDefault(x => x.Id == iPassenger); if (passenger == null) { passenger = new PassangerInfo(); passengerList.Add(passenger); passenger.Id = (uint)passengerList.Count; answer.CurrentPassengerId = passenger.Id; } passenger.Gender = gender; updated = true; } break; case TaskStateCode.PassengerSeatPreferenceState: BerthChoice berthChoice; if (TryGetPassengerSeatPreference(query, out berthChoice)) { uint iPassenger = answer.CurrentPassengerId; var passengerList = taskState.PassangerInfoList; var passenger = passengerList.FirstOrDefault(x => x.Id == iPassenger); if (passenger == null) { passenger = new PassangerInfo(); passengerList.Add(passenger); passenger.Id = (uint)passengerList.Count; answer.CurrentPassengerId = passenger.Id; } passenger.BerthChoice = berthChoice; updated = true; } break; case TaskStateCode.PhoneNumberState: string phoneNumber; if (TryGetPhoneNumber(query, out phoneNumber)) { taskState.PhoneNumber = phoneNumber; updated = true; } break; case TaskStateCode.BookTicketState: BookedState ticketBookedState; if (TryGetConfirmation(query, out ticketBookedState)) { answer.TicketBookedState = ticketBookedState; updated = true; } break; } return updated; }