private static void InitUpdateAddress() { Properties.Settings setting = new SPing.Properties.Settings(); Regex header; _pattern2 = new Regex("^[0-9]{1,3}\\.[0-9]{1,3}$"); header = new Regex("([0-9]{1,3}\\.[0-9]{1,3}\\.)([0-9]{1,3}\\.[0-9]{1,3})"); _header2 = header.Match(setting.DefaultIpAddress).Groups[1].ToString(); _pattern1 = new Regex("^[0-9]{1,3}$");; header = new Regex("([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)([0-9]{1,3})"); _header1 = header.Match(setting.DefaultIpAddress).Groups[1].ToString(); }
static int Main(string[] args) { try { Parameter parameter = new Parameter(args); if (parameter.IsHelp == true) { Console.WriteLine("manコマンドでspingのヘルプを参照して下さい。"); return 1; } #region Timeoutの設定 SPing.Properties.Settings setting = new SPing.Properties.Settings(); if (setting.TimeOut != 0) _timeOut = setting.TimeOut; if (parameter.TimeOut != 0) _timeOut = parameter.TimeOut; if (parameter.EchoCount != 0) _echoCount = parameter.EchoCount; #endregion #region パラメータの最大スレッド数だけThreadをプールします。ただし、最大スレッド数は、256個 //デフォルトは、250、1000⇒32bitだから?少ない? if (parameter.MaxThreads != 0) ThreadPool.SetMaxThreads(parameter.MaxThreads, parameter.CompletionPortThreads); #endregion InitUpdateAddress(); parameter.ArgumentsExceptOptions.All(arg => { string key = arg.IndexOf(",") >= 0 ? arg.Substring(0, arg.IndexOf(",")) : arg; string hostName = arg.IndexOf(",") >= 0 ? arg.Substring(arg.IndexOf(",") + 1) : null; if (_pingResult.ContainsKey(key) == true) { return true; } else { key = UpdateAddress(key); PingResult pr = new PingResult(); pr.HostName = hostName; _pingResult.Add(key, pr); return true; } }); //pingの実行 _pingResult.All(dic => { ThreadPool.QueueUserWorkItem(new WaitCallback(_Ping), dic); return true; }); //結果の取得 if (parameter.IsErrorOnly == true) { //全てのチェックを終えてからエラーのみをフィルタする。 _pingResult.All(dic => { dic.Value.AutoResetEvent.WaitOne(); return true; }); //エラーの実を絞ってクエリ抽出 var pingResult = from ret in _pingResult where ret.Value.Exception != null || ret.Value.PingReply.Status != IPStatus.Success select ret; //表示 return _ShowResult(pingResult, parameter, false); } else { //結果はパラメータ順に表示する。 return _ShowResult(_pingResult, parameter, true); } } catch (Exception ex) { Console.WriteLine(ex.GetAllMessage()); return 1; } }
static int Main(string[] args) { try { Parameter parameter = new Parameter(args); if (parameter.IsHelp == true) { Console.WriteLine("manコマンドでspingのヘルプを参照して下さい。"); return(1); } #region Timeoutの設定 SPing.Properties.Settings setting = new SPing.Properties.Settings(); if (setting.TimeOut != 0) { _timeOut = setting.TimeOut; } if (parameter.TimeOut != 0) { _timeOut = parameter.TimeOut; } if (parameter.EchoCount != 0) { _echoCount = parameter.EchoCount; } #endregion #region パラメータの最大スレッド数だけThreadをプールします。ただし、最大スレッド数は、256個 //デフォルトは、250、1000⇒32bitだから?少ない? if (parameter.MaxThreads != 0) { ThreadPool.SetMaxThreads(parameter.MaxThreads, parameter.CompletionPortThreads); } #endregion InitUpdateAddress(); parameter.ArgumentsExceptOptions.All(arg => { string key = arg.IndexOf(",") >= 0 ? arg.Substring(0, arg.IndexOf(",")) : arg; string hostName = arg.IndexOf(",") >= 0 ? arg.Substring(arg.IndexOf(",") + 1) : null; if (_pingResult.ContainsKey(key) == true) { return(true); } else { key = UpdateAddress(key); PingResult pr = new PingResult { HostName = hostName }; _pingResult.Add(key, pr); return(true); } }); //pingの実行 _pingResult.All(dic => { ThreadPool.QueueUserWorkItem(new WaitCallback(_Ping), dic); return(true); }); //結果の取得 if (parameter.IsErrorOnly == true) { //全てのチェックを終えてからエラーのみをフィルタする。 _pingResult.All(dic => { dic.Value.AutoResetEvent.WaitOne(); return(true); }); //エラーの実を絞ってクエリ抽出 var pingResult = from ret in _pingResult where ret.Value.Exception != null || ret.Value.PingReply.Status != IPStatus.Success select ret; //表示 return(_ShowResult(pingResult, parameter, false)); } else { //結果はパラメータ順に表示する。 return(_ShowResult(_pingResult, parameter, true)); } } catch (Exception ex) { Console.WriteLine(ex.GetAllMessage()); return(1); } }