[성현모] CPXV2 Init
This commit is contained in:
@ -0,0 +1,564 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.IO;
|
||||
using System.Security.Cryptography;
|
||||
using System.Data;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Net.Sockets;
|
||||
using System.Globalization;
|
||||
using System.Threading;
|
||||
using System.Diagnostics;
|
||||
using System.Net;
|
||||
|
||||
using SystemX.Net.BaseProtocol;
|
||||
|
||||
namespace SystemX.Net.Middleware.Commons
|
||||
{
|
||||
|
||||
public static class COMMON
|
||||
{
|
||||
[DllImport("winmm.dll")]
|
||||
public static extern uint timeGetTime();
|
||||
|
||||
public const string Png = "PNG Portable Network Graphics (*.png)|" + "*.png";
|
||||
public const string Jpg = "JPEG File Interchange Format (*.jpg *.jpeg *jfif)|" + "*.jpg;*.jpeg;*.jfif";
|
||||
public const string Bmp = "BMP Windows Bitmap (*.bmp)|" + "*.bmp";
|
||||
public const string Tif = "TIF Tagged Imaged File Format (*.tif *.tiff)|" + "*.tif;*.tiff";
|
||||
public const string Gif = "GIF Graphics Interchange Format (*.gif)|" + "*.gif";
|
||||
public const string AllImages = "Image file|" + "*.png; *.jpg; *.jpeg; *.jfif; *.bmp;*.tif; *.tiff; *.gif";
|
||||
public const string AllFiles = "All files (*.*)" + "|*.*";
|
||||
|
||||
public static string[] mediaExtensions = {
|
||||
".PNG", ".JPG", ".JPEG", ".BMP", ".GIF", //etc
|
||||
".WAV", ".MID", ".MIDI", ".WMA", ".MP3", ".OGG", ".RMA", //etc
|
||||
".AVI", ".MP4", ".DIVX", ".WMV", //etc
|
||||
};
|
||||
|
||||
public static DataTable ConvertCSVtoDataTable(string strFilePath, string strSetHeader)
|
||||
{
|
||||
DataTable dt = null;
|
||||
try
|
||||
{
|
||||
using (StreamReader sr = new StreamReader(strFilePath))
|
||||
{
|
||||
string[] headers = null;
|
||||
|
||||
if(strSetHeader.Length > 0)
|
||||
headers = strSetHeader.Split(',');
|
||||
else
|
||||
headers = sr.ReadLine().Split(',');
|
||||
|
||||
dt = new DataTable();
|
||||
foreach (string header in headers)
|
||||
{
|
||||
dt.Columns.Add(header);
|
||||
}
|
||||
while (!sr.EndOfStream)
|
||||
{
|
||||
string strReadData = sr.ReadLine().Trim();
|
||||
if (strReadData.Length <= 0)
|
||||
break;
|
||||
|
||||
string[] rows = Regex.Split(strReadData, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
|
||||
DataRow dr = dt.NewRow();
|
||||
for (int i = 0; i < headers.Length; i++)
|
||||
{
|
||||
dr[i] = rows[i];
|
||||
}
|
||||
dt.Rows.Add(dr);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
dt = null;
|
||||
}
|
||||
|
||||
return dt;
|
||||
}
|
||||
|
||||
public static T ConvertTextToTryValue<T>(string strText, object objFailValue)
|
||||
{
|
||||
object obj;
|
||||
obj = typeof(T);
|
||||
|
||||
int iGetValue = 0;
|
||||
uint uiGetValue = 0;
|
||||
double dGetValue = 0;
|
||||
|
||||
if (obj.ToString().IndexOf("Int") >= 0)
|
||||
{
|
||||
if (!int.TryParse(strText, out iGetValue))
|
||||
obj = objFailValue;
|
||||
else
|
||||
obj = iGetValue;
|
||||
}
|
||||
if (obj.ToString().IndexOf("UInt") >= 0)
|
||||
{
|
||||
if (!uint.TryParse(strText, out uiGetValue))
|
||||
obj = objFailValue;
|
||||
else
|
||||
obj = uiGetValue;
|
||||
}
|
||||
else if (obj.ToString().IndexOf("Double") >= 0)
|
||||
{
|
||||
if (!double.TryParse(strText, out dGetValue))
|
||||
obj = objFailValue;
|
||||
else
|
||||
obj = dGetValue;
|
||||
}
|
||||
|
||||
return (T)Convert.ChangeType(obj, typeof(T));
|
||||
}
|
||||
|
||||
public static T FindByName<T>(this object targetClass, string name) where T : class
|
||||
{
|
||||
System.Reflection.FieldInfo fi = targetClass.GetType().GetField(name, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
|
||||
|
||||
return fi.GetValue(targetClass) as T;
|
||||
}
|
||||
public static T FindByName<T>(this string name, object targetClass) where T : class
|
||||
{
|
||||
System.Reflection.FieldInfo fi = targetClass.GetType().GetField(name, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
|
||||
|
||||
return fi.GetValue(targetClass) as T;
|
||||
}
|
||||
|
||||
[DllImport("KERNEL32.DLL", EntryPoint = "RtlZeroMemory")]
|
||||
public static extern bool ZeroMemory(IntPtr Destination, int Length);
|
||||
|
||||
public static string GenerateKey()
|
||||
{
|
||||
// Create an instance of Symetric Algorithm. Key and IV is generated automatically.
|
||||
DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
|
||||
|
||||
// Use the Automatically generated key for Encryption.
|
||||
return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
|
||||
}
|
||||
public static void EncryptFile(string sInputFilename,
|
||||
string sOutputFilename,
|
||||
string sKey)
|
||||
{
|
||||
FileStream fsInput = new FileStream(sInputFilename,
|
||||
FileMode.Open,
|
||||
FileAccess.Read);
|
||||
|
||||
FileStream fsEncrypted = new FileStream(sOutputFilename,
|
||||
FileMode.Create,
|
||||
FileAccess.Write);
|
||||
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
|
||||
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
|
||||
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
|
||||
ICryptoTransform desencrypt = DES.CreateEncryptor();
|
||||
CryptoStream cryptostream = new CryptoStream(fsEncrypted,
|
||||
desencrypt,
|
||||
CryptoStreamMode.Write);
|
||||
|
||||
byte[] bytearrayinput = new byte[fsInput.Length];
|
||||
fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
|
||||
cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
|
||||
cryptostream.Close();
|
||||
fsInput.Close();
|
||||
fsEncrypted.Close();
|
||||
}
|
||||
|
||||
public static void DecryptFile(string sInputFilename,
|
||||
string sOutputFilename,
|
||||
string sKey)
|
||||
{
|
||||
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
|
||||
//A 64 bit key and IV is required for this provider.
|
||||
//Set secret key For DES algorithm.
|
||||
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
|
||||
//Set initialization vector.
|
||||
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
|
||||
|
||||
//Create a file stream to read the encrypted file back.
|
||||
FileStream fsread = new FileStream(sInputFilename,
|
||||
FileMode.Open,
|
||||
FileAccess.Read);
|
||||
//Create a DES decryptor from the DES instance.
|
||||
ICryptoTransform desdecrypt = DES.CreateDecryptor();
|
||||
//Create crypto stream set to read and do a
|
||||
//DES decryption transform on incoming bytes.
|
||||
CryptoStream cryptostreamDecr = new CryptoStream(fsread,
|
||||
desdecrypt,
|
||||
CryptoStreamMode.Read);
|
||||
//Print the contents of the decrypted file.
|
||||
StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);
|
||||
fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
|
||||
fsDecrypted.Flush();
|
||||
fsDecrypted.Close();
|
||||
}
|
||||
}
|
||||
|
||||
public class MngConnectionPool
|
||||
{
|
||||
public int nNumber { set; get; }
|
||||
public bool bUseState { set; get; }
|
||||
public bool bLastConnState { set; get; }
|
||||
public int nUseCommandPort { set; get; }
|
||||
public int nUseStreamPort { set; get; }
|
||||
public bool bRequiredPortReset { set; get; }
|
||||
|
||||
public bool bRequiredPortResetReady { set; get; }
|
||||
|
||||
public Stopwatch stPortTimer { set; get; }
|
||||
public Stopwatch stConnWaitTimer { set; get; }
|
||||
|
||||
public MngConnectionPool(int nPos)
|
||||
{
|
||||
nNumber = nPos;
|
||||
|
||||
bUseState = false;
|
||||
|
||||
bLastConnState = false;
|
||||
|
||||
nUseCommandPort = 0;
|
||||
|
||||
nUseStreamPort = 0;
|
||||
|
||||
bRequiredPortReset = false;
|
||||
|
||||
bRequiredPortResetReady = false;
|
||||
|
||||
stPortTimer = new Stopwatch();
|
||||
stPortTimer.Start();
|
||||
|
||||
stConnWaitTimer = new Stopwatch();
|
||||
}
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
bUseState = false;
|
||||
|
||||
bLastConnState = false;
|
||||
|
||||
PortTImerRestart();
|
||||
}
|
||||
|
||||
public void PortTImerRestart()
|
||||
{
|
||||
stPortTimer.Restart();
|
||||
}
|
||||
|
||||
public void ConnWaitTimerStart()
|
||||
{
|
||||
if (stConnWaitTimer.IsRunning)
|
||||
stConnWaitTimer.Restart();
|
||||
else
|
||||
stConnWaitTimer.Start();
|
||||
}
|
||||
|
||||
public void ConnWaitTimerStop()
|
||||
{
|
||||
stConnWaitTimer.Stop();
|
||||
}
|
||||
|
||||
public void ConnWaitTimerReset()
|
||||
{
|
||||
stConnWaitTimer.Reset();
|
||||
}
|
||||
|
||||
public long ConnWaitTime()
|
||||
{
|
||||
return stConnWaitTimer.ElapsedMilliseconds;
|
||||
}
|
||||
}
|
||||
|
||||
public delegate void stCallBackDelegate();
|
||||
|
||||
public static class TimeControl
|
||||
{
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
public static extern bool SetSystemTime(ref SYSTEMTIME st);
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
public static extern bool SetLocalTime(ref SYSTEMTIME st);
|
||||
|
||||
private static SYSTEMTIME dtTimeSystem = new SYSTEMTIME();
|
||||
|
||||
private static bool bSuccessSyncTime;
|
||||
|
||||
public static bool SyncServerTimeResult { get { return bSuccessSyncTime; } }
|
||||
|
||||
//ScheduledTimer
|
||||
private static Timer _Timer;
|
||||
|
||||
private static ServerInfo ServerLoadInfo;
|
||||
|
||||
public static void _WorkTimer()
|
||||
{
|
||||
//TimeSync 시도
|
||||
DoSyncTime(ServerLoadInfo);
|
||||
}
|
||||
|
||||
private static TimeSpan GetDueTime(TimeSpan A, TimeSpan B)
|
||||
{
|
||||
if (A < B)
|
||||
{
|
||||
return B.Subtract(A);
|
||||
}
|
||||
else
|
||||
{
|
||||
//return new TimeSpan(24, 0, 0).Subtract(B.Subtract(A));
|
||||
return new TimeSpan(24, 0, 0).Subtract(A.Subtract(B));
|
||||
}
|
||||
}
|
||||
|
||||
private static void SetTime(TimeSpan _time, stCallBackDelegate callback)
|
||||
{
|
||||
if (_Timer != null)
|
||||
{
|
||||
// Change 매서드 사용 가능.
|
||||
_Timer.Dispose();
|
||||
}
|
||||
|
||||
TimeSpan Now = DateTime.Now.TimeOfDay;
|
||||
TimeSpan DueTime = GetDueTime(Now, _time);
|
||||
|
||||
_Timer = new Timer(new TimerCallback(delegate (object _callback)
|
||||
{
|
||||
((stCallBackDelegate)_callback)();
|
||||
}), callback, DueTime, new TimeSpan(24, 0, 0));
|
||||
}
|
||||
|
||||
public static bool GetSyncTime(ref SYSTEMTIME refSyncTime)
|
||||
{
|
||||
var localDateTime = DateTime.Now.ToLocalTime();
|
||||
|
||||
refSyncTime = new SYSTEMTIME();
|
||||
refSyncTime.wYear = (short)localDateTime.Year;
|
||||
refSyncTime.wMonth = (short)localDateTime.Month;
|
||||
refSyncTime.wDay = (short)localDateTime.Day;
|
||||
refSyncTime.wHour = (short)localDateTime.Hour;
|
||||
refSyncTime.wMinute = (short)localDateTime.Minute;
|
||||
refSyncTime.wSecond = (short)localDateTime.Second;
|
||||
refSyncTime.wMilliseconds = (short)localDateTime.Millisecond;
|
||||
|
||||
return bSuccessSyncTime;
|
||||
}
|
||||
|
||||
public static void DoSyncTime(ServerInfo GetLoadInfo)
|
||||
{
|
||||
ServerLoadInfo = GetLoadInfo;
|
||||
|
||||
Task.Run(() => Work());
|
||||
}
|
||||
|
||||
private static async void Work()
|
||||
{
|
||||
await GetTimeServerDateTime();
|
||||
}
|
||||
|
||||
private static async Task<bool> GetTimeServerDateTime()
|
||||
{
|
||||
var currentProcess = Process.GetCurrentProcess();
|
||||
//Console.WriteLine(currentProcess.Id);
|
||||
|
||||
/*
|
||||
Win32.TokenPrivileges
|
||||
; https://github.com/trondr/Win32.TokenPrivileges
|
||||
*/
|
||||
|
||||
int nCnt = 0;
|
||||
|
||||
bSuccessSyncTime = false;
|
||||
|
||||
SetTime(new TimeSpan(ServerLoadInfo.TimeServerSyncTimeHour,
|
||||
ServerLoadInfo.TimeServerSyncTimeMinute,
|
||||
ServerLoadInfo.TimeServerSyncTimeSecond), _WorkTimer);
|
||||
|
||||
/*SetTime(new TimeSpan(16,
|
||||
37,
|
||||
0), _WorkTimer);*/
|
||||
|
||||
while (true)
|
||||
{
|
||||
string responseText = string.Empty;
|
||||
|
||||
if (nCnt > 3)
|
||||
break;
|
||||
|
||||
try
|
||||
{
|
||||
string strHostName = string.Empty;
|
||||
int nPortNumber = int.MinValue;
|
||||
|
||||
strHostName = ServerLoadInfo.SyncTimeServerAddress;
|
||||
nPortNumber = ServerLoadInfo.SyncTimeServerPort;
|
||||
|
||||
if (nPortNumber == int.MinValue)
|
||||
nPortNumber = 123;
|
||||
|
||||
if (strHostName.Length <= 0)
|
||||
throw new Exception("Time server access address not specified.");
|
||||
|
||||
//default Windows time server
|
||||
//{52.231.114.183}
|
||||
//const string ntpServer = "time.windows.com";
|
||||
|
||||
// NTP message size - 16 bytes of the digest (RFC 2030)
|
||||
var ntpData = new byte[48];
|
||||
|
||||
//Setting the Leap Indicator, Version Number and Mode values
|
||||
ntpData[0] = 0x1B; //LI = 0 (no warning), VN = 3 (IPv4 only), Mode = 3 (Client Mode)
|
||||
|
||||
//var addresses = Dns.GetHostEntry(ntpServer).AddressList;
|
||||
|
||||
IPAddress SetAddress;
|
||||
IPAddress.TryParse(strHostName, out SetAddress);
|
||||
|
||||
//The UDP port number assigned to NTP is 123
|
||||
var ipEndPoint = new IPEndPoint(SetAddress, 123);
|
||||
//var ipEndPoint = new IPEndPoint(addresses[1], 123);
|
||||
//NTP uses UDP
|
||||
|
||||
await Task.Delay(5000);
|
||||
|
||||
using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
|
||||
{
|
||||
socket.Connect(ipEndPoint);
|
||||
|
||||
//Stops code hang if NTP is blocked
|
||||
socket.ReceiveTimeout = 5000;
|
||||
|
||||
socket.Send(ntpData);
|
||||
socket.Receive(ntpData);
|
||||
socket.Close();
|
||||
}
|
||||
|
||||
ulong intPart = (ulong)ntpData[40] << 24 | (ulong)ntpData[41] << 16 | (ulong)ntpData[42] << 8 | (ulong)ntpData[43];
|
||||
ulong fractPart = (ulong)ntpData[44] << 24 | (ulong)ntpData[45] << 16 | (ulong)ntpData[46] << 8 | (ulong)ntpData[47];
|
||||
|
||||
var milliseconds = (intPart * 1000) + ((fractPart * 1000) / 0x100000000L);
|
||||
var networkDateTime = (new DateTime(1900, 1, 1)).AddMilliseconds((long)milliseconds);
|
||||
|
||||
var localDateTime = networkDateTime.ToLocalTime();
|
||||
|
||||
//pc에 적용하기
|
||||
dtTimeSystem = new SYSTEMTIME();
|
||||
dtTimeSystem.wYear = (short)localDateTime.Year;
|
||||
dtTimeSystem.wMonth = (short)localDateTime.Month;
|
||||
dtTimeSystem.wDay = (short)localDateTime.Day;
|
||||
dtTimeSystem.wHour = (short)localDateTime.Hour;
|
||||
dtTimeSystem.wMinute = (short)localDateTime.Minute;
|
||||
dtTimeSystem.wSecond = (short)localDateTime.Second;
|
||||
dtTimeSystem.wMilliseconds = (short)localDateTime.Millisecond;
|
||||
|
||||
bool SetResult = false;
|
||||
int lastError = 0;
|
||||
|
||||
try
|
||||
{
|
||||
SetResult = SetLocalTime(ref dtTimeSystem);
|
||||
if (SetResult == false)
|
||||
{
|
||||
lastError = Marshal.GetLastWin32Error();
|
||||
|
||||
throw new Exception();
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine("Exception: " + e.Message + " (" + lastError + ")");
|
||||
|
||||
throw new Exception();
|
||||
}
|
||||
|
||||
if (SetResult)
|
||||
{
|
||||
Console.WriteLine($"Response: {responseText}, DateTime: {localDateTime}");
|
||||
|
||||
bSuccessSyncTime = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
|
||||
/*IPAddress SetAddress;
|
||||
IPAddress.TryParse(strHostName, out SetAddress);
|
||||
IPEndPoint SetIpEndPoint = new IPEndPoint(SetAddress, nPortNumber);
|
||||
|
||||
//37 //13 //123
|
||||
//using (var client = new TcpClient(strHostName, nPortNumber))
|
||||
//using (var client = new TcpClient(SetIpEndPoint))
|
||||
using (var streamReader = new StreamReader(client.GetStream()))
|
||||
{
|
||||
await Task.Delay(5000);
|
||||
|
||||
//시간 불러오기
|
||||
responseText = streamReader.ReadToEnd(); // "59442 21-08-16 14:28:19 50 0 0 585.3 UTC(NIST) *"
|
||||
var utcDateTimeString = responseText.Substring(7, 17);
|
||||
|
||||
if (DateTime.TryParseExact(utcDateTimeString, "yy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out DateTime utcDateTime) == false)
|
||||
{
|
||||
Console.WriteLine("[ " + nCnt.ToString("D10") + " ] " + responseText);
|
||||
|
||||
//continue;
|
||||
|
||||
throw new Exception();
|
||||
}
|
||||
|
||||
var localDateTime = utcDateTime.ToLocalTime();
|
||||
//var systemDateTime = utcDateTime.SetSystemTime();
|
||||
|
||||
//pc에 적용하기
|
||||
dtTimeSystem = new SYSTEMTIME();
|
||||
dtTimeSystem.wYear = (short)localDateTime.Year;
|
||||
dtTimeSystem.wMonth = (short)localDateTime.Month;
|
||||
dtTimeSystem.wDay = (short)localDateTime.Day;
|
||||
dtTimeSystem.wHour = (short)localDateTime.Hour;
|
||||
dtTimeSystem.wMinute = (short)localDateTime.Minute;
|
||||
dtTimeSystem.wSecond = (short)localDateTime.Second;
|
||||
dtTimeSystem.wMilliseconds = (short)localDateTime.Millisecond;
|
||||
|
||||
bool SetResult = false;
|
||||
int lastError = 0;
|
||||
|
||||
try
|
||||
{
|
||||
SetResult = SetLocalTime(ref dtTimeSystem);
|
||||
if (SetResult == false)
|
||||
{
|
||||
lastError = Marshal.GetLastWin32Error();
|
||||
|
||||
throw new Exception();
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine("Exception: " + e.Message + " (" + lastError + ")");
|
||||
|
||||
throw new Exception();
|
||||
}
|
||||
|
||||
if (SetResult)
|
||||
{
|
||||
Console.WriteLine($"Response: {responseText}, DateTime: {localDateTime}");
|
||||
|
||||
bSuccessSyncTime = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}*/
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine("Exception: " + e.Message + " (" + responseText + ")");
|
||||
|
||||
nCnt++;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user