示例#1
0
        /// <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);
        }