public CommandExecutor(ICommandExpressionParser parser = null)
		{
			_root = new CommandTreeNode();
			_parser = parser ?? CommandExpressionParser.Instance;
			_output = NullCommandOutlet.Instance;
			_error = CommandErrorWriter.Instance;
		}
        private void DisplayTcpServerInfo(TcpServer server, ICommandOutlet output, IChannel activeChannel)
        {
            this.DisplayListenerInfo(server, output);

            if (!server.IsListening)
            {
                return;
            }

            output.WriteLine();
            output.Write(CommandOutletColor.DarkMagenta, "ID\t");
            output.Write(CommandOutletColor.DarkMagenta, ResourceUtility.GetString("${LastReceivedTime}") + "\t\t");
            output.Write(CommandOutletColor.DarkMagenta, ResourceUtility.GetString("${LastSendTime}") + "\t\t");
            output.Write(CommandOutletColor.DarkMagenta, ResourceUtility.GetString("${LocalEndPoint}") + "\t\t");
            output.WriteLine(CommandOutletColor.DarkMagenta, ResourceUtility.GetString("${RemoteEndPoint}") + "\t");

            var channels = server.ChannelManager.GetActivedChannels();

            foreach (TcpServerChannel channel in channels)
            {
                if (channel == activeChannel)
                {
                    output.Write(CommandOutletColor.Magenta, "* ");
                }

                output.WriteLine(
                    "{0}\t{1:yyyy-MM-dd HH:mm:ss}\t{2:yyyy-MM-dd HH:mm:ss}\t{3}\t\t{4}",
                    channel.ChannelId,
                    channel.LastReceivedTime,
                    channel.LastSendTime,
                    channel.LocalEndPoint,
                    channel.RemoteEndPoint);
            }

            output.WriteLine();
        }
Esempio n. 3
0
        public static void PrintHelpInfo(ICommandOutlet output, ICommand command)
        {
            if (output == null || command == null)
            {
                return;
            }

            DisplayNameAttribute displayName = (DisplayNameAttribute)TypeDescriptor.GetAttributes(command)[typeof(DisplayNameAttribute)];
            DescriptionAttribute description = (DescriptionAttribute)TypeDescriptor.GetAttributes(command)[typeof(DescriptionAttribute)];

            output.Write(CommandOutletColor.Blue, command.Name + " ");

            if (!command.Enabled)
            {
                output.Write(CommandOutletColor.DarkGray, "({0})", ResourceUtility.GetString("${Text.Disabled}"));
            }

            if (displayName == null || string.IsNullOrWhiteSpace(displayName.DisplayName))
            {
                output.Write(ResourceUtility.GetString("${Text.Command}"));
            }
            else
            {
                output.Write(ResourceUtility.GetString(displayName.DisplayName, command.GetType().Assembly));
            }

            CommandOptionAttribute[] optionAttributes = (CommandOptionAttribute[])command.GetType().GetCustomAttributes(typeof(CommandOptionAttribute), true);

            if (optionAttributes != null && optionAttributes.Length > 0)
            {
                output.WriteLine("," + ResourceUtility.GetString("${Text.CommandUsages}"), optionAttributes.Length);
                output.WriteLine();

                string commandName = command.Name;

                output.Write(CommandOutletColor.Blue, commandName + " ");

                foreach (var optionAttribute in optionAttributes)
                {
                    if (optionAttribute.Required)
                    {
                        output.Write("<-");
                        output.Write(CommandOutletColor.DarkYellow, optionAttribute.Name);
                        output.Write("> ");
                    }
                    else
                    {
                        output.Write("[-");
                        output.Write(CommandOutletColor.DarkYellow, optionAttribute.Name);
                        output.Write("] ");
                    }
                }

                output.WriteLine();

                int maxOptionLength = GetMaxOptionLength(optionAttributes) + 2;

                foreach (var optionAttribute in optionAttributes)
                {
                    int optionPadding = maxOptionLength - optionAttribute.Name.Length;

                    output.Write("\t-");
                    output.Write(CommandOutletColor.DarkYellow, optionAttribute.Name);

                    if (optionAttribute.Type != null)
                    {
                        output.Write(":");
                        output.Write(CommandOutletColor.Magenta, GetSimpleTypeName(optionAttribute.Type));
                        optionPadding -= (GetSimpleTypeName(optionAttribute.Type).Length + 1);
                    }

                    output.Write(" (".PadLeft(optionPadding));

                    if (optionAttribute.Required)
                    {
                        output.Write(CommandOutletColor.DarkRed, ResourceUtility.GetString("${Text.Required}"));
                    }
                    else
                    {
                        output.Write(CommandOutletColor.DarkGreen, ResourceUtility.GetString("${Text.Optional}"));
                    }

                    output.Write(") ");

                    if (!string.IsNullOrWhiteSpace(optionAttribute.Description))
                    {
                        output.Write(ResourceUtility.GetString(optionAttribute.Description, command.GetType().Assembly));
                    }

                    if (optionAttribute.Type != null && optionAttribute.Type.IsEnum)
                    {
                        var entries       = Zongsoft.Common.EnumUtility.GetEnumEntries(optionAttribute.Type, false);
                        var maxEnumLength = entries.Max(entry => string.IsNullOrWhiteSpace(entry.Alias) ? entry.Name.Length : entry.Name.Length + entry.Alias.Length + 2);

                        foreach (var entry in entries)
                        {
                            var enumPadding = maxEnumLength - entry.Name.Length;

                            output.WriteLine();
                            output.Write("\t".PadRight(optionAttribute.Name.Length + 3));
                            output.Write(CommandOutletColor.DarkMagenta, entry.Name.ToLowerInvariant());

                            if (!string.IsNullOrWhiteSpace(entry.Alias))
                            {
                                output.Write(CommandOutletColor.DarkGray, "(");
                                output.Write(CommandOutletColor.DarkMagenta, entry.Alias);
                                output.Write(CommandOutletColor.DarkGray, ")");

                                enumPadding -= entry.Alias.Length + 2;
                            }

                            if (!string.IsNullOrWhiteSpace(entry.Description))
                            {
                                output.Write(new string(' ', enumPadding + 1) + entry.Description);
                            }
                        }
                    }

                    output.WriteLine();
                }
            }

            if (description != null && !string.IsNullOrWhiteSpace(description.Description))
            {
                output.WriteLine();
                output.WriteLine(CommandOutletColor.DarkYellow, ResourceUtility.GetString(description.Description, command.GetType().Assembly));
            }

            output.WriteLine();
        }
 private void OnSucceed(ICommandOutlet output, IWorker worker)
 {
     output.WriteLine(Utility.GetWorkerActionContent(worker, string.Format(Properties.Resources.Text_Command_ExecutionSucceed_Message, Properties.Resources.Text_WorkerStopCommand_Name), CommandOutletColor.DarkGreen));
 }
Esempio n. 5
0
        public static void PrintPluginNode(ICommandOutlet output, PluginTreeNode node, ObtainMode obtainMode, int maxDepth)
        {
            if (node == null)
            {
                return;
            }

            output.Write(CommandOutletColor.DarkYellow, "[{0}]", node.NodeType);
            output.WriteLine(node.FullPath);
            output.Write(CommandOutletColor.DarkYellow, "Plugin File: ");

            if (node.Plugin == null)
            {
                output.WriteLine(CommandOutletColor.Red, "N/A");
            }
            else
            {
                output.WriteLine(node.Plugin.FilePath);
            }

            output.Write(CommandOutletColor.DarkYellow, "Node Properties: ");
            output.WriteLine(node.Properties.Count);

            if (node.Properties.Count > 0)
            {
                output.WriteLine(CommandOutletColor.Gray, "{");

                foreach (PluginExtendedProperty property in node.Properties)
                {
                    output.Write(CommandOutletColor.DarkYellow, "\t" + property.Name);
                    output.Write(" = ");
                    output.Write(property.RawValue);

                    if (property.Value != null)
                    {
                        output.Write(CommandOutletColor.DarkGray, " [");
                        output.Write(CommandOutletColor.Blue, property.Value.GetType().FullName);
                        output.Write(CommandOutletColor.DarkGray, "]");
                    }

                    output.WriteLine();
                }

                output.WriteLine(CommandOutletColor.Gray, "}");
            }

            output.WriteLine(CommandOutletColor.DarkYellow, "Children: {0}", node.Children.Count);
            if (node.Children.Count > 0)
            {
                output.WriteLine();

                foreach (var child in node.Children)
                {
                    output.WriteLine(child);
                }
            }

            object value = node.UnwrapValue(obtainMode, null);

            if (value != null)
            {
                output.WriteLine();
                output.WriteLine(Zongsoft.Runtime.Serialization.Serializer.Text.Serialize(value));
            }
        }
 private void DisplayFtpServerInfo(FtpServer server, ICommandOutlet output)
 {
     this.DisplayListenerInfo(server, output);
 }
Esempio n. 7
0
        public static void PrintPluginNode(ICommandOutlet output, PluginTreeNode node, ObtainMode obtainMode, int maxDepth)
        {
            if (node == null)
            {
                return;
            }

            output.Write(CommandOutletColor.DarkYellow, "[{0}]", node.NodeType);
            output.WriteLine(node.FullPath);
            output.Write(CommandOutletColor.DarkYellow, "Plugin File: ");

            if (node.Plugin == null)
            {
                output.WriteLine(CommandOutletColor.Red, "N/A");
            }
            else
            {
                output.WriteLine(node.Plugin.FilePath);
            }

            output.Write(CommandOutletColor.DarkYellow, "Node Properties: ");
            output.WriteLine(node.Properties.Count);

            if (node.Properties.Count > 0)
            {
                output.WriteLine(CommandOutletColor.Gray, "{");

                foreach (PluginExtendedProperty property in node.Properties)
                {
                    output.Write(CommandOutletColor.DarkYellow, "\t" + property.Name);
                    output.Write(" = ");
                    output.Write(property.RawValue);

                    if (property.Value != null)
                    {
                        output.Write(CommandOutletColor.DarkGray, " [");
                        output.Write(CommandOutletColor.Blue, property.Value.GetType().FullName);
                        output.Write(CommandOutletColor.DarkGray, "]");
                    }

                    output.WriteLine();
                }

                output.WriteLine(CommandOutletColor.Gray, "}");
            }

            output.WriteLine(CommandOutletColor.DarkYellow, "Children: {0}", node.Children.Count);
            if (node.Children.Count > 0)
            {
                output.WriteLine();

                foreach (var child in node.Children)
                {
                    output.WriteLine(child);
                }
            }

            object value = node.UnwrapValue(obtainMode);

            if (value != null)
            {
                var json = JsonSerializer.Serialize(value, new JsonSerializerOptions()
                {
                    MaxDepth         = maxDepth,
                    WriteIndented    = true,
                    ReferenceHandler = ReferenceHandler.Preserve,
                });

                output.WriteLine();
                output.WriteLine(json);
            }
        }