415 lines
14 KiB
C#
415 lines
14 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.Sockets;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using SystemX.Common;
|
|
using SystemX.Common.Archive;
|
|
using SystemX.Common.Serialization;
|
|
using SystemX.Net.BaseProtocol;
|
|
using SystemX.Net.Comm;
|
|
using SystemX.Net.XAdaptor.PC.O2Sensor.NgCode;
|
|
using SystemX.Net.Schedule;
|
|
using SystemX.Net.XAdaptor;
|
|
using static SystemX.Net.Platform.Common.Util.LogMessage;
|
|
using WTimer = System.Windows.Forms.Timer;
|
|
|
|
namespace SystemX.Net.XAdaptor.PC
|
|
{
|
|
public partial class XAdaptorPC
|
|
{
|
|
private bool QueryTestListCheckProcess(byte[] ucGetDatas)
|
|
{
|
|
bool bSetResult = false;
|
|
|
|
try
|
|
{
|
|
DataSet QueryTestList = null;
|
|
QueryTestList = XDataArchive.DecompressByteToDataset(ucGetDatas);
|
|
|
|
(mgrPRODTestList as TProdTestListInfo).SetTestListDataSetCopy(QueryTestList);
|
|
}
|
|
catch
|
|
{
|
|
bSetResult = false;
|
|
}
|
|
|
|
finally
|
|
{
|
|
;//
|
|
}
|
|
|
|
return bSetResult;
|
|
}
|
|
|
|
private bool QueryTestListProcess(byte[] ucGetDatas, string strGetTestListCntID)
|
|
{
|
|
bool bSetResult = false;
|
|
|
|
try
|
|
{
|
|
DataSet QueryTestList = null;
|
|
QueryTestList = XDataArchive.DecompressByteToDataset(ucGetDatas);
|
|
|
|
(mgrPRODTestList as TProdTestListInfo).SetTestListDataSetCopy(QueryTestList);
|
|
(mgrPRODTestList as TProdTestListInfo).SetTestListDataSet();
|
|
|
|
if (XCommons.isHasRow(mgrPRODTestList.getTestListDataSet()))
|
|
{
|
|
if (mgrPRODTestList.getTestListDataSet().Tables[0].Columns.Contains("TestListData"))
|
|
{
|
|
int iCol1 = mgrPRODTestList.getTestListDataSet().Tables[0].Columns.IndexOf("TestListData");
|
|
mgrPRODTestList.getTestListDataSet().Tables[0].Columns[iCol1].ColumnMapping = MappingType.Hidden;
|
|
}
|
|
if (mgrPRODTestList.getTestListDataSet().Tables[0].Columns.Contains("FileName"))
|
|
{
|
|
int iCol2 = mgrPRODTestList.getTestListDataSet().Tables[0].Columns.IndexOf("FileName");
|
|
}
|
|
|
|
if(string.IsNullOrEmpty(strGetTestListCntID) == false)
|
|
(mgrPRODTestList as TProdTestListInfo).SetTestListCntID(strGetTestListCntID);
|
|
|
|
bSetResult = true;
|
|
}
|
|
|
|
base.ServerTestListLoadState = true;
|
|
|
|
//QueryCallEvent?.BeginInvoke(mgrPRODTestList.getTestListDataSet(), new ResultEventArgs(bSetResult), null, null);
|
|
OnBeginQueryCall(mgrPRODTestList.getTestListDataSet(), new ResultEventArgs(bSetResult));
|
|
}
|
|
catch
|
|
{
|
|
bSetResult = false;
|
|
}
|
|
|
|
finally
|
|
{
|
|
;//
|
|
}
|
|
|
|
return bSetResult;
|
|
}
|
|
|
|
private void ClearCommandClientInstance()
|
|
{
|
|
if (FlowCommandControl != null)
|
|
{
|
|
FlowCommandControl.Dispose();
|
|
FlowCommandControl = null;
|
|
}
|
|
|
|
if (ClientCommandSock != null)
|
|
{
|
|
ClientCommandSock.Comm_Connect_Event -= ClientCommandConnectEvent;
|
|
ClientCommandSock.Socket_Error_Event -= ClientCommandErrorEvent;
|
|
|
|
ClientCommandSock.Comm_Send_Event -= SendCommandEvent;
|
|
ClientCommandSock.Comm_Recv_Event -= RecvCommandEvent;
|
|
|
|
ClientCommandSock.Dispose();
|
|
ClientCommandSock = null;
|
|
}
|
|
}
|
|
|
|
private void ClearStreamClientInstance()
|
|
{
|
|
if (FlowStreamControl != null)
|
|
{
|
|
FlowStreamControl.Dispose();
|
|
FlowStreamControl = null;
|
|
}
|
|
|
|
if (ClientStreamSock != null)
|
|
{
|
|
ClientStreamSock.Comm_Connect_Event -= ClientStreamConnectEvent;
|
|
ClientStreamSock.Socket_Error_Event -= ClientStreamErrorEvent;
|
|
|
|
ClientStreamSock.Comm_Send_Event -= SendStreamEvent;
|
|
ClientStreamSock.Comm_Recv_Event -= RecvStreamEvent;
|
|
|
|
ClientStreamSock.Dispose();
|
|
ClientStreamSock = null;
|
|
}
|
|
}
|
|
|
|
private IPAddress GetConnectIPAddress()
|
|
{
|
|
IPAddress setIP = null;
|
|
|
|
if (LoadInfo.LOOP_BACK)
|
|
setIP = IPAddress.Loopback;
|
|
else
|
|
{
|
|
if (REF_CONNECT_IP.Length > 0)
|
|
setIP = IPAddress.Parse(REF_CONNECT_IP);
|
|
else
|
|
setIP = IPAddress.Parse(LoadInfo.CONNECT_IP);
|
|
}
|
|
|
|
return setIP;
|
|
}
|
|
|
|
private int GetDistributionPort(Random r, int nStartPort)
|
|
{
|
|
//최대값 미만 + 1
|
|
r.Next();
|
|
return r.Next(nStartPort, nStartPort + 10);
|
|
}
|
|
|
|
private bool ClientCommandSet(SOCKET_TYPE SOCK_TYPE, bool bUseRandDistribution = true, int nSetPortNumber = int.MaxValue)
|
|
{
|
|
thisConnInfo.bHostLoginState = true;
|
|
|
|
bool bClientStartState = true;
|
|
//
|
|
int nPortNumber = int.MaxValue;
|
|
|
|
if (nSetPortNumber == int.MaxValue)
|
|
{
|
|
nPortNumber = LoadInfo.COMMAND_PORT;
|
|
}
|
|
else
|
|
nPortNumber = nSetPortNumber;
|
|
|
|
if (bUseRandDistribution)
|
|
{
|
|
Random r = new Random(Guid.NewGuid().GetHashCode());
|
|
|
|
nPortNumber = GetDistributionPort(r, nPortNumber);
|
|
|
|
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") +
|
|
@"Get Distribution Port Number " + nPortNumber.ToString("D4") + " [SystemX.Net.XAdaptor.PC : ClientCommandSet]\r\n",
|
|
ConsoleColor.Yellow, LogMessageLevel.DEBUG);
|
|
}
|
|
|
|
try
|
|
{
|
|
if (ClientReadyEndPoint == false)
|
|
{
|
|
/*if (LoadInfo.LOOP_BACK)
|
|
ClientCommandEP = new IPEndPoint(IPAddress.Loopback, nPortNumber);
|
|
else
|
|
ClientCommandEP = new IPEndPoint(IPAddress.Parse(LoadInfo.CONNECT_IP), nPortNumber);*/
|
|
|
|
if (LoadInfo.LOOP_BACK)
|
|
ClientCommandEP = new IPEndPoint(GetConnectIPAddress(), nPortNumber);
|
|
else
|
|
ClientCommandEP = new IPEndPoint(GetConnectIPAddress(), nPortNumber);
|
|
}
|
|
|
|
ClearCommandClientInstance();
|
|
|
|
//COMMAND
|
|
#if FALSE
|
|
ClientCommandSock = new AsyncComClientSocket(ClientCommandEP);
|
|
#else
|
|
ClientCommandSock = new AsyncClientSocket(SOCK_TYPE, ClientCommandEP);
|
|
#endif
|
|
|
|
ClientCommandSock.Comm_Connect_Event += ClientCommandConnectEvent;
|
|
ClientCommandSock.Socket_Error_Event += ClientCommandErrorEvent;
|
|
|
|
ClientCommandSock.Comm_Send_Event += SendCommandEvent;
|
|
ClientCommandSock.Comm_Recv_Event += RecvCommandEvent;
|
|
|
|
FlowCommandControl = new PacketFlowControl(FlowControlType.Commnad, ClientCommandSock);
|
|
|
|
ClientCommandSock.Connect();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
bClientStartState = false;
|
|
|
|
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"Client Command connect set failed.[SystemX.Net.XAdaptor.PC.XPCAdaptor : XPCAdaptor.ClientCommandSet()]\r\n" + ex.Message, ConsoleColor.Red, LogMessageLevel.DEBUG);
|
|
}
|
|
|
|
return bClientStartState;
|
|
}
|
|
|
|
private bool ClientStreamSet(SOCKET_TYPE SOCK_TYPE, bool bUseRandDistribution = true, int nSetPortNumber = int.MaxValue)
|
|
{
|
|
bool bClientStartState = true;
|
|
|
|
int nPortNumber = int.MaxValue;
|
|
|
|
if (nSetPortNumber == int.MaxValue)
|
|
nPortNumber = LoadInfo.STREAM_PORT;
|
|
else
|
|
nPortNumber = nSetPortNumber;
|
|
|
|
if (bUseRandDistribution)
|
|
{
|
|
Random r = new Random(Guid.NewGuid().GetHashCode());
|
|
|
|
nPortNumber = GetDistributionPort(r, nPortNumber);
|
|
}
|
|
|
|
try
|
|
{
|
|
if (ClientReadyEndPoint == false)
|
|
{
|
|
if (LoadInfo.LOOP_BACK)
|
|
ClientStreamEP = new IPEndPoint(GetConnectIPAddress(), nPortNumber);
|
|
else
|
|
ClientStreamEP = new IPEndPoint(GetConnectIPAddress(), nPortNumber);
|
|
|
|
/*if (LoadInfo.LOOP_BACK)
|
|
ClientStreamEP = new IPEndPoint(IPAddress.Loopback, nPortNumber);
|
|
else
|
|
ClientStreamEP = new IPEndPoint(IPAddress.Parse(LoadInfo.CONNECT_IP), nPortNumber);*/
|
|
}
|
|
|
|
ClearStreamClientInstance();
|
|
|
|
//STREAM
|
|
#if FALSE
|
|
ClientStreamSock = new AsyncComClientSocket(ClientStreamEP);
|
|
#else
|
|
ClientStreamSock = new AsyncClientSocket(SOCK_TYPE, ClientStreamEP);
|
|
#endif
|
|
|
|
ClientStreamSock.Comm_Connect_Event += ClientStreamConnectEvent;
|
|
ClientStreamSock.Socket_Error_Event += ClientStreamErrorEvent;
|
|
|
|
ClientStreamSock.Comm_Send_Event += SendStreamEvent;
|
|
ClientStreamSock.Comm_Recv_Event += RecvStreamEvent;
|
|
|
|
FlowStreamControl = new PacketFlowControl(FlowControlType.Stream, ClientStreamSock);
|
|
|
|
ClientStreamSock.Connect();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
bClientStartState = false;
|
|
|
|
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"Client Stream connect set failed.[SystemX.Net.XAdaptor.PC.XPCAdaptor : XPCAdaptor.ClientStreamSet()]\r\n" + ex.Message, ConsoleColor.Red, LogMessageLevel.DEBUG);
|
|
}
|
|
|
|
return bClientStartState;
|
|
}
|
|
|
|
private void ClearCommonVar()
|
|
{
|
|
SubscribeConnectInfo.bSessionStarted = false;
|
|
}
|
|
|
|
private void ClearCommandWatchTask()
|
|
{
|
|
CommandCTS.Cancel();
|
|
|
|
if (taskRecvCommandProcess != null)
|
|
{
|
|
taskRecvCommandProcess.ContinueWith(t =>
|
|
{
|
|
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") +
|
|
@"taskRecvCommandProcess END. [SystemX.Net.XAdaptor.PC : XPCAdaptor.ClearWatchTask - Command]",
|
|
ConsoleColor.White,
|
|
LogMessageLevel.DEBUG);
|
|
});
|
|
|
|
m_bTaskCommandBlock = true;
|
|
|
|
taskRecvCommandProcess.ConfigureAwait(false);
|
|
//taskRecvCommandProcess.Wait();
|
|
|
|
taskRecvCommandProcess = null;
|
|
}
|
|
}
|
|
|
|
private void ClearStreamWatchTask()
|
|
{
|
|
StreamCTS.Cancel();
|
|
|
|
if (taskRecvStreamProcess != null)
|
|
{
|
|
taskRecvStreamProcess.ContinueWith(t =>
|
|
{
|
|
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") +
|
|
@"taskRecvStreamProcess END. [SystemX.Net.XAdaptor.PC : XPCAdaptor.ClearWatchTask - Stream]",
|
|
ConsoleColor.White,
|
|
LogMessageLevel.DEBUG);
|
|
});
|
|
|
|
m_bTaskStreamBlock = true;
|
|
|
|
taskRecvStreamProcess.ConfigureAwait(false);
|
|
//taskRecvStreamProcess.Wait();
|
|
|
|
taskRecvStreamProcess = null;
|
|
}
|
|
//
|
|
SubCTS.Cancel();
|
|
|
|
if (taskSubProcess != null)
|
|
{
|
|
taskSubProcess.ContinueWith(t =>
|
|
{
|
|
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") +
|
|
@"taskSubProcess END. [SystemX.Net.XAdaptor.PC : XPCAdaptor.ClearWatchTask - Stream(Sub)]",
|
|
ConsoleColor.White,
|
|
LogMessageLevel.DEBUG);
|
|
});
|
|
|
|
m_bTaskSubBlock = true;
|
|
|
|
taskSubProcess.ConfigureAwait(false);
|
|
//taskSubProcess.Wait();
|
|
|
|
taskSubProcess = null;
|
|
}
|
|
}
|
|
|
|
private void SetCommandWatchTask()
|
|
{
|
|
if (StateAdaptorConnect == false)
|
|
return;
|
|
|
|
ClearCommandWatchTask();
|
|
|
|
taskRecvCommandProcess = null;
|
|
m_bTaskCommandBlock = false;
|
|
|
|
CommandCTS = new CancellationTokenSource();
|
|
CommandCT = CommandCTS.Token;
|
|
|
|
taskRecvCommandProcess = new Task(new Action(WatchRecvCommandQueue), CommandCT);
|
|
taskRecvCommandProcess.Start();
|
|
}
|
|
|
|
private void SetStreamWatchTask()
|
|
{
|
|
if (StateAdaptorConnect == false)
|
|
return;
|
|
|
|
ClearStreamWatchTask();
|
|
|
|
taskRecvStreamProcess = null;
|
|
m_bTaskStreamBlock = false;
|
|
|
|
StreamCTS = new CancellationTokenSource();
|
|
StreamCT = StreamCTS.Token;
|
|
|
|
taskRecvStreamProcess = new Task(new Action(WatchRecvStreamQueue), StreamCT);
|
|
taskRecvStreamProcess.Start();
|
|
//
|
|
taskSubProcess = null;
|
|
m_bTaskSubBlock = false;
|
|
|
|
SubCTS = new CancellationTokenSource();
|
|
SubCT = StreamCTS.Token;
|
|
|
|
taskSubProcess = new Task(new Action(WatchSubProcess), SubCT);
|
|
taskSubProcess.Start();
|
|
}
|
|
}
|
|
}
|
|
|