[성현모] 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,647 @@
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.Runtime.Remoting.Messaging;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using SystemX.Common;
using SystemX.Common.Serialization;
using SystemX.Net.BaseProtocol;
using SystemX.Net.Comm;
using SystemX.Net.XAdaptor.PC.O2Sensor.NgCode;
using SystemX.Net.Schedule;
using static SystemX.Net.Platform.Common.Util.LogMessage;
using WTimer = System.Windows.Forms.Timer;
namespace SystemX.Net.XAdaptor.PC
{
public partial class XAdaptorPC
{
protected override void OnCommandConnectAlarm(object sender, EventArgs e)
{
// Safely raise the event for all subscribers
base.OnCommandConnectAlarm(sender, e);
}
protected override void OnStreamConnectAlarm(object sender, EventArgs e)
{
// Safely raise the event for all subscribers
base.OnStreamConnectAlarm(sender, e);
}
protected override void OnConnectionInfoRecv(object sender, EventArgs e)
{
// Safely raise the event for all subscribers
base.OnConnectionInfoRecv(sender, e);
}
protected override void OnCommandDisconnectAlarm(object sender, EventArgs e)
{
// Safely raise the event for all subscribers
base.OnCommandDisconnectAlarm(sender, e);
}
protected override void OnStreamDisconnectAlarm(object sender, EventArgs e)
{
// Safely raise the event for all subscribers
base.OnStreamDisconnectAlarm(sender, e);
}
protected override void OnLoginAlarm(object sender, EventArgs e)
{
// Safely raise the event for all subscribers
base.OnLoginAlarm(sender, e);
}
protected override void OnQueryCall(object sender, ResultEventArgs e)
{
// Safely raise the event for all subscribers
base.OnQueryCall(sender, e);
}
protected override void OnBeginQueryCall(object sender, ResultEventArgs e)
{
// Safely raise the event for all subscribers
base.OnBeginQueryCall(sender, e);
}
private void ClientCommandConnectEvent(object sender, ScheduleEvent e)
{
string strGetMsg = string.Empty;
if (e != null)
strGetMsg = e.STATE_MSG;
XAdaptorLogWrite("Command Socket Connect");
streCommandConnectWatch.Restart();
thisConnInfo.ConnectCommandState = true;
//ConnectCommandWaitEvent.Set();
bConnectCommandSocketFlag = true;
thisConnInfo.OnCommandTime();
thisConnInfo.OnCommandCheckTime();
StateClientSocketConnect = true;
//CommandConnectAlarmEvent?.BeginInvoke(null, null, null, null);
//CommandConnectAlarmEvent?.Invoke(null, null);
OnCommandConnectAlarm(null, null);
}
private void ClientCommandErrorEvent(object sender, ScheduleEvent e)
{
string strGetMsg = string.Empty;
if (e != null)
strGetMsg = e.STATE_MSG;
XAdaptorLogWrite("Command Socket Disconnect");
ClearCommandWatchTask();
streCommandConnectWatch.Restart();
thisConnInfo.ConnectCommandState = false;
//ConnectCommandWaitEvent.Reset();
bConnectCommandSocketFlag = false;
StateClientSocketConnect = false;
StateClientGetInformation = false;
//SubscribeConnectInfo.Initialize();
//CommandDisconnectAlarmEvent?.BeginInvoke(null, null, null, null);
//CommandDisconnectAlarmEvent?.Invoke(null, null);
OnCommandDisconnectAlarm(null, null);
}
private void ClientStreamConnectEvent(object sender, ScheduleEvent e)
{
string strGetMsg = string.Empty;
if (e != null)
strGetMsg = e.STATE_MSG;
XAdaptorLogWrite("Stream Socket Connect");
stFileSendTime.Restart();
stBackupFileSendTime.Restart();
streStreamConnectWatch.Restart();
thisConnInfo.ConnectStreamState = true;
//ConnectStreamWaitEvent.Set();
bConnectStreamSocketFlag = true;
thisConnInfo.OnStreamTime();
thisConnInfo.OnStreamCheckTime();
StateClientStreamSocketConnect = true;
//StreamConnectAlarmEvent?.BeginInvoke(null, null, null, null);
//StreamConnectAlarmEvent?.Invoke(null, null);
OnStreamConnectAlarm(null, null);
}
private void ClientStreamErrorEvent(object sender, ScheduleEvent e)
{
string strGetMsg = string.Empty;
if (e != null)
strGetMsg = e.STATE_MSG;
XAdaptorLogWrite("Stream Socket Disconnect");
ClearStreamWatchTask();
streStreamConnectWatch.Restart();
thisConnInfo.ConnectStreamState = false;
//ConnectStreamWaitEvent.Reset();
bConnectStreamSocketFlag = false;
StateClientStreamSocketConnect = false;
//SubscribeConnectInfo.Initialize();
//StreamDisconnectAlarmEvent?.BeginInvoke(null, null, null, null);
//StreamDisconnectAlarmEvent?.Invoke(null, null);
OnStreamDisconnectAlarm(null, null);
}
private async Task<bool> SendCommandConnectState(bool bWaitRespons = false)
{
if (thisConnInfo.ConnectCommandState == false)
return false;
if (thisConnInfo.stCommandCheckTime.ElapsedMilliseconds < 60000)
return true;
bool bResult = true;
try
{
thisConnInfo.OnCommandTime();
try
{
PING_PACKET MakePingPacket = new PING_PACKET();
int iSendSize = Marshal.SizeOf(MakePingPacket);
byte[] ucSendArray = new byte[iSendSize];
MakePingPacket = (PING_PACKET)SystemXNetSerialization.RawDeSerialize(ucSendArray, MakePingPacket.GetType());
MakePingPacket.objCheckMsg[0].Data = "Who?";
byte[] ucSendByteInfo = XCommons.SpecialObjectToByteStream(new BASE_PROTOCOL(BASE_PROTOCOL.PROTOCOL_CODE.CONNECT_STATE), MakePingPacket);
byte ucGetLabel = FlowCommandControl.InsertSendQueue(DateTime.Now, ucSendByteInfo, null, bWaitRespons);
thisConnInfo.OnCommandCheckTime();
if (bWaitRespons)
{
await WaitTaskJoin(waitCommandParam, FlowCommandControl, ucGetLabel, false).ConfigureAwait(false);
if (QueryResult.bQueryResult)
bResult = true;
else
bResult = false;
}
}
catch (Exception ex)
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") +
@"Command Socket ping check error. [SystemX.Net.XAdaptor.PC : XPCAdaptor.SendCommandConnectState]\r\n" +
ex.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG);
}
finally { }
}
finally
{
;
}
return bResult;
}
private async Task<bool> SendStreamConnectState(bool bWaitRespons = false)
{
if (thisConnInfo.ConnectStreamState == false)
return false;
if (thisConnInfo.stStreamCheckTime.ElapsedMilliseconds < 60000)
return true;
bool bResult = true;
try
{
thisConnInfo.OnStreamTime();
try
{
PING_PACKET MakePingPacket = new PING_PACKET();
int iSendSize = Marshal.SizeOf(MakePingPacket);
byte[] ucSendArray = new byte[iSendSize];
MakePingPacket = (PING_PACKET)SystemXNetSerialization.RawDeSerialize(ucSendArray, MakePingPacket.GetType());
MakePingPacket.objCheckMsg[0].Data = "Who?";
byte[] ucSendByteInfo = XCommons.SpecialObjectToByteStream(new BASE_PROTOCOL(BASE_PROTOCOL.PROTOCOL_CODE.CONNECT_STATE), MakePingPacket);
byte ucGetLabel = FlowStreamControl.InsertSendQueue(DateTime.Now, ucSendByteInfo, null, bWaitRespons);
thisConnInfo.OnStreamCheckTime();
if (bWaitRespons)
{
await WaitTaskJoin(waitStreamParam, FlowStreamControl, ucGetLabel, false).ConfigureAwait(false);
if (QueryResult.bQueryResult)
bResult = true;
else
bResult = false;
}
}
catch (Exception ex)
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") +
@"Stream Socket ping check error. [SystemX.Net.XAdaptor.PC : XPCAdaptor.SendStreamConnectState]\r\n" +
ex.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG);
}
finally { }
}
finally
{
;
}
return bResult;
}
// The delegate must have the same signature as the method
// it will call asynchronously.
public delegate string AsyncMethodCaller(int callDuration, out int threadId);
//public delegate void RecvWaitEventHandler(WaitParameter sender, EventArgs e);
public delegate void RecvWaitEventHandler(WaitParameter sender, EventArgs e);
private void RecvWaitEventCall(WaitParameter sender, EventArgs e)
{
try
{
}
catch (Exception ex)
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"RecvWaitEventCall failed. [SystemX.Net.XAdaptor.PC.XPCAdaptor : XPCAdaptor.EventCall()]\r\n" + ex.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG);
}
finally
{
sender.nSignaled = 1;
}
}
private void RecvWaitEnd(IAsyncResult ar)
{
// Retrieve the delegate.
AsyncResult result = (AsyncResult)ar;
}
/*
private void WaitTskJoin(WaitParameter wp, PacketFlowControl getPF, byte ucGetLabel, bool bUseDataSet = true, long lTimeOut = COMMAND_TIME_OUT)
{
wp.Init(getPF);
Thread t = new Thread(delegate () {
QueryResult.Initialize();
QueryResult.xData = wp.TskCheckResult(ucGetLabel, lTimeOut);
if (QueryResult.xData != null)
{
QueryResult.bQueryResult = QueryResult.xData.bReplayResult;
if (bUseDataSet)
QueryResult.QueryDataSet = QueryResult.xData.objData as DataSet;
else
{
QueryResult.QueryDataSet = null;
if (QueryResult.xData.objData is TRANSFER_PACKET)
{
TRANSFER_PACKET TransferResult = (TRANSFER_PACKET)QueryResult.xData.objData;
byte ucCheckLabel = QueryResult.xData.nLabel;
QueryResult.bFileRecvResult = TransferResult.bRecvResult;
QueryResult.bFileProcessResult = TransferResult.bProcessResult;
}
else if (QueryResult.xData.objData is COMM_INFO_PACKET)
{
COMM_INFO_PACKET Result = (COMM_INFO_PACKET)QueryResult.xData.objData;
byte ucCheckLabel = QueryResult.xData.nLabel;
}
}
QueryResult.strVarParam1 = QueryResult.xData.HeaderPacket.objVarParam1[0].Data;
QueryResult.strVarParam2 = QueryResult.xData.HeaderPacket.objVarParam2[0].Data;
QueryResult.strVarParam3 = QueryResult.xData.HeaderPacket.objVarParam3[0].Data;
}
else
getPF.STM.ClearLabel(ucGetLabel);
});
t.Start();
t.Join();
}
*/
private void WaitThreadJoin(WaitParameter wp, PacketFlowControl getPF, byte ucGetLabel, bool bUseDataSet = true, long lTimeOut = COMMAND_TIME_OUT)
{
wp.Init(getPF);
Thread t = new Thread(delegate ()
{
QueryResult.Initialize();
QueryResult.xData = wp.ThreadWaitResult(ucGetLabel, lTimeOut);
if (QueryResult.xData != null)
{
try
{
QueryResult.bQueryResult = QueryResult.xData.bReplayResult;
if (bUseDataSet)
QueryResult.QueryDataSet = QueryResult.xData.objData as DataSet;
else
{
QueryResult.QueryDataSet = null;
if (QueryResult.xData.objData is TRANSFER_PACKET)
{
TRANSFER_PACKET TransferResult = (TRANSFER_PACKET)QueryResult.xData.objData;
byte ucCheckLabel = QueryResult.xData.nLabel;
QueryResult.bFileRecvResult = TransferResult.bRecvResult;
QueryResult.bFileProcessResult = TransferResult.bProcessResult;
}
else if (QueryResult.xData.objData is COMM_INFO_PACKET)
{
COMM_INFO_PACKET Result = (COMM_INFO_PACKET)QueryResult.xData.objData;
byte ucCheckLabel = QueryResult.xData.nLabel;
}
}
QueryResult.strVarParam1 = QueryResult.xData.HeaderPacket.objVarParam1[0].Data;
QueryResult.strVarParam2 = QueryResult.xData.HeaderPacket.objVarParam2[0].Data;
QueryResult.strVarParam3 = QueryResult.xData.HeaderPacket.objVarParam3[0].Data;
}
catch
{
QueryResult.bQueryResult = false;
QueryResult.QueryDataSet = null;
}
finally
{
;//
}
}
else
getPF.STM.ClearLabel(ucGetLabel);
});
t.Start();
t.Join();
}
private async Task<bool> WaitTaskJoin(WaitParameter wp, PacketFlowControl getPF, byte ucGetLabel, bool bUseDataSet = true)
{
wp.Init(getPF);
bool bSetResult = true;
QueryResult.Initialize();
QueryResult.xData = await wp.TaskWaitResult(ucGetLabel).ConfigureAwait(false);
if (QueryResult.xData != null)
{
try
{
QueryResult.bQueryResult = QueryResult.xData.bReplayResult;
if (bUseDataSet)
QueryResult.QueryDataSet = QueryResult.xData.objData as DataSet;
else
{
QueryResult.QueryDataSet = null;
if (QueryResult.xData.objData is TRANSFER_PACKET)
{
TRANSFER_PACKET TransferResult = (TRANSFER_PACKET)QueryResult.xData.objData;
byte ucCheckLabel = QueryResult.xData.nLabel;
QueryResult.bFileRecvResult = TransferResult.bRecvResult;
QueryResult.bFileProcessResult = TransferResult.bProcessResult;
}
else if (QueryResult.xData.objData is COMM_INFO_PACKET)
{
COMM_INFO_PACKET Result = (COMM_INFO_PACKET)QueryResult.xData.objData;
byte ucCheckLabel = QueryResult.xData.nLabel;
}
}
QueryResult.strVarParam1 = QueryResult.xData.HeaderPacket.objVarParam1[0].Data;
QueryResult.strVarParam2 = QueryResult.xData.HeaderPacket.objVarParam2[0].Data;
QueryResult.strVarParam3 = QueryResult.xData.HeaderPacket.objVarParam3[0].Data;
}
catch
{
QueryResult.bQueryResult = false;
QueryResult.QueryDataSet = null;
bSetResult = false;
}
finally
{
;//
}
return bSetResult;
}
else
{
getPF.STM.ClearLabel(ucGetLabel);
return false;
}
}
private XData ComWaitResult(byte nCheckLabel)
{
XData getXData = null;
bool bWaitLabel = false;
if (nCheckLabel < 0 || nCheckLabel >= FlowCommandControl.STM.GetLabelSize())
return getXData;
Stopwatch stWaitTImeWatch = new Stopwatch();
stWaitTImeWatch.Start();
while (stWaitTImeWatch.ElapsedMilliseconds <= COMMAND_TIME_OUT)
{
Application.DoEvents();
getXData = FlowCommandControl.STM.CheckLabel(nCheckLabel, ref bWaitLabel);
if (bWaitLabel)
break;
Thread.Sleep(1);
}
return getXData;
}
public class WaitParameter
{
public int nSignaled;
public bool tResult;
private PacketFlowControl fc;
public WaitParameter()
{
nSignaled = 0;
tResult = false;
}
public void Init(PacketFlowControl getFc)
{
nSignaled = 0;
tResult = false;
fc = getFc;
}
/*
public XData TskCheckResult(byte nCheckLabel, long lTimeOut = COMMAND_TIME_OUT)
{
XData getXData = null;
bool bWaitLabel = false;
if (nCheckLabel < 0 || nCheckLabel >= fc.STM.GetLabelSize())
return getXData;
Stopwatch stWaitTImeWatch = new Stopwatch();
stWaitTImeWatch.Start();
while (true)
{
if (stWaitTImeWatch.ElapsedMilliseconds >= lTimeOut)
break;
if (nSignaled == 1)
{
getXData = fc.STM.CheckLabel(nCheckLabel, ref bWaitLabel);
if (bWaitLabel)
{
tResult = true;
break;
}
}
Thread.Sleep(1);
}
return getXData;
}
*/
public XData ThreadWaitResult(byte nCheckLabel, long lTimeOut = COMMAND_TIME_OUT)
{
XData getXData = null;
bool bWaitLabel = false;
if (nCheckLabel < 0 || nCheckLabel >= fc.STM.GetLabelSize())
return getXData;
Stopwatch stWaitTImeWatch = new Stopwatch();
stWaitTImeWatch.Start();
while (true)
{
if (stWaitTImeWatch.ElapsedMilliseconds > lTimeOut)
{
fc.SetRefSocketPacketClear();
break;
}
if (nSignaled == 1)
{
getXData = fc.STM.CheckLabel(nCheckLabel, ref bWaitLabel);
if (bWaitLabel)
{
tResult = true;
break;
}
}
Thread.Sleep(1);
}
return getXData;
}
public async Task<XData> TaskWaitResult(byte nCheckLabel)
{
XData getXData = null;
bool bWaitLabel = false;
if (nCheckLabel < 0 || nCheckLabel >= fc.STM.GetLabelSize())
return getXData;
Stopwatch stWaitTImeWatch = new Stopwatch();
stWaitTImeWatch.Start();
while (true)
{
if(stWaitTImeWatch.ElapsedMilliseconds > COMMAND_TIME_OUT)
{
fc.SetRefSocketPacketClear();
break;
}
if (nSignaled == 1)
{
getXData = fc.STM.CheckLabel(nCheckLabel, ref bWaitLabel);
if (bWaitLabel)
{
tResult = true;
break;
}
}
await Task.Delay(1).ConfigureAwait(false);
}
return getXData;
}
}
}
}