/// <summary> /// Used to validate the incoming text, expected on context.Activity, is /// valid according to the rules defined in the validation steps. /// </summary> public override async Task <NumberResult <T> > Recognize(ITurnContext context) { BotAssert.ContextNotNull(context); BotAssert.ActivityNotNull(context.Activity); if (context.Activity.Type != ActivityTypes.Message) { throw new InvalidOperationException("No Message to Recognize"); } NumberResult <T> numberResult = new NumberResult <T>(); IMessageActivity message = context.Activity.AsMessageActivity(); var results = _model.Parse(message.Text); if (results.Any()) { var result = results.First(); if (typeof(T) == typeof(float)) { if (float.TryParse(result.Resolution["value"].ToString(), out float value)) { numberResult.Status = PromptStatus.Recognized; numberResult.Value = (T)(object)value; numberResult.Text = result.Text; await Validate(context, numberResult); } } else if (typeof(T) == typeof(int)) { if (int.TryParse(result.Resolution["value"].ToString(), out int value)) { numberResult.Status = PromptStatus.Recognized; numberResult.Value = (T)(object)value; numberResult.Text = result.Text; await Validate(context, numberResult); } } } return(numberResult); }
/// <summary> /// Used to validate the incoming text, expected on context.Activity, is /// valid according to the rules defined in the validation steps. /// </summary> /// <param name="context">Context for the current turn of the conversation with the user.</param> /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns> public override async Task <NumberResult <T> > RecognizeAsync(ITurnContext context) { BotAssert.ContextNotNull(context); BotAssert.ActivityNotNull(context.Activity); if (context.Activity.Type != ActivityTypes.Message) { throw new InvalidOperationException("No Message to Recognize"); } var numberResult = new NumberResult <T>(); var message = context.Activity.AsMessageActivity(); var results = _model.Parse(message.Text); if (results.Any()) { var result = results.First(); if (typeof(T) == typeof(float)) { if (float.TryParse(result.Resolution["value"].ToString(), out var value)) { numberResult.Status = PromptStatus.Recognized; numberResult.Value = (T)(object)value; numberResult.Text = result.Text; await ValidateAsync(context, numberResult); } } else if (typeof(T) == typeof(int)) { if (int.TryParse(result.Resolution["value"].ToString(), out var value)) { numberResult.Status = PromptStatus.Recognized; numberResult.Value = (T)(object)value; numberResult.Text = result.Text; await ValidateAsync(context, numberResult); } } else if (typeof(T) == typeof(long)) { if (long.TryParse(result.Resolution["value"].ToString(), out var value)) { numberResult.Status = PromptStatus.Recognized; numberResult.Value = (T)(object)value; numberResult.Text = result.Text; await ValidateAsync(context, numberResult); } } else if (typeof(T) == typeof(double)) { if (double.TryParse(result.Resolution["value"].ToString(), out var value)) { numberResult.Status = PromptStatus.Recognized; numberResult.Value = (T)(object)value; numberResult.Text = result.Text; await ValidateAsync(context, numberResult); } } else if (typeof(T) == typeof(decimal)) { if (decimal.TryParse(result.Resolution["value"].ToString(), out var value)) { numberResult.Status = PromptStatus.Recognized; numberResult.Value = (T)(object)value; numberResult.Text = result.Text; await ValidateAsync(context, numberResult); } } else { throw new NotSupportedException($"type argument T of type 'typeof(T)' is not supported"); } } return(numberResult); }