【问题标题】:C# server custom command line interfaceC#服务器自定义命令行界面
【发布时间】:2012-09-17 09:23:00
【问题描述】:

所以,我为 C# 的特定需求编写了一个服务器,现在我正在寻找管理该服务器的舒适方法。起初它是一个简单的基于 Web 的管理器,但这不是可扩展的解决方案,因为我的服务器架构每天都在变化。所以现在我明白了,最舒适和可扩展的解决方案是命令行界面。 但是,我根本不想使用原始的 IF\CASE (Command line interface inside your C# application) 结构。所以我的问题是:

例如我有一个服务器类:

public class Server
    {
        private int succes_interval;
        private int fail_interval;
        private int threshold;
        private int failed_requests;
        private int request_timeout;
        private int update_timer;
        private string updt_path;
        private DateTime start_time;
        private bool snmp_enabled;
        private int snmp_port;
        [XmlIgnore()]
        public string Version { get { return Assembly.GetEntryAssembly().GetName().Version.ToString(); } }
        [XmlIgnore()]
        public string Path { get { return Assembly.GetEntryAssembly().Location; } }
        [XmlIgnore()]
        public string ServerName { get { return System.Environment.MachineName.ToLower(); } }
        [XmlIgnore()]
        public int SuccessInterval { get { return succes_interval; } }
        public void SetSuccessInterval(int interval) { succes_interval = interval; }
        [XmlIgnore()]
        public int FailInterval { get { return fail_interval; } }
        public void SetFailInterval(int interval) { fail_interval = interval; }
        [XmlIgnore()]
        public int FailThreshold { get { return threshold; } }
        public void SetFailThreshold(int thresh) { threshold = thresh; }
        [XmlIgnore()]
        public int FailedRequests { get { return failed_requests; } }
        public void SetFailedRequests(int value) { threshold = value; }
        [XmlElement("RequestTimeout")]
        public int RequestTimeout { get { return request_timeout; } set { request_timeout = value; } }
        [XmlIgnore()]
        public int UpdateCheckInterval { get { return update_timer; } set { update_timer = value; } }
        [XmlElement("UpdatePath")]
        public string UpdatePath { get { return updt_path; } set { updt_path = value; } }
        [XmlElement("SNMPEnabled")]
        public bool SNMPEnabled { get { return snmp_enabled; } set { snmp_enabled = value; } }
        [XmlElement("SNMPPort")]
        public int SNMPPort { get { return snmp_port; } set { snmp_port = value; } }
}

我想通过命令“server threshold 50”在运行时设置这个变量。不管如何在 (Telnet\ssh\http\whateverprotocol) 中传递命令。或者例如命令“show server”列出该对象中的所有变量。

我知道它必须是一种树方法,但是有人可以给我一个实现它的方向吗?

【问题讨论】:

    标签: c# command-line command-line-interface


    【解决方案1】:

    您可以使用字符串命令字典和函数委托。 Dictionary<string, Func<string, object>> 。当您收到一些输入时,只需检查字典中的每个键,看看他们是否输入了字符串 .StartsWith() 该键,如果是,则将其余部分发送给函数,然后您可以用返回的值进行回复。

    如何添加/实现接口的示例:

    myDict = new Dictionary<string, Func<string, object>>();
    
    //add each handler below
    myDict.Add("server threshold", (str) =>
    {
        int threshold;
        if (int.TryParse(str, out threshold))
            SetFailThreshold(threshold);
        else
            return false;
        return true;
    });
    

    【讨论】:

      【解决方案2】:

      您可以使用 Iron python 作为 CLI,并使用 python 脚本来处理您可能需要的任何内容

      【讨论】:

        猜你喜欢
        • 2013-03-13
        • 2016-06-14
        • 1970-01-01
        • 2016-12-10
        • 1970-01-01
        • 1970-01-01
        • 2017-08-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多