using DevExpress.Data.Helpers;
using DevExpress.XtraBars;
using DevExpress.XtraBars.Navigation;

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 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 System.Threading.Tasks;

using SystemX.Common.Protocol.SIA;

using static SystemX.Net.Platform.Common.Util.LogMessage;
using System.Threading;
using SystemX.Net.Platform.Common.Util;
using SystemX.Net.Platform.Common.ExtensionMethods;
using SystemX.Net.Middleware.Commons;
using static SystemX.Net.DB.XDBConnManager;

namespace SystemX.Net.MiddlewareUI
{
    public partial class MainForm : DevExpress.XtraBars.FluentDesignSystem.FluentDesignForm
    {
        private void Chktimer_Tick(object sender, EventArgs e)
        {
            Chktimer.Enabled = false;

            if (MIDDLEWARE_START_STATE == false)
            {
                ConsoleUtil.ConsoleVisibleControl();

                //The program is automatically terminated.
                MessageBox.Show("Server information could not be retrieved. Check the console error text.", "Middleware for Line Bridge", MessageBoxButtons.OK, MessageBoxIcon.Error);

                //this.Close();
            }
        }

        private void buttonUserQueryRead_Click(object sender, EventArgs e)
        {
            xCallQuery.Load();
        }


        private void buttonListenReset_Click(object sender, EventArgs e)
        {
            dataGridViewListen.Rows.Clear();

            ListenServerReset();
        }

        private void WritePortSendRecvInfo(int nGetPos, int iRowPos)
        {
            if (thisConnInfo[nGetPos].m_ucSendCommandToken == 0x1)
            {
                if (dataGridViewPort.Rows[iRowPos].Cells[3].Style.BackColor != Color.Yellow)
                    dataGridViewPort.Rows[iRowPos].Cells[3].Style.BackColor = Color.Yellow;
            }
            else if (thisConnInfo[nGetPos].m_ucSendCommandToken == 0x2)
            {
                if (dataGridViewPort.Rows[iRowPos].Cells[3].Style.BackColor != Color.LightYellow)
                    dataGridViewPort.Rows[iRowPos].Cells[3].Style.BackColor = Color.LightYellow;
            }
            //
            if (thisConnInfo[nGetPos].m_ucRecvCommandToken == 0x1)
            {
                if (dataGridViewPort.Rows[iRowPos].Cells[4].Style.BackColor != Color.DeepSkyBlue)
                    dataGridViewPort.Rows[iRowPos].Cells[4].Style.BackColor = Color.DeepSkyBlue;
            }
            else if (thisConnInfo[nGetPos].m_ucRecvCommandToken == 0x2)
            {
                if (dataGridViewPort.Rows[iRowPos].Cells[4].Style.BackColor != Color.LightSkyBlue)
                    dataGridViewPort.Rows[iRowPos].Cells[4].Style.BackColor = Color.LightSkyBlue;
            }
            //
            if (thisConnInfo[nGetPos].m_ucSendStreamToken == 0x1)
            {
                if (dataGridViewPort.Rows[iRowPos].Cells[5].Style.BackColor != Color.Yellow)
                    dataGridViewPort.Rows[iRowPos].Cells[5].Style.BackColor = Color.Yellow;
            }
            else if (thisConnInfo[nGetPos].m_ucSendStreamToken == 0x2)
            {
                if (dataGridViewPort.Rows[iRowPos].Cells[5].Style.BackColor != Color.LightYellow)
                    dataGridViewPort.Rows[iRowPos].Cells[5].Style.BackColor = Color.LightYellow;
            }
            //
            if (thisConnInfo[nGetPos].m_ucRecvStreamToken == 0x1)
            {
                if (dataGridViewPort.Rows[iRowPos].Cells[6].Style.BackColor != Color.DeepSkyBlue)
                    dataGridViewPort.Rows[iRowPos].Cells[6].Style.BackColor = Color.DeepSkyBlue;
            }
            else if (thisConnInfo[nGetPos].m_ucRecvStreamToken == 0x2)
            {
                if (dataGridViewPort.Rows[iRowPos].Cells[6].Style.BackColor != Color.LightSkyBlue)
                    dataGridViewPort.Rows[iRowPos].Cells[6].Style.BackColor = Color.LightSkyBlue;
            }

            dataGridViewPort.Rows[iRowPos].Cells[3].Value = thisConnInfo[nGetPos].m_iSendCommandCnt;
            dataGridViewPort.Rows[iRowPos].Cells[4].Value = thisConnInfo[nGetPos].m_iRecvCommandCnt;
            dataGridViewPort.Rows[iRowPos].Cells[5].Value = thisConnInfo[nGetPos].m_iSendStreamCnt;
            dataGridViewPort.Rows[iRowPos].Cells[6].Value = thisConnInfo[nGetPos].m_iRecvStreamCnt;
        }

        private void PortInfoGridInitialize(int iRowPos)
        {
            /*
            if (strGetText.CompareTo(strSetProcessInfo[nGetPos]) != 0)
                dataGridViewPort.Rows[i].Cells[2].Value = strSetProcessInfo[nGetPos];
            */

            if (dataGridViewPort.Rows[iRowPos].Cells[3].Style.BackColor != Color.White)
                dataGridViewPort.Rows[iRowPos].Cells[3].Style.BackColor = Color.White;
            if (dataGridViewPort.Rows[iRowPos].Cells[4].Style.BackColor != Color.White)
                dataGridViewPort.Rows[iRowPos].Cells[4].Style.BackColor = Color.White;
            if (dataGridViewPort.Rows[iRowPos].Cells[5].Style.BackColor != Color.White)
                dataGridViewPort.Rows[iRowPos].Cells[5].Style.BackColor = Color.White;
            if (dataGridViewPort.Rows[iRowPos].Cells[6].Style.BackColor != Color.White)
                dataGridViewPort.Rows[iRowPos].Cells[6].Style.BackColor = Color.White;

            if (dataGridViewPort.Rows[iRowPos].Cells[3].Value.ToString().Length > 0)
                dataGridViewPort.Rows[iRowPos].Cells[3].Value = string.Empty;
            if (dataGridViewPort.Rows[iRowPos].Cells[4].Value.ToString().Length > 0)
                dataGridViewPort.Rows[iRowPos].Cells[4].Value = string.Empty;
            if (dataGridViewPort.Rows[iRowPos].Cells[5].Value.ToString().Length > 0)
                dataGridViewPort.Rows[iRowPos].Cells[5].Value = string.Empty;
            if (dataGridViewPort.Rows[iRowPos].Cells[6].Value.ToString().Length > 0)
                dataGridViewPort.Rows[iRowPos].Cells[6].Value = string.Empty;
        }

        private void UItimer_Tick(object sender, EventArgs e)
        {
            if (m_bTimerLock[(int)TIMER_LOCK.UI_TIMER] == false)
            {
                m_bTimerLock[(int)TIMER_LOCK.UI_TIMER] = true;

                if (TimeControl.SyncServerTimeResult)
                {
                    if (barStaticItemSyncTime.Visibility == BarItemVisibility.Never)
                    {
                        barStaticItemSyncTime.Caption = "[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "] Server time synchronization progressed successfully.";
                        barStaticItemSyncTime.Visibility = BarItemVisibility.Always;
                    }
                }
                else
                {
                    if (barStaticItemSyncTime.Visibility == BarItemVisibility.Always)
                        barStaticItemSyncTime.Visibility = BarItemVisibility.Never;
                }
                //
                if (progressBarProgram.Value + 20 <= 100)
                    progressBarProgram.Value += 20;
                else
                    progressBarProgram.Value = 0;

                //Disconnect Listen Server Reset
                for (int i = 0; i < PORT_DISTRIBUTION_NUM; i++)
                {
                    if (ConnPool[i].bRequiredPortReset == false)
                    {
                        //Listen Server Auto Reset 5 Minute
                        if (ConnPool[i].stPortTimer.ElapsedMilliseconds >= 300000)
                            ConnPool[i].bRequiredPortReset = true;
                        else
                            continue;
                    }

                    if (ConnPool[i].bRequiredPortResetReady == false)
                    {
                        ListenServerOnState[i] = false;

                        ClearListenElement(i);

                        ClearListenServerInstance(i);

                        ConnPool[i].bRequiredPortResetReady = true;
                    }
                    else
                    {
                        StartListenServer(i, ConnPool[i].nUseCommandPort, ConnPool[i].nUseStreamPort);

                        DisplayListenElement(i);

                        ListenServerOnState[i] = true;

                        ConnPool[i].PortTImerRestart();

                        ConnPool[i].bRequiredPortResetReady = false;
                        ConnPool[i].bRequiredPortReset = false;
                    }

                    /*
                    ListenServerOnState[i] = false;

                    ClearListenElement(i);

                    ClearListenServerInstance(i);

                    StartListenServer(i, ConnPool[i].nUseCommandPort, ConnPool[i].nUseStreamPort);

                    DisplayListenElement(i);

                    ListenServerOnState[i] = true;

                    ConnPool[i].bRequiredPortReset = false;
                    */
                }

                //Listen
                dataGridViewListen.SuspendLayout();
                for (int i = 0; i < dataGridViewListen.RowCount; i++)
                {
                    if (dataGridViewListen.Rows[i].Cells[0].Value == null)
                        continue;

                    string strSetText = string.Empty;

                    string strGetNumText = dataGridViewListen.Rows[i].Cells[0].Value.ToString();
                    string strGetText = dataGridViewListen.Rows[i].Cells[1].Value.ToString();

                    int nGetPos = int.MaxValue;

                    if (int.TryParse(strGetNumText, out nGetPos) == false)
                        continue;

                    if (thisConnInfo[nGetPos].ClientConnectState)
                        strSetText = "CONNECT - Assigning port";
                    else
                        strSetText = "WAIT";

                    if (strGetText.CompareTo(strSetText) != 0)
                        dataGridViewListen.Rows[i].Cells[1].Value = strSetText;
                }
                dataGridViewListen.ResumeLayout();

                //Distribution
                dataGridViewPort.SuspendLayout();
                for (int i = 0; i < dataGridViewPort.RowCount; i++)
                {
                    if (dataGridViewPort.Rows[i].Cells[0].Value == null)
                        continue;

                    string strGetText = dataGridViewPort.Rows[i].Cells[2].Value.ToString();
                    string strGetName = dataGridViewPort.Rows[i].Cells[0].Value.ToString();
                    string strConnState = dataGridViewPort.Rows[i].Cells[1].Value.ToString();
                    int nGetPos = Convert.ToInt32(strGetName);

                    if (thisConnInfo[nGetPos].ClientConnectState && thisConnInfo[nGetPos].StreamConnectState)
                    {
                        if (thisConnInfo[nGetPos].bHostLoginState)
                        {
                            string strSetText = string.Empty;

                            strSetText = strSetProcessInfo[nGetPos] + ("@" + thisConnInfo[nGetPos].strConnectHostID +
                           ":" + thisConnInfo[nGetPos].strConnectSection +
                           "@" + thisConnInfo[nGetPos].strCommandEndPointInfo);

                            if (strGetText.CompareTo(strSetText) != 0)
                                dataGridViewPort.Rows[i].Cells[2].Value = strSetText;
                            if (strConnState.CompareTo("CONNECT") != 0)
                                dataGridViewPort.Rows[i].Cells[1].Value = "CONNECT";
                        }

                        WritePortSendRecvInfo(nGetPos, i);
                    }
                    else
                    {
                        PortInfoGridInitialize(i);

                        if (ConnPool[nGetPos].bUseState == false)
                        {
                            if (strGetText.CompareTo("-") != 0)
                                dataGridViewPort.Rows[i].Cells[2].Value = "-";
                            if (strConnState.CompareTo("-") != 0)
                                dataGridViewPort.Rows[i].Cells[1].Value = "-";
                        }
                    }
                }
                dataGridViewListen.ResumeLayout();

                /*
                if (m_iLastGetIndex != -1)
                    DisplayConnectInfo(m_iLastGetIndex);
                */

                //DisplayConnectInfoDetect();

                DriveInfo df = new DriveInfo(@LoadInfo.DISK_MONITOR_POS1);
                string strTip = string.Empty;
                int nPositionValue = int.MaxValue;

                if (df.IsReady)
                {
                    strTip = "Drive Name " + df.Name + " Available space " + ((double)df.AvailableFreeSpace / (double)df.TotalSize * 100).ToString("F2") + "%";

                    nPositionValue = (int)((double)df.AvailableFreeSpace / (double)df.TotalSize * 100);

                    if (progressBarControlC.ToolTip.CompareTo(strTip) != 0)
                        progressBarControlC.ToolTip = strTip;

                    if (progressBarControlC.Position != nPositionValue)
                        progressBarControlC.Position = (int)((double)df.AvailableFreeSpace / (double)df.TotalSize * 100);
                }
                df = new DriveInfo(@LoadInfo.DISK_MONITOR_POS2);
                if (df.IsReady)
                {
                    strTip = "Drive Name " + df.Name + " Available space " + ((double)df.AvailableFreeSpace / (double)df.TotalSize * 100).ToString("F2") + "%";

                    nPositionValue = (int)((double)df.AvailableFreeSpace / (double)df.TotalSize * 100);

                    if (progressBarControlD.ToolTip.CompareTo(strTip) != 0)
                        progressBarControlD.ToolTip = strTip;

                    if (progressBarControlC.Position != nPositionValue)
                        progressBarControlD.Position = (int)((double)df.AvailableFreeSpace / (double)df.TotalSize * 100);
                }

                m_bTimerLock[(int)TIMER_LOCK.UI_TIMER] = false;
            }
        }

        private string MakeInfoConnectProcessText(int nPos, int nCommandPort, int nStreamPort)
        {
            string strSetProcessInfo = nPos.ToString("D2") + ":" +
                            nCommandPort.ToString("D4") + ":" +
                            nStreamPort.ToString("D4");

            return strSetProcessInfo;
        }

        private void DisplayListenElement()
        {
            dataGridViewListen.SuspendLayout();
            for (int i = 0; i < PORT_DISTRIBUTION_NUM; i++)
            {
                dataGridViewListen.Rows.Add();

                strSetProcessInfo[i] = MakeInfoConnectProcessText(i, LoadInfo.nListenCommandPort[i], LoadInfo.nListenStreamPort[i]);

                dataGridViewListen.Rows[i].Cells[0].Value = i.ToString();
                dataGridViewListen.Rows[i].Cells[1].Value = "WAIT";
                dataGridViewListen.Rows[i].Cells[2].Value = strSetProcessInfo[i];
            }
            dataGridViewListen.ResumeLayout();
        }

        private void DisplayListenElement(int nPos)
        {
            dataGridViewListen.SuspendLayout();
            strSetProcessInfo[nPos] = MakeInfoConnectProcessText(nPos, LoadInfo.nListenCommandPort[nPos], LoadInfo.nListenStreamPort[nPos]);

            dataGridViewListen.Rows[nPos].Cells[0].Value = nPos.ToString();
            dataGridViewListen.Rows[nPos].Cells[1].Value = "WAIT";
            dataGridViewListen.Rows[nPos].Cells[2].Value = strSetProcessInfo[nPos];
            dataGridViewListen.ResumeLayout();
        }

        private void ClearListenElement(int nPos)
        {
            dataGridViewListen.SuspendLayout();
            strSetProcessInfo[nPos] = string.Empty;

            dataGridViewListen.Rows[nPos].Cells[0].Value = "-";
            dataGridViewListen.Rows[nPos].Cells[1].Value = "-";
            dataGridViewListen.Rows[nPos].Cells[2].Value = strSetProcessInfo[nPos];

            dataGridViewListen.ResumeLayout();
        }

        private void DisplayPortElement()
        {
            dataGridViewPort.SuspendLayout();
            for (int i = PORT_DISTRIBUTION_NUM; i < ALL_MANAGE_NUM; i++)
            {
                dataGridViewPort.Rows.Add();

                dataGridViewPort.Rows[i - PORT_DISTRIBUTION_NUM].Cells[0].Value = i.ToString();
                dataGridViewPort.Rows[i - PORT_DISTRIBUTION_NUM].Cells[1].Value = "-";
                dataGridViewPort.Rows[i - PORT_DISTRIBUTION_NUM].Cells[2].Value = "-";
                dataGridViewPort.Rows[i - PORT_DISTRIBUTION_NUM].Cells[3].Value = string.Empty;
                dataGridViewPort.Rows[i - PORT_DISTRIBUTION_NUM].Cells[4].Value = string.Empty;
                dataGridViewPort.Rows[i - PORT_DISTRIBUTION_NUM].Cells[5].Value = string.Empty;
                dataGridViewPort.Rows[i - PORT_DISTRIBUTION_NUM].Cells[6].Value = string.Empty;
            }
            dataGridViewPort.ResumeLayout();
        }

        private void MakeElement(int nPos, int nCommandPort, int nStreamPort)
        {
            strSetProcessInfo[nPos] = MakeInfoConnectProcessText(nPos, nCommandPort, nStreamPort);

            dataGridViewPort.Rows[nPos - PORT_DISTRIBUTION_NUM].Cells[1].Value = "WAIT";
            dataGridViewPort.Rows[nPos - PORT_DISTRIBUTION_NUM].Cells[2].Value = strSetProcessInfo[nPos];
        }

        private void AddElement(int nPos, int nCommandPort, int nStreamPort)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new MethodInvoker(delegate ()
                {
                    MakeElement(nPos, nCommandPort, nStreamPort);
                }));
            }
            else
                MakeElement(nPos, nCommandPort, nStreamPort);
        }

        private void DeleteElement(int nPos)
        {
            try
            {
                try
                {
                    ;//
                }
                catch { 
                    throw new Exception(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"RemoveElement-DeleteElement " + nPos.ToString("D3") + " [SystemX.Net.MiddlewareUI : MainForm.DeleteElement]\r\n");
                }
            }
            catch (Exception e) {
                MessageOutput.ConsoleWrite(e.Message, ConsoleColor.Red, LogMessageLevel.FATAL);
            }
        }

        private void RemoveElement(int nPos)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new MethodInvoker(delegate ()
                {
                    DeleteElement(nPos);
                }));
            }
            else
                DeleteElement(nPos);
        }

        private void DisplayConnectInfo(int iGetIndex)
        {
            if (thisConnInfo[iGetIndex].ClientConnectState &&
                thisConnInfo[iGetIndex].StreamConnectState)
            {
                /*
                string strRemoteInfo = string.Empty, strLocalInfo = string.Empty;

                try
                {
                    if (thisConnInfo[iGetIndex].ClientConnectSocket != null)
                    {
                        strLocalInfo = thisConnInfo[iGetIndex]?.ClientConnectSocket?.LocalEndPoint?.ToString();
                        strRemoteInfo = thisConnInfo[iGetIndex]?.ClientConnectSocket?.RemoteEndPoint?.ToString();
                    }
                }
                catch (Exception e)
                {
                    MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"DisplayConnectInfo exception state detect[1]. [SystemX.Net.MiddlewareUI : MainForm.DisplayConnectInfo]\r\n" + e.Message, ConsoleColor.Red, LogMessageLevel.FATAL);

                    m_iLastGetIndex = -1;

                    strRemoteInfo = "";
                    strLocalInfo = "";
                }
                finally
                {
                    if (strRemoteInfo.IsNullOrEmpty())
                        strRemoteInfo = "";
                    if (strLocalInfo.IsNullOrEmpty())
                        strLocalInfo = "";
                }
                */
                //
                try
                {
                    /* MODIFY
                    dataGridViewState.Rows[0].Cells[0].Value = strLocalInfo;
                    dataGridViewState.Rows[0].Cells[1].Value = "-"; 
                    dataGridViewState.Rows[0].Cells[2].Value = "ON";
                    dataGridViewState.Rows[0].Cells[3].Value = strRemoteInfo;

                    dataGridViewState.Rows[0].Cells[4].Value = thisConnInfo[iGetIndex].m_iSendCommandCnt.ToString("D6") + "," + thisConnInfo[iGetIndex].m_iSendStreamCnt.ToString("D6");
                    dataGridViewState.Rows[0].Cells[5].Value = thisConnInfo[iGetIndex].m_iRecvCommandCnt.ToString("D6") + "," + thisConnInfo[iGetIndex].m_iRecvStreamCnt.ToString("D6");

                    dataGridViewState.Rows[0].Cells[6].Value = thisConnInfo[iGetIndex].m_iSendCommandQueueSize.ToString("D6") + "," + thisConnInfo[iGetIndex].m_iSendStreamQueueSize.ToString("D6");
                    dataGridViewState.Rows[0].Cells[7].Value = thisConnInfo[iGetIndex].m_iRecvCommandQueueSize.ToString("D6") + "," + thisConnInfo[iGetIndex].m_iRecvStreamQueueSize.ToString("D6");

                    dataGridViewTime.Rows[0].Cells[0].Value = thisConnInfo[iGetIndex].lCommandTime.ToString();
                    dataGridViewTime.Rows[0].Cells[1].Value = thisConnInfo[iGetIndex].lStreamTime.ToString();

                    dataGridViewTime.Rows[0].Cells[2].Value = ServerCommandSock[iGetIndex].ServerTokenPosCheck(0);
                    dataGridViewTime.Rows[0].Cells[3].Value = ServerStreamSock[iGetIndex].ServerTokenPosCheck(1);
                    */
                }
                catch (Exception e) {
                    MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"DisplayConnectInfo exception state detect[2]. [SystemX.Net.MiddlewareUI : MainForm.DisplayConnectInfo]\r\n" + e.Message, ConsoleColor.Red, LogMessageLevel.FATAL);

                    m_iLastGetIndex = -1;
                }
            }
            else
            {
                /* MODIFY
                dataGridViewState.Rows[0].Cells[0].Value = string.Empty;
                dataGridViewState.Rows[0].Cells[1].Value = "-"; 
                dataGridViewState.Rows[0].Cells[2].Value = "OFF";
                dataGridViewState.Rows[0].Cells[3].Value = string.Empty;

                dataGridViewState.Rows[0].Cells[4].Value = string.Empty;
                dataGridViewState.Rows[0].Cells[5].Value = string.Empty;

                dataGridViewState.Rows[0].Cells[6].Value = string.Empty;
                dataGridViewState.Rows[0].Cells[7].Value = string.Empty;

                try
                {
                    if (ServerCommandSock[iGetIndex] != null)
                        dataGridViewTime.Rows[0].Cells[2].Value = ServerCommandSock[iGetIndex].ServerTokenPosCheck(0);
                    if (ServerStreamSock[iGetIndex] != null)
                        dataGridViewTime.Rows[0].Cells[3].Value = ServerStreamSock[iGetIndex].ServerTokenPosCheck(1);
                }
                catch (Exception e) {
                    MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"Server socket status check failed. [SystemX.Net.MiddlewareUI : MainForm.DisplayConnectInfo]\r\n" + e.Message, ConsoleColor.Red, LogMessageLevel.FATAL);

                    m_iLastGetIndex = -1;
                }
                */
            }
        }

        private void DisplayConnectInfoDetect()
        {
            for (int i = PORT_DISTRIBUTION_NUM; i < ALL_MANAGE_NUM; i++)
            {
                if (thisConnInfo[i].ClientConnectState == false)
                    continue;

                //
                if (thisConnInfo[i].ConnectStreamCheck)
                {
                    if (thisConnInfo[i].stStreamCheckTime.ElapsedMilliseconds >= 20000)
                    {
                        thisConnInfo[i].stStreamCheckTime.Restart();
                        thisConnInfo[i].ConnectStreamCheck = false;

                        if (thisConnInfo[i].StreamConnectState == false)
                        {
                            ResetStreamConnectSetCheck(i);
                        }
                    }
                }
                //
                /*
                string strRemoteInfo = string.Empty, strLocalInfo = string.Empty;

                bool bGetSocketInfo = true;
                try
                {
                    if (thisConnInfo[i].ClientConnectSocket != null)
                    {
                        strLocalInfo = thisConnInfo[i]?.ClientConnectSocket?.LocalEndPoint?.ToString();
                        strRemoteInfo = thisConnInfo[i]?.ClientConnectSocket?.RemoteEndPoint?.ToString();
                    }
                }
                catch (Exception e)
                {
                    ServerStreamSock[i].ServerSocketUnknownError(false);
                    ServerCommandSock[i].ServerSocketUnknownError(false);

                    MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @" " + i.ToString("D2") + " ConnectInfo exception state detect. - Socket clear[1]. [SystemX.Net.MiddlewareUI : MainForm.DisplayConnectInfoDetect]\r\n" + e.Message, ConsoleColor.Red, LogMessageLevel.FATAL);

                    strRemoteInfo = "";
                    strLocalInfo = "";

                    bGetSocketInfo = false;
                }
                finally
                {
                    if (strRemoteInfo.IsNullOrEmpty())
                        strRemoteInfo = "";
                    if (strLocalInfo.IsNullOrEmpty())
                        strLocalInfo = "";
                }
                */

                /*
                if (bGetSocketInfo == false)
                    continue;
                //
                try
                {
                    ;//
                }
                catch (Exception e)
                {
                    MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @" " + i.ToString("D2") + " ConnectInfo exception state detect. - Socket clear[2]. [SystemX.Net.MiddlewareUI : MainForm.DisplayConnectInfoDetect]\r\n" + e.Message, ConsoleColor.Red, LogMessageLevel.FATAL);

                    ResetConnectSetCheck(i);
                }
                */
            }
        }

        private void GridRowCellClick(object sender, EventArgs e)
        {
            string[] strGetEleInfo = ((AccordionControlElement)sender).Text.Split(':');

            if (strGetEleInfo.Count() > 0)
            {
                int iGetIndex = Convert.ToInt32(strGetEleInfo[0]);

                m_iLastGetIndex = iGetIndex;

                DisplayConnectInfo(iGetIndex);

                if (thisConnInfo[iGetIndex].stCheckTime.ElapsedMilliseconds <= 400)
                {
                    string strTextMsg = ((AccordionControlElement)sender).Text;
                    if (MessageBox.Show("You want to [" + strTextMsg + "] server point initialize?", "Middleware for Line Bridge - Middleware UI", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        try
                        {
                            ResetConnectSetCheck(iGetIndex);
                        }
                        catch (Exception ex)
                        {
                            MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"[" + strTextMsg + "] initialize failed. [SystemX.Net.MiddlewareUI : MainForm.accordionControlElement_Click]\r\n" + ex.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG);
                        }
                    }
                }
                thisConnInfo[iGetIndex].stCheckTime.Restart();
            }
        }
    }
}
