707 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			707 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| //190806    chi getWorkWeek 추가
 | |
| //190805    chi MakeCSVString 추가
 | |
| //180903    chi makefilepath/ ftppath 추가
 | |
| //180807    chi rad2deg, deg2rad 추가
 | |
| //180625    chi  ToCharHexString,ToStringFromHexString 추가
 | |
| //180624    chi isLocalApplication 추가
 | |
| //180618    chi GetCSVBuffer 추가
 | |
| //180614    chi map 명령어 추가
 | |
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Diagnostics;
 | |
| using System.Drawing;
 | |
| using System.IO;
 | |
| using System.Linq;
 | |
| using System.Net;
 | |
| using System.Text;
 | |
| using System.Windows.Forms;
 | |
| using System.Data.SqlClient;
 | |
| 
 | |
| namespace Project
 | |
| {
 | |
|     public static class ServerUtil
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// 내 그룹내에서 센드메일 사용자가 할당되어있는가?
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public static Boolean SendmailSet()
 | |
|         {
 | |
|             try
 | |
|             {
 | |
| 
 | |
|                 if (FCOMMON.info.Login.no == null) return false;
 | |
|                 if (FCOMMON.info.Login.no.ToLower() == "dev") return false;
 | |
| 
 | |
|                 var ts = DateTime.Now - sendmailchecktime;
 | |
|                 if (ts.TotalMinutes < 1) return ServerUtil.IsMailserver;
 | |
| 
 | |
|                 sendmailchecktime = DateTime.Now;
 | |
|                 bool retval = false;
 | |
|                 var sql = "select wdate from EETGW_ServerSetting" +
 | |
|                 " where active = 1" +
 | |
|                 " order by wdate desc";
 | |
|                 var cn = new SqlConnection(Properties.Settings.Default.gwcs);
 | |
|                 cn.Open();
 | |
|                 var trans = cn.BeginTransaction();
 | |
|                 
 | |
|                 var cmd = new SqlCommand(sql, cn);
 | |
|                 cmd.Transaction = trans;
 | |
|                 cmd.Parameters.Add("gcode", System.Data.SqlDbType.VarChar).Value = FCOMMON.info.Login.gcode;
 | |
|                 var value = cmd.ExecuteScalar();
 | |
|                 if (value == null || value.ToString().isEmpty())
 | |
|                 {
 | |
|                     //대상없음
 | |
|                     cmd.CommandText = "insert into EETGW_ServerSetting(gcode,active,wuid,wdate) values(@gcode,1,@wuid,GETDATE())";
 | |
|                     cmd.Parameters.Clear();
 | |
|                     cmd.Parameters.Add("gcode", System.Data.SqlDbType.VarChar).Value = FCOMMON.info.Login.gcode;
 | |
|                     cmd.Parameters.Add("wuid", System.Data.SqlDbType.VarChar).Value = FCOMMON.info.Login.no;
 | |
|                     cmd.ExecuteNonQuery();
 | |
|                     retval = true;
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     //있다면 
 | |
|                     var dt = (DateTime)value;
 | |
|                     if (dt >= DateTime.Now.AddMinutes(-10))
 | |
|                     {
 | |
|                         //이 사용자가 나인지 체크한다
 | |
|                         cmd.CommandText = sql = "select wuid from EETGW_ServerSetting" +
 | |
|                                         " where  active = 1" +
 | |
|                                         " order by wdate desc";
 | |
|                         var uid = string.Empty;// cmd.ExecuteScalar();
 | |
|                         var dar2 = cmd.ExecuteReader();
 | |
|                         while(dar2.Read())
 | |
|                         {
 | |
|                             var v = dar2[0];
 | |
|                             var id = string.Empty;
 | |
|                             if (v != null) id = v.ToString();
 | |
|                             if (uid.isEmpty()) uid = id; //값이 비어있다면 추가한다
 | |
|                             
 | |
|                             //현재 루프되는 id값이 로그인id와 같다면 그것을 우선 처리한다
 | |
|                             if (id.Equals(FCOMMON.info.Login.no))
 | |
|                             {
 | |
|                                 uid = id;
 | |
|                                 break;
 | |
|                             }
 | |
|                         }
 | |
|                         dar2.Close();
 | |
| 
 | |
|                         if(uid.ToString().Equals(FCOMMON.info.Login.no))
 | |
|                         {
 | |
|                             //아직 10분전이므로 정상이다
 | |
|                             ts = DateTime.Now - dt;
 | |
|                             if (ts.TotalMinutes > 3)
 | |
|                             {
 | |
|                                 //3분이 넘었다면 갱신해준다
 | |
|                                 cmd.Parameters.Clear();
 | |
|                                 cmd.Parameters.Add("gcode", System.Data.SqlDbType.VarChar).Value = FCOMMON.info.Login.gcode;
 | |
|                                 cmd.Parameters.Add("wuid", System.Data.SqlDbType.VarChar).Value = FCOMMON.info.Login.no;
 | |
| 
 | |
|                                 //기존데이터를 비활성화
 | |
|                                 cmd.CommandText = "update EETGW_ServerSetting set active=0 where active=1 and wuid <> @wuid ";
 | |
|                                 cmd.ExecuteNonQuery();
 | |
| 
 | |
|                                 //내 데이터를 활성화
 | |
|                                 cmd.CommandText = "update EETGW_ServerSetting  set wdate =  getdate() where wuid = @wuid and active=1";
 | |
|                                 var cnt = cmd.ExecuteNonQuery();
 | |
|                             }
 | |
|                             retval = true;
 | |
|                         }
 | |
|                         else
 | |
|                         {
 | |
|                             //다른사용자의 데이터는 내가 처리하지 않는다
 | |
|                         }
 | |
|                     }
 | |
|                     else
 | |
|                     {
 | |
|                         //10분넘었으니 다시 생성한다
 | |
|                         cmd.CommandText = $"update EETGW_ServerSetting set active=0 where active=1 and wuid <> '{FCOMMON.info.Login.no}'";
 | |
|                         cmd.ExecuteNonQuery();
 | |
|                         cmd.CommandText = "insert into EETGW_ServerSetting(gcode,active,wuid,wdate) values(@gcode,1,@wuid,GETDATE())";
 | |
|                         cmd.Parameters.Clear();
 | |
|                         cmd.Parameters.Add("gcode", System.Data.SqlDbType.VarChar).Value = FCOMMON.info.Login.gcode;
 | |
|                         cmd.Parameters.Add("wuid", System.Data.SqlDbType.VarChar).Value = FCOMMON.info.Login.no;
 | |
|                         cmd.ExecuteNonQuery();
 | |
|                         retval = true;
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 trans.Commit();
 | |
|                 cmd.Dispose();
 | |
|                 cn.Close();
 | |
|                 cn.Dispose();
 | |
|                 return retval;
 | |
|             }
 | |
|             catch
 | |
|             {
 | |
|                 return false;
 | |
|             }
 | |
| 
 | |
|         }
 | |
|         static DateTime sendmailchecktime = DateTime.Now;
 | |
|         public static Boolean IsMailserver = false;
 | |
|     }
 | |
| 
 | |
|     public static class Util
 | |
|     {
 | |
| 
 | |
|         public static int GetWorkWeek()
 | |
|         {
 | |
|             return GetWorkWeek(DateTime.Now);
 | |
|         }
 | |
|         public static int GetWorkWeek(DateTime date)
 | |
|         {
 | |
|             var dfi = System.Globalization.DateTimeFormatInfo.CurrentInfo;
 | |
|             var date1 = date;
 | |
|             var cal = dfi.Calendar;
 | |
|             var week = cal.GetWeekOfYear(date1, dfi.CalendarWeekRule, dfi.FirstDayOfWeek);
 | |
|             return week;
 | |
|         }
 | |
| 
 | |
|         public static string MakeFilePath(params string[] param)
 | |
|         {
 | |
|             System.Text.StringBuilder sb = new System.Text.StringBuilder();
 | |
|             foreach (var item in param)
 | |
|             {
 | |
|                 if (sb.Length > 0 && sb.ToString().EndsWith("\\") == false) sb.Append("\\");
 | |
|                 sb.Append(item.Replace("/", "\\"));
 | |
|             }
 | |
|             var retval = sb.ToString().Replace("/", "\\").Replace("\\\\", "\\");
 | |
|             return retval.ToString();
 | |
|         }
 | |
| 
 | |
|         public static string MakeFTPPath(params string[] param)
 | |
|         {
 | |
|             System.Text.StringBuilder sb = new System.Text.StringBuilder();
 | |
|             foreach (var item in param)
 | |
|             {
 | |
|                 if (sb.Length > 0 && sb.ToString().EndsWith("/") == false) sb.Append("/");
 | |
|                 sb.Append(item.Replace("\\", "/"));
 | |
|             }
 | |
|             var retval = sb.ToString().Replace("//", "/");
 | |
|             return retval.ToString();
 | |
|         }
 | |
| 
 | |
| 
 | |
|         public static double rad2Deg(double source)
 | |
|         {
 | |
|             return (source * 1.0) * 180.0 / Math.PI;
 | |
|         }
 | |
|         public static double deg2rad(double source)
 | |
|         {
 | |
|             return (source * 1.0) * Math.PI / 180.0;
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// 문자를 HEX 문자로 변경합니다. 각 HEX문자 사이에는 공백이 없습니다.
 | |
|         /// </summary>
 | |
|         /// <param name="input"></param>
 | |
|         /// <returns></returns>
 | |
|         public static string ToCharHexString(string input)
 | |
|         {
 | |
|             System.Text.StringBuilder sb = new System.Text.StringBuilder();
 | |
|             foreach (char b in input.ToCharArray())
 | |
|                 sb.Append(((byte)b).ToString("X2"));
 | |
|             return sb.ToString();
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 16진수형태의 문자를 일반 문자열로 반환한니다.
 | |
|         /// </summary>
 | |
|         /// <param name="input"></param>
 | |
|         /// <returns></returns>
 | |
|         public static string ToStringFromHexString(string input)
 | |
|         {
 | |
|             int wordCount = (int)(input.Length / 2);
 | |
|             int n = (int)(input.Length % 2);
 | |
|             if (n != 0) return "X:Length Error";
 | |
| 
 | |
|             System.Text.StringBuilder sb = new StringBuilder();
 | |
|             for (int i = 0; i < wordCount; i++)
 | |
|             {
 | |
|                 string hexstr = input.Substring(i * 2, 2);
 | |
|                 try
 | |
|                 {
 | |
|                     byte ascvalue = Convert.ToByte(hexstr, 16);
 | |
|                     sb.Append((char)ascvalue);
 | |
|                 }
 | |
|                 catch (Exception ex)
 | |
|                 {
 | |
|                     return ex.Message;
 | |
|                 }
 | |
|             }
 | |
|             //두자리씩 끊어서 16진수로 변환하고 ASC값을 누적한다.
 | |
|             return sb.ToString();
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 현재 프로그램이 개인용위치에서 실행중인가(클릭원스의경우)
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public static Boolean isLocalApplication()
 | |
|         {
 | |
|             var localpath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
 | |
|             return Util.CurrentPath.StartsWith(localpath);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 문자열 배열을 CSV라인으로 변환
 | |
|         /// </summary>
 | |
|         /// <param name="param"></param>
 | |
|         /// <returns></returns>
 | |
|         public static string MakeCSVString(params string[] param)
 | |
|         {
 | |
|             System.Text.StringBuilder sb = new StringBuilder();
 | |
|             foreach (var data in param)
 | |
|             {
 | |
|                 if (sb.Length > 0) sb.Append(',');
 | |
|                 sb.Append(ToCSVString(data));
 | |
|             }
 | |
|             return sb.ToString();
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// CSV데이터포맷으로 버퍼를 반환합니다. 문자열내에 , 가 있는 데이터는 쌍따옴표로 구분합니다.
 | |
|         /// </summary>
 | |
|         /// <param name="line"></param>
 | |
|         /// <returns></returns>
 | |
|         public static string[] GetCSVBuffer(string line)
 | |
|         {
 | |
|             List<string> buffer = new List<string>();
 | |
|             if (line.Trim() == "") return buffer.ToArray();
 | |
| 
 | |
|             System.Text.StringBuilder sb = new StringBuilder();
 | |
|             bool findsig = false;
 | |
|             var charbuf = line.ToCharArray();
 | |
|             char pchar = '\0';
 | |
|             bool findCommaString = false;
 | |
|             foreach (var c in charbuf)
 | |
|             {
 | |
|                 if (c == ',')
 | |
|                 {
 | |
|                     if (findsig) sb.Append(c);  //대상에 콤마가 잇으므로 게소 누적한다.
 | |
|                     else if (findCommaString == false)
 | |
|                     {
 | |
|                         //데이터를 분리해줘야함
 | |
|                         buffer.Add(sb.ToString());
 | |
|                         sb.Clear();
 | |
|                         findsig = false;
 | |
|                     }
 | |
|                     else findCommaString = false;
 | |
|                 }
 | |
|                 else if (c == '\"')
 | |
|                 {
 | |
|                     if (pchar == ',')
 | |
|                     {
 | |
|                         if (!findsig) findsig = true;
 | |
|                         else findsig = false; //완료된 경우이다.
 | |
|                     }
 | |
|                     else if (!findsig)
 | |
|                     {
 | |
|                         sb.Append(c);
 | |
|                     }
 | |
|                     else
 | |
|                     {
 | |
|                         buffer.Add(sb.ToString());
 | |
|                         sb.Clear();
 | |
|                         findsig = false;
 | |
|                         findCommaString = true;
 | |
|                     }
 | |
|                     //if (!findsig) findsig = true;
 | |
|                     //else sb.Append(c);
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     sb.Append(c);
 | |
|                 }
 | |
|                 pchar = c;
 | |
|             }
 | |
|             //if(sb.Length > 0)
 | |
|             //{
 | |
|             buffer.Add(sb.ToString());
 | |
|             //}
 | |
|             return buffer.ToArray();
 | |
|         }
 | |
| 
 | |
|         public static double map(double source, int in_min, int in_max, int out_min, int out_max)
 | |
|         {
 | |
|             return (source - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
 | |
|         }
 | |
| 
 | |
| 
 | |
|         #region "MessageBox"
 | |
|         public static void MsgI(string m)
 | |
|         {
 | |
|             MessageBox.Show(m, "확인", MessageBoxButtons.OK, MessageBoxIcon.Information);
 | |
|         }
 | |
|         public static void MsgE(string m)
 | |
|         {
 | |
|             MessageBox.Show(m, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
 | |
|         }
 | |
|         public static DialogResult MsgQ(string m)
 | |
|         {
 | |
|             DialogResult dlg = MessageBox.Show(m, "확인", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
 | |
|             return dlg;
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         public static object getTagFromContextMenu(object sender)
 | |
|         {
 | |
|             ToolStripMenuItem menuItem = sender as ToolStripMenuItem;
 | |
|             if (menuItem != null)
 | |
|             {
 | |
|                 ContextMenuStrip calendarMenu = menuItem.Owner as ContextMenuStrip;
 | |
| 
 | |
|                 if (calendarMenu != null)
 | |
|                 {
 | |
|                     var controlSelected = calendarMenu.SourceControl as Control;
 | |
|                     return controlSelected.Tag;
 | |
|                 }
 | |
|             }
 | |
|             return string.Empty;
 | |
|         }
 | |
| 
 | |
|         public static void SaveBugReport(string content, string subdirName = "BugReport")
 | |
|         {
 | |
|             try
 | |
|             {
 | |
|                 var path = CurrentPath + subdirName;
 | |
|                 if (!System.IO.Directory.Exists(path)) System.IO.Directory.CreateDirectory(path);
 | |
|                 var file = path + "\\" + DateTime.Now.ToString("yyyyMMdd_HHmmss_fff") + ".txt";
 | |
|                 System.IO.File.WriteAllText(file, content, System.Text.Encoding.UTF8);
 | |
|             }
 | |
|             catch
 | |
|             {
 | |
|                 //nothing
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 현재실행중인폴더를 반환합니다.
 | |
|         /// </summary>
 | |
|         public static string CurrentPath
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return AppDomain.CurrentDomain.BaseDirectory;
 | |
|             }
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// 콤마와 줄바꿈등을 제거합니다.
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public static string ToCSVString(string src)
 | |
|         {
 | |
|             if (src == null) return string.Empty;
 | |
|             string strdata = strdata = src.Replace("\r", "").Replace("\n", "");
 | |
|             if (strdata.IndexOf(',') != -1)
 | |
|             {
 | |
|                 strdata = "\"" + strdata + "\"";    //180618 콤마가들어가는 csv 처리
 | |
|             }
 | |
|             return strdata;
 | |
|         }
 | |
| 
 | |
|         public static Boolean RunProcess(string file, string arg = "")
 | |
|         {
 | |
|             var fi = new System.IO.FileInfo(file);
 | |
|             if (!fi.Exists)
 | |
|             {
 | |
|                 Pub.log.AddE("Run Error : " + file);
 | |
|                 return false;
 | |
|             }
 | |
|             System.Diagnostics.Process prc = new System.Diagnostics.Process();
 | |
|             System.Diagnostics.ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo(file);
 | |
|             si.Arguments = arg;
 | |
|             prc.StartInfo = si;
 | |
|             prc.Start();
 | |
|             return true;
 | |
|         }
 | |
| 
 | |
|         #region "convert"
 | |
|         public static string RectToStr(Rectangle rect)
 | |
|         {
 | |
|             return string.Format("{0};{1};{2};{3}", rect.X, rect.Y, rect.Width, rect.Height);
 | |
|         }
 | |
|         public static string RectToStr(RectangleF rect)
 | |
|         {
 | |
|             return string.Format("{0};{1};{2};{3}", rect.X, rect.Y, rect.Width, rect.Height);
 | |
|         }
 | |
|         public static string PointToStr(Point pt)
 | |
|         {
 | |
|             return string.Format("{0};{1}", pt.X, pt.Y);
 | |
|         }
 | |
|         public static string PointToStr(PointF pt)
 | |
|         {
 | |
|             return string.Format("{0};{1}", pt.X, pt.Y);
 | |
|         }
 | |
|         public static Rectangle StrToRect(string str)
 | |
|         {
 | |
|             if (str.isEmpty() || str.Split(';').Length != 4) str = "0;0;0;0";
 | |
|             var roibuf1 = str.Split(';');
 | |
|             return new System.Drawing.Rectangle(
 | |
|                 int.Parse(roibuf1[0]),
 | |
|                 int.Parse(roibuf1[1]),
 | |
|                 int.Parse(roibuf1[2]),
 | |
|                 int.Parse(roibuf1[3]));
 | |
|         }
 | |
|         public static RectangleF StrToRectF(string str)
 | |
|         {
 | |
|             if (str.isEmpty() || str.Split(';').Length != 4) str = "0;0;0;0";
 | |
|             var roibuf1 = str.Split(';');
 | |
|             return new System.Drawing.RectangleF(
 | |
|                 float.Parse(roibuf1[0]),
 | |
|                 float.Parse(roibuf1[1]),
 | |
|                 float.Parse(roibuf1[2]),
 | |
|                 float.Parse(roibuf1[3]));
 | |
|         }
 | |
|         public static Point StrToPoint(string str)
 | |
|         {
 | |
|             if (str.isEmpty() || str.Split(';').Length != 2) str = "0;0";
 | |
|             var roibuf1 = str.Split(';');
 | |
|             return new System.Drawing.Point(
 | |
|                 int.Parse(roibuf1[0]),
 | |
|                 int.Parse(roibuf1[1]));
 | |
|         }
 | |
|         public static PointF StrToPointF(string str)
 | |
|         {
 | |
|             if (str.isEmpty() || str.Split(';').Length != 2) str = "0;0";
 | |
|             var roibuf1 = str.Split(';');
 | |
|             return new System.Drawing.PointF(
 | |
|                 float.Parse(roibuf1[0]),
 | |
|                 float.Parse(roibuf1[1]));
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|         #region "NIC"
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 지정된 nic카드가 현재 목록에 존재하는지 확인한다.
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public static Boolean ExistNIC(string NICName)
 | |
|         {
 | |
|             if (string.IsNullOrEmpty(NICName)) return false;
 | |
|             foreach (string NetName in NICCardList())
 | |
|             {
 | |
|                 if (NetName.ToLower() == NICName.ToLower())
 | |
|                 {
 | |
|                     return true;
 | |
|                 }
 | |
|             }
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Ehternet Card 를 사용안함으로 설정합니다.(관리자권한필요)
 | |
|         /// </summary>
 | |
|         /// <param name="NicName"></param>
 | |
|         public static Boolean NICDisable(string NICName)
 | |
|         {
 | |
|             //해당 nic 가 현재 목록에 존재하는지 확인한다.
 | |
| 
 | |
|             string cmd = "interface set interface " + NICName + " disable";
 | |
|             Process prc = new Process();
 | |
|             ProcessStartInfo si = new ProcessStartInfo("netsh", cmd);
 | |
|             si.WindowStyle = ProcessWindowStyle.Hidden;
 | |
|             prc.StartInfo = si;
 | |
|             prc.Start();
 | |
| 
 | |
|             ////목록에서 사라질때까지 기다린다.
 | |
|             DateTime SD = DateTime.Now;
 | |
|             Boolean timeout = false;
 | |
|             while ((true))
 | |
|             {
 | |
| 
 | |
|                 bool FindNetwork = false;
 | |
|                 foreach (string NetName in NICCardList())
 | |
|                 {
 | |
|                     if (NetName == NICName.ToLower())
 | |
|                     {
 | |
|                         FindNetwork = true;
 | |
|                         break; // TODO: might not be correct. Was : Exit For
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 if (!FindNetwork)
 | |
|                     break; // TODO: might not be correct. Was : Exit While
 | |
| 
 | |
|                 System.Threading.Thread.Sleep(1000);
 | |
|                 TimeSpan ts = DateTime.Now - SD;
 | |
|                 if (ts.TotalSeconds > 10)
 | |
|                 {
 | |
|                     timeout = true;
 | |
|                     break; // TODO: might not be correct. Was : Exit While
 | |
|                 }
 | |
|             }
 | |
|             return !timeout;
 | |
|         }
 | |
| 
 | |
|         public static List<String> NICCardList()
 | |
|         {
 | |
|             List<String> Retval = new List<string>();
 | |
|             foreach (System.Net.NetworkInformation.NetworkInterface Net in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces())
 | |
|             {
 | |
|                 if (Net.NetworkInterfaceType == System.Net.NetworkInformation.NetworkInterfaceType.Ethernet)
 | |
|                 {
 | |
|                     Retval.Add(Net.Name.ToUpper());
 | |
|                 }
 | |
|             }
 | |
|             return Retval;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 이더넷카드를 사용함으로 설정합니다.
 | |
|         /// </summary>
 | |
|         /// <param name="NicName"></param>
 | |
|         public static Boolean NICEnable(string NICName)
 | |
|         {
 | |
|             string cmd = "interface set interface " + NICName + " enable";
 | |
|             System.Diagnostics.Process prc = new System.Diagnostics.Process();
 | |
|             System.Diagnostics.ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo("netsh", cmd);
 | |
|             si.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
 | |
|             prc.StartInfo = si;
 | |
|             prc.Start();
 | |
| 
 | |
| 
 | |
|             ////목록에생길떄까지 대기
 | |
|             DateTime SD = DateTime.Now;
 | |
|             while ((true))
 | |
|             {
 | |
| 
 | |
|                 bool FindNetwork = false;
 | |
|                 foreach (string NetName in NICCardList())
 | |
|                 {
 | |
|                     if (NetName.ToLower() == NICName.ToLower())
 | |
|                     {
 | |
|                         FindNetwork = true;
 | |
|                         break; // TODO: might not be correct. Was : Exit For
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 if (FindNetwork)
 | |
|                     break; // TODO: might not be correct. Was : Exit While
 | |
| 
 | |
|                 System.Threading.Thread.Sleep(1000);
 | |
|                 TimeSpan ts = DateTime.Now - SD;
 | |
|                 if (ts.TotalSeconds > 10)
 | |
|                 {
 | |
|                     return false;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             ////결이 완료될떄까지 기다린다.
 | |
|             SD = DateTime.Now;
 | |
|             while ((true))
 | |
|             {
 | |
| 
 | |
|                 bool FindNetwork = false;
 | |
|                 foreach (System.Net.NetworkInformation.NetworkInterface Net in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces())
 | |
|                 {
 | |
|                     if (Net.NetworkInterfaceType != System.Net.NetworkInformation.NetworkInterfaceType.GigabitEthernet &&
 | |
|                         Net.NetworkInterfaceType != System.Net.NetworkInformation.NetworkInterfaceType.Ethernet) continue;
 | |
|                     if (Net.Name.ToLower() == NICName.ToLower())
 | |
|                     {
 | |
|                         //string data = Net.GetIPProperties().GatewayAddresses[0].ToString();
 | |
| 
 | |
|                         if (Net.OperationalStatus == System.Net.NetworkInformation.OperationalStatus.Up)
 | |
|                         {
 | |
| 
 | |
|                             FindNetwork = true;
 | |
|                             break; // TODO: might not be correct. Was : Exit For
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|                 if (FindNetwork)
 | |
|                     return true;
 | |
| 
 | |
|                 System.Threading.Thread.Sleep(1000);
 | |
|                 TimeSpan ts = DateTime.Now - SD;
 | |
|                 if (ts.TotalSeconds > 10)
 | |
|                 {
 | |
|                     return false;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         public static void RunExplorer(string arg)
 | |
|         {
 | |
|             if (arg.StartsWith("http"))
 | |
|             {
 | |
|                 System.Diagnostics.Process.Start(arg);
 | |
| 
 | |
| 
 | |
|             }
 | |
|             else
 | |
|             {
 | |
| 
 | |
|                 System.Diagnostics.ProcessStartInfo si = new ProcessStartInfo("explorer");
 | |
|                 si.Arguments = arg;
 | |
|                 System.Diagnostics.Process.Start(si);
 | |
|             }
 | |
| 
 | |
|         }
 | |
| 
 | |
|         #region "watchdog"
 | |
|         public static void WatchDog_Run()
 | |
|         {
 | |
|             System.IO.FileInfo fi = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "WatchCat.exe");
 | |
|             if (!fi.Exists) return;
 | |
|             var Exist = CheckExistProcess("watchcat");
 | |
|             if (Exist) return;
 | |
|             RunProcess(fi.FullName);
 | |
|         }
 | |
| 
 | |
|         public static Boolean CheckExistProcess(string ProcessName)
 | |
|         {
 | |
|             foreach (var prc in System.Diagnostics.Process.GetProcesses())
 | |
|             {
 | |
|                 if (prc.ProcessName.StartsWith("svchost")) continue;
 | |
|                 if (prc.ProcessName.ToUpper() == ProcessName.ToUpper()) return true;
 | |
|             }
 | |
|             return false;
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|         #region "web function"
 | |
|         /// <summary>
 | |
|         /// URL로부터 문자열을 수신합니다.
 | |
|         /// </summary>
 | |
|         /// <param name="url"></param>
 | |
|         /// <param name="isError"></param>
 | |
|         /// <returns></returns>
 | |
|         public static string GetStrfromurl(string url, out Boolean isError)
 | |
|         {
 | |
|             isError = false;
 | |
|             string result = "";
 | |
|             try
 | |
|             {
 | |
|                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(url));
 | |
|                 request.Timeout = 60000;
 | |
|                 request.ReadWriteTimeout = 60000;
 | |
| 
 | |
|                 request.MaximumAutomaticRedirections = 4;
 | |
|                 request.MaximumResponseHeadersLength = 4;
 | |
|                 request.Credentials = CredentialCache.DefaultCredentials;
 | |
|                 var response = request.GetResponse() as HttpWebResponse;
 | |
|                 var txtReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
 | |
|                 result = txtReader.ReadToEnd();
 | |
|             }
 | |
|             catch (Exception ex)
 | |
|             {
 | |
|                 isError = true;
 | |
|                 result = ex.Message.ToString();
 | |
|             }
 | |
|             return result;
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|     }
 | |
| }
 | 
