[성현모] CPXV2 Init

This commit is contained in:
SHM
2024-06-26 10:30:00 +09:00
parent cdf12248c5
commit 5958993b6a
588 changed files with 698420 additions and 0 deletions

View File

@ -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;
}
}
}