using System; using System.Net; using System.Net.Sockets; using System.Runtime.InteropServices; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Xml.Linq; using System.IO; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; using System.Data.SqlTypes; using DevExpress.Utils.DPI; using DevExpress.Utils.Helpers; using DevExpress.Data; using DevExpress.Data.Helpers; using DevExpress.XtraBars; using DevExpress.XtraBars.Navigation; using SystemX.Net; using SystemX.Common; using SystemX.Net.BaseProtocol; using SystemX.Net.Comm; using SystemX.Net.Schedule; using SystemX.Net.DB; using SystemX.Common.Serialization; using SystemX.Common.Archive; using SystemX.Net.Platform.Common.Util; using SystemX.Net.Platform.Common.ExtensionMethods; using SystemX.Common.Log.Query; using SystemX.Common.Protocol.SIA; using SystemX.Common.Log.SIA; using SystemX.Common.Log.LSU; using static SystemX.Net.Platform.Common.Util.LogMessage; using static SystemX.Net.DB.XDBConnManager; using SystemX.Net.Middleware.Commons; using SystemX.Net.Platform.SystemX.Common; using System.Collections.Concurrent; namespace SystemX.Net.MiddlewareUI { public interface ILogin { void SetLoginState(string strGetHostID, string strGetSection, bool bState); } public partial class MainForm : DevExpress.XtraBars.FluentDesignSystem.FluentDesignForm, ILogin { private const int SC_CLOSE = 0xF060; private const int MF_ENABLED = 0x0; private const int MF_GRAYED = 0x1; private const int MF_DISABLED = 0x2; [DllImport("user32.dll")] private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); [DllImport("user32.dll")] private static extern int EnableMenuItem(IntPtr hMenu, int wIDEnableItem, int wEnable); /// /// Base Variable /// private const int ALL_MANAGE_NUM = 110; private const int PORT_DISTRIBUTION_NUM = 10; private bool MIDDLEWARE_START_STATE; private ServerInfo LoadInfo; private bool bUseMapLogProcess; private MapLogOption OptionMapLog; private CMapParameter ParamterMapLog; private CMapParameter ParamterMapInfoLog; public ServerInfo GetLoadSeverInfomation() { return LoadInfo; } /// /// Socket Comm /// private bool[] ProcessUseState; private AsyncServerSocket[] ServerCommandSock; private AsyncServerSocket[] ServerStreamSock; private PacketFlowControl[] FlowCommandControl; private PacketFlowControl[] FlowStreamControl; private TestListLoadInfo[] thisTLLoadInfo; private ConnectInfoStore[] thisConnInfo; private MngConnectionPool[] ConnPool; private bool[] ListenServerOnState; private bool bShowCpLogProcessTime { set; get; } = false; public object GetConnectInfo(int iPos) { return thisConnInfo[iPos]; } public bool GetConnectInfoFindHost(string strHostName, string strSectionName, bool bUseUIM = false) { bool bFindResult = false; foreach (ConnectInfoStore cis in thisConnInfo) { if (cis.bHostLoginState == false) continue; if (bUseUIM) { if (cis.strConnectHostID.CompareTo(strHostName) == 0) { bFindResult = true; break; } } else { if (cis.strConnectHostID.CompareTo(strHostName) == 0 && cis.strConnectSection.CompareTo(strSectionName) == 0) { bFindResult = true; break; } } } return bFindResult; } //RecvCommandQueue Task private Stopwatch stCheckReleaseTime; private Task taskRecvCommandProcess; private bool m_bTaskCommandBlock; //RecvStreamQueue Task private Task taskRecvStreamProcess; private bool m_bTaskStreamBlock; private Task taskMappedLogProcess; private bool m_bTaskMappedLogBlock; private ConcurrentQueue> MappedLogQueueData; // CancellationTokenSource CTS; CancellationToken CT; /// /// ProcessInfo /// string[] strSetProcessInfo; private Stopwatch[] stWatchInitialTime; private bool[] m_bInitialCallState; private int[] nLastHandleNumber; // //private static readonly object objTaskCommandWait = new object(); //private static readonly object objTaskStreamWait = new object(); private static bool bTaskCommandWaitLock = false; private static bool bTaskStreamWaitLock = false; private static int nCommandNumber = 0; private static int nStreamNumber = 0; // //DataBase private XDBConnManager MngDBConn; public XDBConnManager GetDBConn() { return MngDBConn; } //LogProcess //private AnalysisLog_LSU LogTableQuery; private AnalysisLog_SIA LogTableQuery; private CallPreMadeQueryInfo xCallQuery; public CallPreMadeQueryInfo GetUsetQueryInfo() { return xCallQuery; } /// /// TimerLock /// private enum TIMER_LOCK { CHK_TIMER = 0, UI_TIMER = 1, } private bool[] m_bTimerLock; // private int m_iLastGetIndex; // XTableInfo getXTableInfo; private Task tkReset; // private static object objMainCommandWait = new object(); private static object objShortTermCommandWait = new object(); private static object objLongTermCommandWait = new object(); private static object objMainStreamWait = new object(); private static object objShortTermStreamWait = new object(); private static object objLongTermStreamWait = new object(); private static object objExcuteMainCommandWait = new object(); private static object objExcuteShortTermCommandWait = new object(); private static object objExcuteLongTermCommandWait = new object(); private static object objExcuteMainStreamWait = new object(); private static object objExcuteShortTermStreamWait = new object(); private static object objExcuteLongTermStreamWait = new object(); // //private static object objSingleTransactionDataAccessWait = new object(); //private static object objClearServerInstanceWait = new object(); private static int nMappedLogDataInOutFailedCnt = 0; //private static object objTestListCntIDLock = new object(); public class CTestListCntID { public DateTime dtAccessTime; public int nCnt; public CTestListCntID() { dtAccessTime = DateTime.Now; nCnt = 1; } } //1 : Host-Section //2 : Id //3 : Time, Cnt private ConcurrentDictionary> dicQueryTestListCntID; public ConcurrentDictionary> TestListCntID { get { return dicQueryTestListCntID; } } /* private byte[] GetImageToByteArray(Bitmap bitMap) { return (byte[])ImgConverter.ConvertTo(bitMap, typeof(byte[])); } */ public MainForm() { InitializeComponent(); MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"Use CP-Server[X] Middleware Version for [CPXV2][v240529] " + "[SystemX.Net.MiddlewareUI : MainForm]", ConsoleColor.Green, LogMessageLevel.FATAL); EnableMenuItem(GetSystemMenu(this.Handle, false), SC_CLOSE, MF_GRAYED); ConsoleUtil.ConsoleHide(); MessageOutput.PrintLogLevel = LogMessageLevel.INFO; dicQueryTestListCntID = new ConcurrentDictionary>(); CTS = new CancellationTokenSource(); CT = CTS.Token; // tkReset = null; MIDDLEWARE_START_STATE = true; ServerCommandSock = new AsyncServerSocket[ALL_MANAGE_NUM]; ServerStreamSock = new AsyncServerSocket[ALL_MANAGE_NUM]; FlowCommandControl = new PacketFlowControl[ALL_MANAGE_NUM]; FlowStreamControl = new PacketFlowControl[ALL_MANAGE_NUM]; stWatchInitialTime = new Stopwatch[ALL_MANAGE_NUM]; m_bInitialCallState = new bool[ALL_MANAGE_NUM]; strSetProcessInfo = new string[ALL_MANAGE_NUM]; nLastHandleNumber = new int[PORT_DISTRIBUTION_NUM]; for (int i = 0; i < ALL_MANAGE_NUM; i++) { ServerCommandSock[i] = null; ServerStreamSock[i] = null; FlowCommandControl[i] = null; FlowStreamControl[i] = null; stWatchInitialTime[i] = new Stopwatch(); stWatchInitialTime[i].Start(); m_bInitialCallState[i] = false; strSetProcessInfo[i] = ""; } string strExcutePos = Environment.CurrentDirectory; string strServerInfoPos = strExcutePos + @"\Configure\ServerInformation.xml"; string strDBInfoPos = strExcutePos + @"\Configure\DBConnInfo.xml"; string strMapLogOptionPos = strExcutePos + @"\Configure\MapLogOption.xml"; ProcessUseState = new bool[ALL_MANAGE_NUM]; Array.Clear(ProcessUseState, 0, ALL_MANAGE_NUM); OptionMapLog = new MapLogOption(strMapLogOptionPos); if (OptionMapLog.Load() == false) { MIDDLEWARE_START_STATE = false; MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"Failed to load map-log option information. [SystemX.Net.MiddlewareUI : MainForm.MainForm]", ConsoleColor.Yellow, LogMessageLevel.DEBUG); return; } else { bUseMapLogProcess = OptionMapLog.bUseMapLog; barToggleSwitchItemMapLog.Checked = bUseMapLogProcess; ParamterMapLog = new CMapParameter(); ParamterMapInfoLog = new CMapParameter(); ParamterMapLog.strSetEnterMutexName = OptionMapLog.strMapLogEnterMutexName; ParamterMapLog.strSetAccessMutexName = OptionMapLog.strMapLogAccessMutexName; ParamterMapLog.strSetPath = OptionMapLog.strMapLogPath; ParamterMapLog.strSetFileName = OptionMapLog.strMapLogFileName; ParamterMapLog.strSetMapName = OptionMapLog.strMapLogName; ParamterMapInfoLog.strSetEnterMutexName = OptionMapLog.strMapInfoLogEnterMutexName; ParamterMapInfoLog.strSetAccessMutexName = OptionMapLog.strMapInfoLogAccessMutexName; ParamterMapInfoLog.strSetPath = OptionMapLog.strMapInfoLogPath; ParamterMapInfoLog.strSetFileName = OptionMapLog.strMapInfoLogFileName; ParamterMapInfoLog.strSetMapName = OptionMapLog.strMapInfoLogName; } LoadInfo = new ServerInfo(strServerInfoPos, ALL_MANAGE_NUM); if (LoadInfo.Load() == false) { MIDDLEWARE_START_STATE = false; MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"Failed to load server information. [SystemX.Net.MiddlewareUI : MainForm.MainForm]", ConsoleColor.Yellow, LogMessageLevel.DEBUG); return; } else { string strGetTitle = this.Text; this.Text = strGetTitle + " " + (LoadInfo.LOOP_BACK ? " [LocalHost]" : " [" + LoadInfo.SERVER_IP + "]"); Title_label.Text = "CP ALIS" + ((LoadInfo.TITLE.Length > 0) ? " [" + LoadInfo.TITLE + "]" : ""); } thisTLLoadInfo = new TestListLoadInfo[ALL_MANAGE_NUM]; thisConnInfo = new ConnectInfoStore[ALL_MANAGE_NUM]; ConnPool = new MngConnectionPool[ALL_MANAGE_NUM]; for (int i = 0; i < ALL_MANAGE_NUM; i++) { thisTLLoadInfo[i] = new TestListLoadInfo(0); thisConnInfo[i] = new ConnectInfoStore(); thisConnInfo[i].bUseHostInfo = LoadInfo.USE_HOST_INFO; ConnPool[i] = new MngConnectionPool(i); } for (int i = 0; i < PORT_DISTRIBUTION_NUM; i++) { ConnPool[i].bUseState = true; ConnPool[i].nUseCommandPort = LoadInfo.nListenCommandPort[i]; ConnPool[i].nUseStreamPort = LoadInfo.nListenStreamPort[i]; ConnPool[i].PortTImerRestart(); } MngDBConn = new XDBConnManager(); MngDBConn.ConfigPath = strDBInfoPos; if (MngDBConn.OpenConnection(LoadInfo.USE_HOST_INFO, LoadInfo.HOST_TABLE_NAME, LoadInfo.USER_TABLE_NAME)) { getXTableInfo = MngDBConn.CurrentConnection(eConnCategory.Main).GetCollectSchemaInfo(); //옵션 확인 및 ON //DECLARE @ARITHABORT VARCHAR(3) = 'OFF'; IF ( (64 & @@OPTIONS) = 64 ) SET @ARITHABORT = 'ON'; SELECT @ARITHABORT AS ARITHABORT; string strGetQuery1 = "DECLARE @ARITHABORT VARCHAR(3) = 'OFF'; IF ( (64 & @@OPTIONS) = 64 ) SET @ARITHABORT = 'ON'; SELECT @ARITHABORT AS ARITHABORT;"; string strGetQuery2 = "DECLARE @ARITHIGNORE VARCHAR(3) = 'OFF'; IF ( (128 & @@OPTIONS) = 128 ) SET @ARITHIGNORE = 'ON'; SELECT @ARITHIGNORE AS ARITHIGNORE;"; /* SET ARITHIGNORE ON - 쿼리 실행 중 오버플로 또는 0으로 나누기 오류에서 오류 메시지를 반환할지 여부를 제어   오류 메시지가 반환될지 여부만 제어하며 이 설정에 상관 없이 오버플로 또는 0으로 나누기 오류를   발생시킨 계산에 NULL을 반환한다. 없는 값 처리를 해야하므고 오류를 발생시킨 것에서 null 반환을 받아야 한다! SET ARITHABORT ON이면 오버플로 또는 0으로 나누기 오류 발생 시 쿼리나 일괄 처리가 종료   트랜잭션에서 해당 오류가 발생하면 트랜잭션이 롤백시킨다. 그러나 이 설정이 INSERT, UPDATE, DELETE 문 실행 중에   발생한 오류에는 영향을 주지 않는다. */ DataSet ds1 = MngDBConn.CurrentConnection(eConnCategory.Main).QueryDataSet(strGetQuery1); DataSet ds2 = MngDBConn.CurrentConnection(eConnCategory.Main).QueryDataSet(strGetQuery2); if (XCommons.isHasRow(ds1)) { bool bOptionState = ds1.Tables[0].Rows[0]["ARITHABORT"].ToString() == "ON" ? true : false; if (bOptionState == false) MngDBConn.CurrentConnection(eConnCategory.Main).QueryDataSet("SET ARITHABORT ON"); } if (XCommons.isHasRow(ds2)) { bool bOptionState = ds2.Tables[0].Rows[0]["ARITHIGNORE"].ToString() == "ON" ? true : false; if (bOptionState == false) MngDBConn.CurrentConnection(eConnCategory.Main).QueryDataSet("SET ARITHIGNORE ON"); } // ds1 = MngDBConn.CurrentConnection(eConnCategory.ShortTerm).QueryDataSet(strGetQuery1); ds2 = MngDBConn.CurrentConnection(eConnCategory.ShortTerm).QueryDataSet(strGetQuery2); if (XCommons.isHasRow(ds1)) { bool bOptionState = ds1.Tables[0].Rows[0]["ARITHABORT"].ToString() == "ON" ? true : false; if (bOptionState == false) MngDBConn.CurrentConnection(eConnCategory.ShortTerm).QueryDataSet("SET ARITHABORT ON"); } if (XCommons.isHasRow(ds2)) { bool bOptionState = ds2.Tables[0].Rows[0]["ARITHIGNORE"].ToString() == "ON" ? true : false; if (bOptionState == false) MngDBConn.CurrentConnection(eConnCategory.ShortTerm).QueryDataSet("SET ARITHIGNORE ON"); } // ds1 = MngDBConn.CurrentConnection(eConnCategory.LongTerm).QueryDataSet(strGetQuery1); ds2 = MngDBConn.CurrentConnection(eConnCategory.LongTerm).QueryDataSet(strGetQuery2); if (XCommons.isHasRow(ds1)) { bool bOptionState = ds1.Tables[0].Rows[0]["ARITHABORT"].ToString() == "ON" ? true : false; if (bOptionState == false) MngDBConn.CurrentConnection(eConnCategory.LongTerm).QueryDataSet("SET ARITHABORT ON"); } if (XCommons.isHasRow(ds2)) { bool bOptionState = ds2.Tables[0].Rows[0]["ARITHIGNORE"].ToString() == "ON" ? true : false; if (bOptionState == false) MngDBConn.CurrentConnection(eConnCategory.LongTerm).QueryDataSet("SET ARITHIGNORE ON"); } if (MIDDLEWARE_START_STATE == false) MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"The table registered in the configuration file does not exist in the actual database. [SystemX.Net.MiddlewareUI : MainForm.MainForm]", ConsoleColor.Yellow, LogMessageLevel.DEBUG); } else { MIDDLEWARE_START_STATE = false; MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"Failed to connect to DB and to get table information. [SystemX.Net.MiddlewareUI : MainForm.MainForm]", ConsoleColor.Yellow, LogMessageLevel.DEBUG); return; } m_bTimerLock = new bool[10]; Array.Clear(m_bTimerLock, 0, 10); m_iLastGetIndex = -1; ClearServerInstance(); if (StartListenServer(LoadInfo.nListenCommandPort, LoadInfo.nListenStreamPort) == false) { MIDDLEWARE_START_STATE = false; MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"MiddlewareUI failed to start! [SystemX.Net.MiddlewareUI : MainForm.MainForm]", ConsoleColor.Red, LogMessageLevel.FATAL); return; } else { ListenServerOnState = new bool[PORT_DISTRIBUTION_NUM]; for (int i = 0; i < PORT_DISTRIBUTION_NUM; i++) ListenServerOnState[i] = true; } if (MIDDLEWARE_START_STATE) { DisplayListenElement(); DisplayPortElement(); //Log Process Start try { string strUserQueryInfoPos = strExcutePos + @"\Configure\CallMadeQueryInfo.xml"; xCallQuery = new CallPreMadeQueryInfo(strUserQueryInfoPos); xCallQuery.Load(); } catch (Exception e) { MessageBox.Show(e.Message); } // stCheckReleaseTime = new Stopwatch(); stCheckReleaseTime.Start(); taskRecvCommandProcess = null; m_bTaskCommandBlock = false; taskRecvCommandProcess = new Task(new Action(WatchRecvCommandQueue), CT); taskRecvCommandProcess.Start(); // taskRecvStreamProcess = null; m_bTaskStreamBlock = false; taskRecvStreamProcess = new Task(new Action(WatchRecvStreamQueue), CT); taskRecvStreamProcess.Start(); MappedLogQueueData = new ConcurrentQueue>(); taskMappedLogProcess = null; m_bTaskMappedLogBlock = false; taskMappedLogProcess = new Task(new Action(WatchMappedLogQueue), CT); taskMappedLogProcess.Start(); // TimeControl.DoSyncTime(LoadInfo); UItimer.Enabled = true; MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"MiddlewareUI start success. [SystemX.Net.MiddlewareUI : MainForm.MainForm]", ConsoleColor.White, LogMessageLevel.INFO); } } private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { if (MIDDLEWARE_START_STATE == true) { if (MessageBox.Show("You want to program exit?", "Middleware for Line Bridge - Middleware.UI", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) e.Cancel = true; else e.Cancel = false; } else e.Cancel = false; } private void MainForm_FormClosed(object sender, FormClosedEventArgs e) { CTS.Cancel(); if (taskRecvCommandProcess != null) { m_bTaskCommandBlock = true; taskRecvCommandProcess.Wait(); taskRecvCommandProcess.ContinueWith(t => { MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"taskRecvCommandProcess END. [SystemX.Net.MiddlewareUI : MainForm.MainForm_FormClosed]", ConsoleColor.White, LogMessageLevel.DEBUG); }); } if (taskRecvStreamProcess != null) { m_bTaskStreamBlock = true; taskRecvStreamProcess.Wait(); taskRecvStreamProcess.ContinueWith(t => { MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"taskRecvStreamProcess END. [SystemX.Net.MiddlewareUI : MainForm.MainForm_FormClosed]", ConsoleColor.White, LogMessageLevel.DEBUG); }); } if (taskMappedLogProcess != null) { m_bTaskMappedLogBlock = true; taskMappedLogProcess.Wait(); taskMappedLogProcess.ContinueWith(t => { MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"taskMappedLogProcess END. [SystemX.Net.MiddlewareUI : MainForm.MainForm_FormClosed]", ConsoleColor.White, LogMessageLevel.DEBUG); }); } } private void ClientConnectEvent(object sender, ScheduleEvent e) { string strGetLocalEndPoint = ""; try { strGetLocalEndPoint = ((Socket)sender)?.RemoteEndPoint?.ToString(); if (strGetLocalEndPoint == null) strGetLocalEndPoint = ""; } catch (Exception ex) { MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"Client command-connection connect." + strGetLocalEndPoint + " LocalEndPoint error. [SystemX.Net.MiddlewareUI : MainForm.ClientConnectEvent]\r\n" + ex.Message, ConsoleColor.Red, LogMessageLevel.INFO); } try { thisConnInfo[e.CALL_NUMBER].strCommandEndPointInfo = strGetLocalEndPoint; // thisConnInfo[e.CALL_NUMBER].stStreamCheckTime.Restart(); thisConnInfo[e.CALL_NUMBER].ConnectStreamCheck = true; // stWatchInitialTime[e.CALL_NUMBER].Restart(); m_bInitialCallState[e.CALL_NUMBER] = true; ConnPool[e.CALL_NUMBER].bLastConnState = true; ConnPool[e.CALL_NUMBER].ConnWaitTimerReset(); thisConnInfo[e.CALL_NUMBER].Initialize(); thisConnInfo[e.CALL_NUMBER].ClientConnectState = true; } catch (Exception ex) { MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"Client command-connection connect." + strGetLocalEndPoint + " Setting error. [SystemX.Net.MiddlewareUI : MainForm.ClientConnectEvent]\r\n" + ex.Message, ConsoleColor.White, LogMessageLevel.INFO); } MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"Client command-connection connect." + strGetLocalEndPoint + " [SystemX.Net.MiddlewareUI : MainForm.ClientConnectEvent]", ConsoleColor.White, LogMessageLevel.INFO); } private void ClientErrorEvent(object sender, ScheduleEvent e) { try { thisConnInfo[e.CALL_NUMBER].ClientConnectState = false; thisConnInfo[e.CALL_NUMBER].bHostLoginState = false; stWatchInitialTime[e.CALL_NUMBER].Restart(); if (e.CALL_NUMBER >= PORT_DISTRIBUTION_NUM) SetLoginState(thisConnInfo[e.CALL_NUMBER].strConnectHostID, thisConnInfo[e.CALL_NUMBER].strConnectSection, false); thisTLLoadInfo[e.CALL_NUMBER].Initialize(); thisConnInfo[e.CALL_NUMBER].strConnectHostID = ""; thisConnInfo[e.CALL_NUMBER].strConnectSection = ""; thisConnInfo[e.CALL_NUMBER].strCommandEndPointInfo = ""; thisConnInfo[e.CALL_NUMBER].stStreamCheckTime.Restart(); thisConnInfo[e.CALL_NUMBER].ConnectStreamCheck = false; } catch (Exception ex) { MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"Client command-connection error." + thisConnInfo[e.CALL_NUMBER].strCommandEndPointInfo + " Setting error. [SystemX.Net.MiddlewareUI : MainForm.ClientErrorEvent]\r\n" + ex.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG); } finally { //thisConnInfo[e.CALL_NUMBER].ClientConnectSocket = null; if (e.CALL_NUMBER >= PORT_DISTRIBUTION_NUM) { //RemoveElement(e.CALL_NUMBER); ClearServerInstance(e.CALL_NUMBER); ConnPool[e.CALL_NUMBER].Initialize(); } else ConnPool[e.CALL_NUMBER].bRequiredPortReset = true; //MakeServerInstance(e.CALL_NUMBER); } MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"Client command-connection error." + thisConnInfo[e.CALL_NUMBER].strCommandEndPointInfo + " [SystemX.Net.MiddlewareUI : MainForm.ClientErrorEvent]", ConsoleColor.Yellow, LogMessageLevel.DEBUG); } private void StreamConnectEvent(object sender, ScheduleEvent e) { string strGetLocalEndPoint = ""; try { strGetLocalEndPoint = ((Socket)sender)?.RemoteEndPoint?.ToString(); if (strGetLocalEndPoint == null) strGetLocalEndPoint = ""; } catch (Exception ex) { MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"Client stream-connection connect." + strGetLocalEndPoint + " LocalEndPoint error. [SystemX.Net.MiddlewareUI : MainForm.StreamConnectEvent]\r\n" + ex.Message, ConsoleColor.Red, LogMessageLevel.INFO); } thisConnInfo[e.CALL_NUMBER].StreamConnectState = true; thisConnInfo[e.CALL_NUMBER].strStreamEndPointInfo = strGetLocalEndPoint; MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"Client stream-connection connect." + thisConnInfo[e.CALL_NUMBER].strStreamEndPointInfo + " [SystemX.Net.MiddlewareUI : MainForm.StreamConnectEvent]", ConsoleColor.White, LogMessageLevel.INFO); } private void StreamErrorEvent(object sender, ScheduleEvent e) { MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"Client stream-connection error." + thisConnInfo[e.CALL_NUMBER].strStreamEndPointInfo + " [SystemX.Net.MiddlewareUI : MainForm.StreamErrorEvent]", ConsoleColor.Yellow, LogMessageLevel.DEBUG); thisConnInfo[e.CALL_NUMBER].StreamConnectState = false; thisConnInfo[e.CALL_NUMBER].strStreamEndPointInfo = ""; } private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e) { if (this.Visible) this.Visible = false; else this.Visible = true; } private void label1_DoubleClick(object sender, EventArgs e) { ConsoleUtil.ConsoleVisibleControl(); } private void accordionControl_Click(object sender, EventArgs e) { if (m_iLastGetIndex != -1) m_iLastGetIndex = -1; } private void contextMenuSubStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { ToolStripItem tsi = e.ClickedItem; this.Close(); } internal struct StationQueryTestListInfo { private Stopwatch stLoadedTimer { set; get; } public bool bLoaded { set; get; } public int nFileNo { set; get; } public int nVariantNo { set; get; } public string strProdNo_C { set; get; } public string strProdNo_P { set; get; } public DateTime UpdateDT { set; get; } public DateTime TestListFileUpdateDT { set; get; } public string strTestCode { set; get; } public string strTestType { set; get; } public string strVersion { set; get; } public string strProdCode { set; get; } public void SetLoadedTime() { stLoadedTimer.Restart(); } public long GetLoadedTime() { return stLoadedTimer.ElapsedMilliseconds; } public StationQueryTestListInfo(int nOption) { stLoadedTimer = new Stopwatch(); stLoadedTimer.Start(); bLoaded = false; nFileNo = -1; nVariantNo = -1; strProdNo_C = ""; strProdNo_P = ""; UpdateDT = DateTime.Now; TestListFileUpdateDT = DateTime.Now; strTestCode = ""; strTestType = ""; strVersion = ""; strProdCode = ""; } } internal struct TestListLoadInfo { public ConcurrentDictionary dicTLInfo; public TestListLoadInfo(int nOption) { dicTLInfo = new ConcurrentDictionary(); } public void Initialize() { if (dicTLInfo != null) { if (dicTLInfo.Count > 0) dicTLInfo.Clear(); } dicTLInfo = new ConcurrentDictionary(); } } // internal class ConnectInfoStore : ICloneable { /// /// Connect Socket Infomation /// /// //public Socket ClientConnectSocket { set; get; } public bool ClientConnectState { set; get; } public bool ConnectStreamCheck { set; get; } public bool StreamConnectState { set; get; } public byte m_ucSendCommandToken { set; get; } public byte m_ucRecvCommandToken { set; get; } public byte m_ucSendStreamToken { set; get; } public byte m_ucRecvStreamToken { set; get; } public int m_iSendCommandCnt { set; get; } public int m_iRecvCommandCnt { set; get; } public int m_iSendStreamCnt { set; get; } public int m_iRecvStreamCnt { set; get; } public int m_iSendCommandQueueSize { set; get; } public int m_iRecvCommandQueueSize { set; get; } public int m_iSendStreamQueueSize { set; get; } public int m_iRecvStreamQueueSize { set; get; } /// /// Big Size File /// public List> lstRecvFileBytes { set; get; } public int nFileRecvPos { set; get; } public int nFileRecvEndPos { set; get; } public string strRecvFileName { set; get; } public string strRecvFileExtension { set; get; } /// /// Last Process Time /// public Stopwatch stCommandProcessTime; public long lCommandTime; public Stopwatch stStreamProcessTime; public long lStreamTime; public Stopwatch stCheckTime; public Stopwatch stStreamCheckTime; /// /// Connect User Info /// public bool bUseHostInfo; public bool bHostLoginState; public string strConnectHostID; public string strConnectSection; public string strCommandEndPointInfo; public string strStreamEndPointInfo; public string strResultTestListCntID; /// /// Last Query Info /// public int iLastQueryTLStepVer; public bool bSuccessQueryVRFY; public DataSet getLatestStepVer; public DataSet geyLatestTestListInfo; public DataSet dsLatestVRFYRel; public DataSet dsLongTermLatestVRFYRel; public object Clone() { return this; } public void Initialize() { lstRecvFileBytes = new List>(); nFileRecvPos = 0; nFileRecvEndPos = 0; iLastQueryTLStepVer = int.MinValue; bSuccessQueryVRFY = false; getLatestStepVer = null; geyLatestTestListInfo = null; dsLatestVRFYRel = null; dsLongTermLatestVRFYRel = null; strResultTestListCntID = string.Empty; } public void InitVRFYStatus() { iLastQueryTLStepVer = int.MinValue; bSuccessQueryVRFY = false; getLatestStepVer = null; geyLatestTestListInfo = null; dsLatestVRFYRel = null; dsLongTermLatestVRFYRel = null; } public ConnectInfoStore() { //ClientConnectSocket = new Socket(SocketType.Stream, ProtocolType.Tcp); //ClientConnectSocket = null; ClientConnectState = false; m_ucSendCommandToken = 0x0; m_ucRecvCommandToken = 0x0; m_ucSendStreamToken = 0x0; m_ucRecvStreamToken = 0x0; m_iSendCommandCnt = 0; m_iRecvCommandCnt = 0; m_iSendStreamCnt = 0; m_iRecvStreamCnt = 0; m_iSendCommandQueueSize = 0; m_iRecvCommandQueueSize = 0; m_iSendStreamQueueSize = 0; m_iRecvStreamQueueSize = 0; lstRecvFileBytes = new List>(); nFileRecvPos = 0; nFileRecvEndPos = 0; strRecvFileName = string.Empty; strRecvFileExtension = string.Empty; // stCommandProcessTime = new Stopwatch(); stCommandProcessTime.Start(); lCommandTime = 0; stStreamProcessTime = new Stopwatch(); stStreamProcessTime.Start(); lStreamTime = 0; stCheckTime = new Stopwatch(); stCheckTime.Start(); stStreamCheckTime = new Stopwatch(); stStreamCheckTime.Start(); // bUseHostInfo = false; bHostLoginState = false; strConnectHostID = ""; strConnectSection = ""; strCommandEndPointInfo = ""; strStreamEndPointInfo = ""; // iLastQueryTLStepVer = int.MinValue; bSuccessQueryVRFY = false; getLatestStepVer = null; geyLatestTestListInfo = null; dsLatestVRFYRel = null; dsLongTermLatestVRFYRel = null; strResultTestListCntID = string.Empty; } } private void barCheckItemShowCpLogTime_CheckedChanged(object sender, ItemClickEventArgs e) { bShowCpLogProcessTime = barCheckItemShowCpLogTime.Checked; } private void barButtonItemConsole_ItemClick(object sender, ItemClickEventArgs e) { Console.Clear(); } private void barToggleSwitchItemMapLog_CheckedChanged(object sender, ItemClickEventArgs e) { bUseMapLogProcess = barToggleSwitchItemMapLog.Checked; } private void buttonMapLogClear_Click(object sender, EventArgs e) { if (MappedLogQueueData.IsEmpty == false) MappedLogQueueData = new ConcurrentQueue>(); } } }