using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Xml.Linq;
using SystemX.Net.BaseProtocol;
namespace SystemX.Net
{
///
/// Num, Command Port, Stream Port, Use, ProcessCode, TestID, ProcessName, PLCCOnfilgFileName, PLCUseType
///
//using PLC_DEVICE_BASE_CONFIG = Tuple>;
using static SystemX.Net.Platform.Common.Util.LogMessage;
///
///
///
public class PLCDeviceBaseConfig {
public int nNum;
public int nCommandPort;
public int nStreamPort;
public bool bUse;
public int nProcessCode;
public string strTestID;
public string strProcessName;
public string strPLCCOnfilgFileName;
public string strPLCUseType;
}
public class ServerInfo {
public bool READ_INFO_STATE { set; get; }
private string strInfoFilePos;
private int MAX_PROCESS_NUM;
public string SERVER_IP;
public bool LOOP_BACK;
public string TITLE;
public int[] nListenCommandPort;
public int[] nListenStreamPort;
public int nListenCommandPortNum;
public int nListenCommandStartPort;
public int nListenCommandEndPort;
public int nListenStreamPortNum;
public int nListenStreamStartPort;
public int nListenStreamEndPort;
public int nDistributionCommandPortNum;
public int nDistributionCommandStartPort;
public int nDistributionCommandEndPort;
public int nDistributionStreamPortNum;
public int nDistributionStreamStartPort;
public int nDistributionStreamEndPort;
public bool USE_HOST_INFO;
public string HOST_TABLE_NAME;
public string USER_TABLE_NAME;
public string DISK_MONITOR_POS1;
public string DISK_MONITOR_POS2;
public string SERVER_SAVE_POS;
public string MES_SAVE_POS;
public string SyncTimeServerAddress;
public int SyncTimeServerPort;
public int TimeServerSyncTimeHour;
public int TimeServerSyncTimeMinute;
public int TimeServerSyncTimeSecond;
public ServerInfo(string strGetInfoPath, int iMaxProcessNum)
{
strInfoFilePos = strGetInfoPath;
MAX_PROCESS_NUM = iMaxProcessNum;
}
public bool Load()
{
READ_INFO_STATE = true;
try
{
XDocument xDoc = XDocument.Load(strInfoFilePos);
var xElement = xDoc.Element("ROOT");
int iPort = 0;
if (xElement != null)
{
var xGetElement = xElement.Element("Configure");
SERVER_IP = xGetElement.Element("UseIP").Value;
iPort = Convert.ToInt32((xGetElement.Element("Port").Value.IndexOf("-") >= 0) ? "0" : xGetElement.Element("Port").Value);
LOOP_BACK = Convert.ToBoolean(xGetElement.Element("Loopback").Value);
TITLE = xGetElement.Element("Title").Value;
nListenCommandStartPort = Convert.ToInt32(xGetElement.Element("ListenCommandPort").Attribute("Start").Value);
nListenCommandEndPort = Convert.ToInt32(xGetElement.Element("ListenCommandPort").Attribute("End").Value);
nListenCommandPortNum = nListenCommandEndPort - nListenCommandStartPort;
nListenStreamStartPort = Convert.ToInt32(xGetElement.Element("ListenStreamPort").Attribute("Start").Value);
nListenStreamEndPort = Convert.ToInt32(xGetElement.Element("ListenStreamPort").Attribute("End").Value);
nListenStreamPortNum = nListenStreamEndPort - nListenStreamStartPort;
nListenCommandPort = new int[nListenCommandPortNum];
nListenStreamPort = new int[nListenStreamPortNum];
for (int i = 0; i < nListenCommandPortNum; i++)
nListenCommandPort[i] = nListenCommandStartPort + i;
for (int i = 0; i < nListenStreamPortNum; i++)
nListenStreamPort[i] = nListenStreamStartPort + i;
nDistributionCommandStartPort = Convert.ToInt32(xGetElement.Element("DistributionCommandPort").Attribute("Start").Value);
nDistributionCommandEndPort = Convert.ToInt32(xGetElement.Element("DistributionCommandPort").Attribute("End").Value);
nDistributionCommandPortNum = nDistributionCommandEndPort - nDistributionCommandStartPort;
nDistributionStreamStartPort = Convert.ToInt32(xGetElement.Element("DistributionStreamPort").Attribute("Start").Value);
nDistributionStreamEndPort = Convert.ToInt32(xGetElement.Element("DistributionStreamPort").Attribute("End").Value);
nDistributionStreamPortNum = nDistributionStreamEndPort - nDistributionStreamStartPort;
SERVER_SAVE_POS = @xGetElement.Element("LogFileSavePos").Value;
MES_SAVE_POS = @xGetElement.Element("MESFileSavePos").Value;
USE_HOST_INFO = Convert.ToBoolean(xGetElement.Element("UseHostInfo").Value);
HOST_TABLE_NAME = @xGetElement.Element("HostInfoTableName").Value;
USER_TABLE_NAME = @xGetElement.Element("UserInfoTableName").Value;
DISK_MONITOR_POS1 = xGetElement.Element("DiskMonitor1").Value;
DISK_MONITOR_POS2 = xGetElement.Element("DiskMonitor2").Value;
if (DISK_MONITOR_POS1.Length <= 0)
DISK_MONITOR_POS1 = @"C:\";
if (DISK_MONITOR_POS2.Length <= 0)
DISK_MONITOR_POS2 = @"D:\";
SyncTimeServerAddress = xGetElement.Element("SyncTimeServerAddress").Attribute("Address").Value;
SyncTimeServerPort = int.MinValue;
if (int.TryParse(xGetElement.Element("SyncTimePort").Attribute("Port").Value, out SyncTimeServerPort) == false)
SyncTimeServerPort = int.MinValue;
TimeServerSyncTimeHour = 24;
TimeServerSyncTimeMinute = 0;
TimeServerSyncTimeSecond = 0;
if (int.TryParse(xGetElement.Element("TimeServer-SyncTime").Attribute("H").Value, out TimeServerSyncTimeHour) == false)
TimeServerSyncTimeHour = 24;
if (int.TryParse(xGetElement.Element("TimeServer-SyncTime").Attribute("M").Value, out TimeServerSyncTimeMinute) == false)
TimeServerSyncTimeMinute = 0;
if (int.TryParse(xGetElement.Element("TimeServer-SyncTime").Attribute("S").Value, out TimeServerSyncTimeSecond) == false)
TimeServerSyncTimeSecond = 0;
if (Base.CheckPath(SERVER_SAVE_POS)) {
if (Directory.Exists(SERVER_SAVE_POS) == false)
Directory.CreateDirectory(SERVER_SAVE_POS);
}
else {
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"ServerInfo read failed.(SERVER SAVE POS - Folder name error)[SystemX.Common : SystemX.Net.ServerInfo]", ConsoleColor.Yellow, LogMessageLevel.DEBUG);
throw new Exception();
}
if (Base.CheckPath(MES_SAVE_POS)) {
if (Directory.Exists(MES_SAVE_POS) == false) {
Directory.CreateDirectory(MES_SAVE_POS);
/*MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"ServerInfo read failed.(MES SAVE POS - Folder exist error)[SystemX.Common : SystemX.Net.ServerInfo]", ConsoleColor.Yellow, LogMessageLevel.DEBUG);
throw new Exception();*/
}
}
else {
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"ServerInfo read failed.(MES SAVE POS - Folder name error)[SystemX.Common : SystemX.Net.ServerInfo]", ConsoleColor.Yellow, LogMessageLevel.DEBUG);
throw new Exception();
}
}
}
catch (Exception e) {
READ_INFO_STATE = false;
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"ServerInfo read failed.[SystemX.Common : SystemX.Net.ServerInfo]\r\n" + e.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG);
}
return READ_INFO_STATE;
}
}
public class MapLogOption
{
public bool bReadInfoState { set; get; }
private string strInfoFilePos;
public bool bUseMapLog;
public string strMapLogEnterMutexName;
public string strMapLogAccessMutexName;
public string strMapLogPath;
public string strMapLogFileName;
public string strMapLogName;
public string strMapInfoLogEnterMutexName;
public string strMapInfoLogAccessMutexName;
public string strMapInfoLogPath;
public string strMapInfoLogFileName;
public string strMapInfoLogName;
public MapLogOption(string strGetInfoPath)
{
strInfoFilePos = strGetInfoPath;
}
public bool Load()
{
bReadInfoState = true;
try
{
XDocument xDoc = XDocument.Load(strInfoFilePos);
var xElement = xDoc.Element("ROOT");
if (xElement != null)
{
var xGetElement = xElement.Element("Configure");
XElement xEle = xGetElement.Element("UseMapLog");
if (xEle?.IsEmpty == false)
bUseMapLog = Convert.ToBoolean(xGetElement.Element("UseMapLog").Value);
else
bUseMapLog = false;
strMapLogEnterMutexName = xGetElement.Element("MapLogEnterMutexName").Value;
strMapLogAccessMutexName = xGetElement.Element("MapLogAccessMutexName").Value;
strMapLogPath = @xGetElement.Element("MapLogFilePath").Value;
strMapLogFileName = xGetElement.Element("MapLogFileName").Value;
strMapLogName = xGetElement.Element("MapLogName").Value;
strMapInfoLogEnterMutexName = xGetElement.Element("MapInfoLogEnterMutexName").Value;
strMapInfoLogAccessMutexName = xGetElement.Element("MapInfoLogAccessMutexName").Value;
strMapInfoLogPath = @xGetElement.Element("MapInfoLogFilePath").Value;
strMapInfoLogFileName = xGetElement.Element("MapInfoLogFileName").Value;
strMapInfoLogName = xGetElement.Element("MapInfoLogName").Value;
if (Base.CheckPath(strMapLogPath))
{
if (Directory.Exists(strMapLogPath) == false)
Directory.CreateDirectory(strMapLogPath);
}
else
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"MapLogOption read failed. (Map Log Path - Folder name error)[SystemX.Common : SystemX.Net.MapLogOption]", ConsoleColor.Yellow, LogMessageLevel.DEBUG);
throw new Exception();
}
if (Base.CheckPath(strMapInfoLogPath))
{
if (Directory.Exists(strMapInfoLogPath) == false)
Directory.CreateDirectory(strMapInfoLogPath);
}
else
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"MapLogOption read failed. (Map Info Log Path - Folder name error)[SystemX.Common : SystemX.Net.MapLogOption]", ConsoleColor.Yellow, LogMessageLevel.DEBUG);
throw new Exception();
}
}
}
catch (Exception e)
{
bReadInfoState = false;
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"MapLogOption read failed. [SystemX.Common : SystemX.Net.MapLogOption]\r\n" + e.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG);
}
return bReadInfoState;
}
}
///
/// PLC Device Base Infomation
///
/// Num, Port, Use, ProcessCode, TestID, ProcessName, PLCCOnfilgFileName
public class PLCBaseInfo {
public bool READ_INFO_STATE { set; get; }
private string strInfoFilePos;
private int MAX_DEVICE_NUM;
public string SERVER_IP;
public bool LOOP_BACK;
public PLCDeviceBaseConfig[] BaseInfo;
public PLCBaseInfo(string strGetInfoPath, int iMaxDeviceNum) {
strInfoFilePos = strGetInfoPath;
MAX_DEVICE_NUM = iMaxDeviceNum;
BaseInfo = new PLCDeviceBaseConfig[MAX_DEVICE_NUM];
}
public bool Load() {
READ_INFO_STATE = true;
try
{
XDocument xDoc = XDocument.Load(strInfoFilePos);
var xElement = xDoc.Element("ROOT");
int iPort = 0;
if (xElement != null) {
var xGetElement = xElement.Element("Configure");
SERVER_IP = xGetElement.Element("UseIP").Value;
LOOP_BACK = Convert.ToBoolean(xGetElement.Element("Loopback").Value);
var ListGetElement = xElement.Elements("MiddlewareConnect").ToList();
foreach (var getXElement in ListGetElement) {
if (getXElement.Attribute("INFO")?.Value.CompareTo("COMMON") == 0) {
for (int i = 0; i < MAX_DEVICE_NUM; i++) {
BaseInfo[i] = new PLCDeviceBaseConfig();
BaseInfo[i].nNum = i;
BaseInfo[i].nCommandPort = Convert.ToInt32(getXElement.Element("Device" + (i + 1).ToString()).Attribute("Command_PortNumber").Value);
BaseInfo[i].nStreamPort = Convert.ToInt32(getXElement.Element("Device" + (i + 1).ToString()).Attribute("Stream_PortNumber").Value);
BaseInfo[i].bUse = Convert.ToBoolean(getXElement.Element("Device" + (i + 1).ToString()).Attribute("Use").Value);
BaseInfo[i].nProcessCode = Convert.ToInt32(getXElement.Element("Device" + (i + 1).ToString()).Attribute("ProcessCode").Value);
BaseInfo[i].strTestID = getXElement.Element("Device" + (i + 1).ToString()).Attribute("TestID").Value;
BaseInfo[i].strProcessName = getXElement.Element("Device" + (i + 1).ToString()).Attribute("ProcessName").Value;
BaseInfo[i].strPLCCOnfilgFileName = getXElement.Element("Device" + (i + 1).ToString()).Attribute("PLCConfigFileName").Value;
BaseInfo[i].strPLCUseType = getXElement.Element("Device" + (i + 1).ToString()).Attribute("PLCUseType").Value;
}
}
}
}
}
catch (Exception e) {
READ_INFO_STATE = false;
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"PLCBaseInfo read failed.[SystemX.Common : SystemX.Net.PLCBaseInfo]\r\n" + e.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG);
}
return READ_INFO_STATE;
}
}
///
/// PC Client Base Infomation
///
public class ClientInfo {
public bool READ_INFO_STATE { set; get; }
private string strInfoFilePos;
public string CONNECT_IP;
public int COMMAND_PORT;
public int STREAM_PORT;
public bool LOOP_BACK;
public string HOST_ID;
public string SECTION;
public string TEST_CODE;
/* TODO : UIM Mode 및 기존 코드 정리 필요 */
//SIMPLE_LOOKUP_OPTION
//ISSUE_WORKER_WAIT_TIME_ms
//SESSION_TIMEOUT_TIME_S
//UIM
public bool SIMPLE_LOOKUP_OPTION;
public double ISSUE_WORKER_WAIT_TIME_ms;
public double SESSION_TIMEOUT_TIME_S;
//TODO : Client ALIS FTP
public bool FTP_Use;
public string FTP_IPAddress;
public string FTP_Port;
public string FTP_Account;
public string FTP_Password;
public ClientInfo() {
strInfoFilePos = "";
}
public ClientInfo(string strGetInfoPath) {
strInfoFilePos = strGetInfoPath;
}
public bool Load() {
READ_INFO_STATE = true;
SIMPLE_LOOKUP_OPTION = false;
ISSUE_WORKER_WAIT_TIME_ms = 3000.0;
SESSION_TIMEOUT_TIME_S = 300.0;
TEST_CODE = string.Empty;
try
{
XDocument xDoc = XDocument.Load(strInfoFilePos);
var xElement = xDoc.Element("ROOT");
if (xElement != null) {
var xGetElement = xElement.Element("Configure");
CONNECT_IP = xGetElement.Element("UseIP").Value;
COMMAND_PORT = Convert.ToInt32((xGetElement.Element("CommandPort").Value.IndexOf("-") >= 0) ? "0" : xGetElement.Element("CommandPort").Value);
STREAM_PORT = Convert.ToInt32((xGetElement.Element("StreamPort").Value.IndexOf("-") >= 0) ? "0" : xGetElement.Element("StreamPort").Value);
LOOP_BACK = Convert.ToBoolean(xGetElement.Element("Loopback").Value);
HOST_ID = @xGetElement.Element("HostID").Value;
SECTION = @xGetElement.Element("Section").Value;
XElement xEle = xGetElement.Element("TestCode");
if (xEle?.IsEmpty == false)
TEST_CODE = @xGetElement.Element("TestCode").Value;
/*SCAN_LOG_FOLDER = Convert.ToBoolean(xGetElement.Element("LogFileScan").Value);
SCAN_LOG_FOLDER_POS = xGetElement.Element("LogFileScanPos").Value;
if (SCAN_LOG_FOLDER) {
if (Base.CheckPath(SCAN_LOG_FOLDER_POS)) {
if (Directory.Exists(SCAN_LOG_FOLDER_POS) == false) {
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"ClientInfo read failed.(Scan log folder not exist)[SystemX.Common : SystemX.Net.ClientInfo]", ConsoleColor.Yellow, LogMessageLevel.DEBUG);
throw new Exception();
}
}
else {
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"ClientInfo read failed.(Scan log folder name error)[SystemX.Common : SystemX.Net.ClientInfo]", ConsoleColor.Yellow, LogMessageLevel.DEBUG);
throw new Exception();
}
}
SCAN_DEVICE_FOLDER = Convert.ToBoolean(xGetElement.Element("DeviceFileScan").Value);
SCAN_DEVICE_FOLDER_TYPE = xGetElement.Element("DeviceFileScanType").Value;
SCAN_DEVICE_FOLDER_POS = xGetElement.Element("DeviceFileScanPos").Value;
if (SCAN_DEVICE_FOLDER) {
if (Base.CheckPath(SCAN_DEVICE_FOLDER_POS)) {
if (Directory.Exists(SCAN_DEVICE_FOLDER_POS) == false) {
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"ClientInfo read failed.(Scan device folder not exist)[SystemX.Common : SystemX.Net.ClientInfo]", ConsoleColor.Yellow, LogMessageLevel.DEBUG);
throw new Exception();
}
}
else
{
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"ClientInfo read failed.(Scan device folder name error)[SystemX.Common : SystemX.Net.ClientInfo]", ConsoleColor.Yellow, LogMessageLevel.DEBUG);
throw new Exception();
}
}*/
xEle = xGetElement.Element("SimpleLookUpOption");
bool bValue = false;
//string strValue;
if (xEle?.IsEmpty == false) {
if (bool.TryParse(xEle.Value, out bValue))
SIMPLE_LOOKUP_OPTION = Convert.ToBoolean(xEle.Value);
}
xEle = xGetElement.Element("IssueWorkerWaitTime_ms");
double dValue = double.NaN;
if (xEle?.IsEmpty == false) {
if(double.TryParse(xEle.Value, out dValue))
ISSUE_WORKER_WAIT_TIME_ms = Convert.ToDouble(xEle.Value);
}
xEle = xGetElement.Element("SessionTimeout_s");
if (xGetElement.Element("SessionTimeout_s")?.IsEmpty == false) {
dValue = double.NaN;
if (double.TryParse(xEle.Value, out dValue))
SESSION_TIMEOUT_TIME_S = Convert.ToDouble(xEle.Value);
}
//TODO : Client ALIS FTP
xEle = xGetElement.Element("UseFTP");
if (xEle?.IsEmpty == false)
{
if (bool.TryParse(xEle.Value, out bValue))
FTP_Use = bValue;
}
else
FTP_Use = false;
xEle = xGetElement.Element("IPAddressFTP");
if (xEle?.IsEmpty == false)
FTP_IPAddress = xEle.Value;
else
FTP_IPAddress = "0.0.0.0";
xEle = xGetElement.Element("PortFTP");
if (xEle?.IsEmpty == false)
FTP_Port = xEle.Value;
else
FTP_Port = "21";
xEle = xGetElement.Element("AccountFTP");
if (xEle?.IsEmpty == false)
FTP_Account = xEle.Value;
else
FTP_Account = "";
xEle = xGetElement.Element("PasswordFTP");
if (xEle?.IsEmpty == false)
FTP_Password = xEle.Value;
else
FTP_Password = "";
}
}
catch (Exception e) {
READ_INFO_STATE = false;
MessageOutput.ConsoleWrite(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss>>") + @"ClientInfo read failed.[SystemX.Common : SystemX.Net.ClientInfo]\r\n" + e.Message, ConsoleColor.Yellow, LogMessageLevel.DEBUG);
}
return READ_INFO_STATE;
}
}
}