/// <summary> /// Send the <paramref name="message"/> to the appropriate <see cref="ToolboxAction"/> for execution. /// </summary> /// <param name="message"></param> /// <param name="next"></param> /// <returns> /// True if the message was executed; otherwise, false. /// </returns> public override bool Queue(string message, Action <XenMessage> next = null) { _callback = next; var parsed = false; var executed = false; XenMessage xMessage = null; if (string.IsNullOrWhiteSpace(message)) { parsed = false; } else { parsed = XenMessage.TryParseFromAction(MessageFinder, message, out xMessage); } if (parsed) { var matches = Registrar.FindAll(r => r.Message.Name.Equals(xMessage.Action)); if (matches.Count == 0) { ExecuteNextMessage(xMessage); } foreach (var match in matches) { var action = Activator.CreateInstance(match.Action) as ToolboxAction; if (action == null) { continue; } GetServices?.Invoke(action); action.Execute(xMessage); executed = true; ExecuteNextMessage(xMessage); } } if (!executed) { Log.Warn("A received message was not dispatched."); } return(executed); }