[성현모] MiddleWare.Log 프로젝트 추가
This commit is contained in:
@ -0,0 +1,268 @@
|
||||
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 System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using SystemX.Net;
|
||||
using SystemX.Common;
|
||||
using SystemX.Net.BaseProtocol;
|
||||
using SystemX.Net.Comm;
|
||||
using SystemX.Net.Schedule;
|
||||
using SystemX.Net.DB.LogProcess;
|
||||
using SystemX.Common.Serialization;
|
||||
using SystemX.Common.Archive;
|
||||
|
||||
//using SystemX.Common.Protocol.SIA;
|
||||
|
||||
using DevExpress.Utils.Extensions;
|
||||
|
||||
using static SystemX.Net.Platform.Common.Util.LogMessage;
|
||||
using static SystemX.Net.DB.LogProcess.XLogDBConnManager;
|
||||
using SystemX.Net.Platform.SystemX.Common;
|
||||
|
||||
namespace SystemX.Net.MiddlewareUI
|
||||
{
|
||||
public partial class MainForm : DevExpress.XtraBars.FluentDesignSystem.FluentDesignForm
|
||||
{
|
||||
private async void WatchRecvCommandQueue()
|
||||
{
|
||||
await Task.Delay(250);
|
||||
|
||||
while (!m_bTaskCommandBlock)
|
||||
{
|
||||
try
|
||||
{
|
||||
CT.ThrowIfCancellationRequested();
|
||||
}
|
||||
catch (OperationCanceledException CancelEx)
|
||||
{
|
||||
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @" Work Canceled. [SystemX.Net.MiddlewareUI : MainForm.WatchRecvCommndQueue]\r\n" + CancelEx.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG);
|
||||
|
||||
break;
|
||||
}
|
||||
//
|
||||
try
|
||||
{
|
||||
if (bTaskCommandWaitLock == false)
|
||||
QueryRecvCommandQueue();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"General Queue Process failed.[1] [SystemX.Net.MiddlewareUI : MainForm.WatchRecvCommndQueue]\r\n" + e.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG);
|
||||
}
|
||||
|
||||
await Task.Delay(500);
|
||||
}
|
||||
}
|
||||
|
||||
private bool LogMemoryPushProcess(int nPos, int nStPos)
|
||||
{
|
||||
int nSetSize = int.MaxValue;
|
||||
byte[] ucSetLogArray = null;
|
||||
|
||||
bool bProcResult = false;
|
||||
|
||||
using (LogSharedMemory memLog = new LogSharedMemory(ParamterMapLog))
|
||||
{
|
||||
if (memLog.CheckFile(nPos))
|
||||
{
|
||||
LogMappedPacket LogMapFile = new LogMappedPacket();
|
||||
nSetSize = Marshal.SizeOf(LogMapFile);
|
||||
ucSetLogArray = new byte[nSetSize];
|
||||
LogMapFile = (LogMappedPacket)SystemXNetSerialization.RawDeSerialize(ucSetLogArray, LogMapFile.GetType());
|
||||
|
||||
bool bFindLogResult = false;
|
||||
|
||||
LogMapFile = memLog.Get(nPos, nStPos, out bFindLogResult, nSetSize).Value;
|
||||
|
||||
if (bFindLogResult == false)
|
||||
return false;
|
||||
|
||||
if (LogMapFile.bLogFileReadComplete == false)
|
||||
{
|
||||
LogMapFile.bLogFileReadComplete = true;
|
||||
|
||||
memLog.Set(nPos, LogMapFile);
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.Append("[" + (++nEnqueueCount).ToString() + "][Enqueue]");
|
||||
sb.Append("[");
|
||||
sb.Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
||||
sb.Append("], ");
|
||||
sb.Append("Type [" + LogMapFile.objLogType[0].Data.ToString() + "], ");
|
||||
sb.Append("S Port [" + LogMapFile.nStreamPort.ToString() + "], ");
|
||||
sb.Append("C Port [" + LogMapFile.nCommandPort.ToString() + "], ");
|
||||
sb.Append("Size [" + LogMapFile.nLogDataSize.ToString() + "], ");
|
||||
sb.Append("Number [" + LogMapFile.nNumber.ToString() + "], ");
|
||||
sb.Append("Host [" + LogMapFile.objHost[0].Data + "], ");
|
||||
sb.Append("Section [" + LogMapFile.objSection[0].Data + "], ");
|
||||
sb.Append("St Name [" + LogMapFile.objStationName[0].Data + "], ");
|
||||
sb.Append("St ID [" + LogMapFile.nStationID.ToString() + "], ");
|
||||
sb.Append("File Name [" + LogMapFile.objOptionFileName[0].Data + "], ");
|
||||
sb.Append("File Extension [" + LogMapFile.objOptionFileExtension[0].Data + "] ");
|
||||
|
||||
/*
|
||||
sb.Append("TL ID[" + LogMapFile.objResultTestListCntID[0].Data + "], ");
|
||||
sb.Append("V[" + LogMapFile.objProdPNo[0].Data + "], ");
|
||||
sb.Append("PN[" + LogMapFile.objProdCNo[0].Data + "], ");
|
||||
sb.Append("TT[" + LogMapFile.objTestType[0].Data + "], ");
|
||||
sb.Append("TC[" + LogMapFile.objTestCode[0].Data + "], ");
|
||||
sb.Append("Ver[" + LogMapFile.objVersion[0].Data + "], ");
|
||||
sb.Append("PC[" + LogMapFile.objProdCode[0].Data + "], ");
|
||||
sb.Append("DB V No[" + LogMapFile.nTestListVariantNo.ToString() + "] ");
|
||||
*/
|
||||
|
||||
sb.AppendLine();
|
||||
|
||||
if (nEnqueueCount >= Int64.MaxValue)
|
||||
nEnqueueCount = 0;
|
||||
|
||||
LogDataRecvText.Enqueue(sb);
|
||||
|
||||
LogDataQueue[nPos].Enqueue(LogMapFile);
|
||||
|
||||
bProcResult = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return bProcResult;
|
||||
}
|
||||
|
||||
private bool QueryRecvCommandQueue()
|
||||
{
|
||||
bool bState = true;
|
||||
|
||||
string strProcessDebugInfo = string.Empty;
|
||||
|
||||
long l1 = long.MinValue;
|
||||
long l2 = long.MinValue;
|
||||
|
||||
try
|
||||
{
|
||||
bTaskCommandWaitLock = true;
|
||||
|
||||
Stopwatch stProcessTimeChk = new Stopwatch();
|
||||
stProcessTimeChk.Start();
|
||||
|
||||
using (InfoLogSharedMemory memInfoLog = new InfoLogSharedMemory(ParamterMapInfoLog))
|
||||
{
|
||||
InfoLogMappedPacket InfoLogMapFile = new InfoLogMappedPacket();
|
||||
int nSetSize = Marshal.SizeOf(InfoLogMapFile);
|
||||
byte[] ucSetLogArray = new byte[nSetSize];
|
||||
InfoLogMapFile = (InfoLogMappedPacket)SystemXNetSerialization.RawDeSerialize(ucSetLogArray, InfoLogMapFile.GetType());
|
||||
|
||||
if (memInfoLog.CheckFile())
|
||||
{
|
||||
bool bFindInfoLogResult = false;
|
||||
|
||||
//로그 처리가 필요한 위치 조회
|
||||
bool[] bGetStationReadyLog = memInfoLog.Get(out bFindInfoLogResult, nSetSize);
|
||||
|
||||
if (bFindInfoLogResult == false)
|
||||
return bState;
|
||||
|
||||
//Array.Copy(bGetStationReadyLog, 0, InfoLogMapFile.bLogDataReady, 0, SharedMemory.nMaxInfoFullAccessSize);
|
||||
|
||||
Array.Clear(bCompareLogReadyState, 0, SharedMemory.nMaxInfoFullAccessSize);
|
||||
for (int i = 0; i < SharedMemory.nMaxInfoFullAccessSize; i++)
|
||||
{
|
||||
if (bGetStationReadyLog[i] != bBeforeLogReadyState[i])
|
||||
bCompareLogReadyState[i] = true;
|
||||
}
|
||||
|
||||
//존재할 경우
|
||||
if (bCompareLogReadyState.Any(x => x == true))
|
||||
{
|
||||
//존재하는 개수 파악
|
||||
bool[] arrCheckNum = Array.FindAll(bCompareLogReadyState, x => x == true);
|
||||
|
||||
//개수 확인
|
||||
int nFindCount = arrCheckNum.Count();
|
||||
|
||||
//개수 만큼 Index 확인
|
||||
for (int i = 0; i < nFindCount; i++)
|
||||
{
|
||||
Stopwatch stItemTimeChk = new Stopwatch();
|
||||
stItemTimeChk.Start();
|
||||
|
||||
int nIdx = Array.FindIndex(bCompareLogReadyState, x => x == true);
|
||||
|
||||
//Index 포트 변환 및 Station(최대 8) 확인
|
||||
int nPos = (nIdx / SharedMemory.nMaxStationSize) + PORT_DISTRIBUTION_NUM;
|
||||
|
||||
int nAccessPart = nIdx / SharedMemory.nMaxStationSize;
|
||||
int nSubPos = nIdx % SharedMemory.nMaxStationSize;
|
||||
|
||||
if (bCompareLogReadyState[nIdx])
|
||||
{
|
||||
LogMemoryPushProcess(nPos, nSubPos);
|
||||
|
||||
bCompareLogReadyState[nIdx] = false;
|
||||
}
|
||||
|
||||
l2 = stItemTimeChk.ElapsedMilliseconds;
|
||||
}
|
||||
|
||||
/*for (int i = PORT_DISTRIBUTION_NUM; i < ALL_MANAGE_NUM && !m_bTaskStreamBlock; i++)
|
||||
{
|
||||
for (int j = (i - PORT_DISTRIBUTION_NUM) * SharedMemory.nMaxStationSize;
|
||||
j < ((i - PORT_DISTRIBUTION_NUM) * SharedMemory.nMaxStationSize) + SharedMemory.nMaxStationSize; j++)
|
||||
{
|
||||
if (bGetStationReadyLog[j])
|
||||
{
|
||||
LogMemoryProcess(i, j);
|
||||
|
||||
bGetStationReadyLog[j] = false;
|
||||
}
|
||||
}
|
||||
|
||||
Thread.Sleep(10);
|
||||
}*/
|
||||
|
||||
//memInfoLog.Set(bGetStationReadyLog);
|
||||
Array.Copy(bGetStationReadyLog, 0, bBeforeLogReadyState, 0, SharedMemory.nMaxInfoFullAccessSize);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
l1 = stProcessTimeChk.ElapsedMilliseconds;
|
||||
|
||||
if (l1 != long.MinValue && l2 != long.MinValue)
|
||||
{
|
||||
LogDataRecvText.Enqueue(new StringBuilder(">>[Enqueue-Process][" + l1.ToString() + "][Enqueue-Item][" + l2.ToString() + "]\r\n"));
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + strProcessDebugInfo + @" Recv queue process fail.[SystemX.Net.MiddlewareUI : MainForm.QueryRecvCommandQueue]\r\n" + e.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG);
|
||||
|
||||
bState = false;
|
||||
}
|
||||
finally
|
||||
{
|
||||
bTaskCommandWaitLock = false;
|
||||
}
|
||||
|
||||
return bState;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user