private async Task <bool> EvaluateExpressionInput(ITurnContext turnContext, RequestState requestState) { var res = false; var text = turnContext.Activity.Text; var curLink = requestState.CurrentLink; ActionLink actionResult; ExpEvalResultType op = curLink.NeuralExp.Next(text, out actionResult); switch (op) { case ExpEvalResultType.Skipped: case ExpEvalResultType.False: case ExpEvalResultType.True: { if (op == ExpEvalResultType.Skipped) { await SendNotes(curLink, turnContext); } switch (actionResult.Type) { case LinkType.NeuralLink: { var link = await DbLinkCollection.FindOneById(actionResult.LinkId); if (link != null) { curLink = link; requestState.StepForward(curLink); await SendResponseForCurrentNode(turnContext, requestState); } else { //Invalid expression evaluation link id. await SendReply(turnContext, $"Invalid node information : '{actionResult.LinkId}',please report this issue to the bot administrator.", SuggestionExtension.GetCommonSuggestionActions()); } } break; case LinkType.ActionLink: { var action = await DbActionCollection.FindOneById(actionResult.LinkId); await turnContext.SendActivityAsync(action.BuildActionRespose(turnContext)); requestState.CurrentState = ChatStateType.RecordFeedback; } break; case LinkType.NeuralResource: { var resource = await DbResourceCollection.FindOneById(actionResult.LinkId); await turnContext.SendActivityAsync(resource.BuildResourceResponse(turnContext)); requestState.CurrentState = ChatStateType.RecordFeedback; } break; default: break; } if (requestState.CurrentState == ChatStateType.RecordFeedback) { await Task.Delay(1000).ContinueWith(async ct => { await SendReply(turnContext, StringsProvider.TryGet(BotResourceKeyConstants.Feedback), SuggestionExtension.GetFeedbackSuggestionActions()); }); } res = true; } break; case ExpEvalResultType.Exception: case ExpEvalResultType.Invalid: { await SendReply(turnContext, "Invalid input, please try again!", SuggestionExtension.GetCommonSuggestionActions("Exit:exit")); requestState.CurrentState = ChatStateType.InvalidInput; } break; case ExpEvalResultType.Empty: //TODO { await SendReply(turnContext, $"Evaluated empty expression of node : '{curLink._id}',please report this issue to the bot administrator.", SuggestionExtension.GetCommonSuggestionActions()); } break; default: break; } return(res); }
private async Task <bool> EvaluateExpressionInput(ITurnContext turnContext, RequestState requestState) { var res = false; var text = turnContext.Activity.Text; var curLink = requestState.CurrentLink; ActionLink actionResult; ExpEvalResultType op = curLink.NeuralExp.Next(text, out actionResult); switch (op) { case ExpEvalResultType.Skipped: case ExpEvalResultType.False: case ExpEvalResultType.True: { switch (actionResult.Type) { case LinkType.NeuralLink: { var link = await DbLinkCollection.FindOneById(actionResult.LinkId); if (link != null) { curLink = link; requestState.StepForward(curLink); await SendResponseForCurrentNode(turnContext, requestState); } else { //Invalid expression evaluation link id. } } break; case LinkType.ActionLink: { var action = await DbActionCollection.FindOneById(actionResult.LinkId); await turnContext.SendActivityAsync(action.BuildActionRespose(turnContext)); await Task.Delay(1000).ContinueWith(async ct => { await SendReply(turnContext, StringsProvider.TryGet(BotResourceKeyConstants.Feedback), SuggestionExtension.GetFeedbackSuggestionActions()); }); requestState.CurrentState = ChatStateType.RecordFeedback; } break; case LinkType.NeuralResource: break; default: break; } } res = true; break; case ExpEvalResultType.Exception: case ExpEvalResultType.Invalid: { await SendReply(turnContext, "Invalid input, Try again!", SuggestionExtension.GetCommonSuggestionActions()); requestState.CurrentState = ChatStateType.InvalidInput; } break; case ExpEvalResultType.Empty: //TODO default: break; } return(res); }