public void SendTokenizedMessage() { int parameter = rnd.Next(0, 100); var msg = new TokenizedMessage() { Parameter = parameter }; if (parameter % 10 == 0) { Messenger.Default.Send(msg, "Ten"); } else { Messenger.Default.Send(msg, (parameter % 2 == 1) ? "Odd" : "Even"); } }
/// <summary> /// Returns any / all possible Action Configs which match the message. /// </summary> /// <param name="actionConfigs">All Action Configs</param> /// <param name="message">The tokenized message</param> /// <returns>Returns a collection of zero to many possible matches.</returns> public static IEnumerable <ActionConfig> IdentifyAllFromMessage(ActionConfig[] actionConfigs, TokenizedMessage message) { var tokenQueue = new Queue <MessageToken>(message.Tokens); // First try matching on a name before trying to match on parameters. return(actionConfigs.Pipe( ac => matchByName(ac, tokenQueue), ac => matchByParams(ac, tokenQueue.ToArray()))); }
/// <summary> /// Returns a single Action Config which matches the message. /// If matches is not exactly equal to 1, then return an error. /// </summary> /// <param name="actionConfigs">All Action Configs</param> /// <param name="message">The tokenized message</param> /// <returns>Returns a single matching ActionConfig, or an error.</returns> public static Try <ActionConfig> IdentifyFromMessage(ActionConfig[] actionConfigs, TokenizedMessage message) { var matchingConfigs = IdentifyAllFromMessage(actionConfigs, message).ToArray(); if (matchingConfigs.Length == 1) { return(Try(matchingConfigs.First)); } var actionsForMessage = $"actions for message '{message.Message}'."; return(!matchingConfigs.Any() ? error($"Unable to find any matching {actionsForMessage}") : error($"Found {matchingConfigs.Length} possible {actionsForMessage} Please clarify.")); }