Files
CPXV2/SystemX.Net.CP.PCAdaptor.UIM/SystemX.Net.PCAdaptor/XPCAdaptor/XPCAdaptorSub/Tasks.cs

441 lines
15 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 async void ClientCommandConnect()
{
dbNgCodeFinder = null;
ConnectCommandWaitEvent.Reset();
StateAdaptorConnect &= ClientCommandSet(SOCKET_TYPE.TCP, false);
if (ConnectCommandWaitEvent.WaitOne(CONNECT_TIME_OUT))
SetCommandWatchTask();
else
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"SystemX.Net.XAdaptor.PC Command Connect Error.[SystemX.Net.PCAdaptor : XPCAdaptor.XPCAdaptor]", ConsoleColor.Red, LogMessageLevel.DEBUG);
await Task.Delay(1).ConfigureAwait(false);
}
private async void ClientStreamConnect()
{
ConnectStreamWaitEvent.Reset();
StateAdaptorConnect &= ClientStreamSet(SOCKET_TYPE.TCP, false);
if (ConnectStreamWaitEvent.WaitOne(CONNECT_TIME_OUT))
SetStreamWatchTask();
else
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"SystemX.Net.XAdaptor.PC Stream Connect Error.[SystemX.Net.PCAdaptor : XPCAdaptor.XPCAdaptor]", ConsoleColor.Red, LogMessageLevel.DEBUG);
await Task.Delay(1).ConfigureAwait(false);
}
*/
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);
}
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();
}
}
}