Compare commits

...

22 Commits

Author SHA1 Message Date
4b73deabf3 Merge branch 'master' of https://git.e1soft.co.kr/T001084/DDUtility 2025-03-27 13:34:20 +09:00
68d51f64d0 Ver 2025.03.25.0
TibSimulator Patch:: AutoReply Enable의 경우, 텍스트박스에 출력하지 않고 메시지 즉시전송
2025-03-27 13:33:21 +09:00
jungwoois
15a0127778 Deply 2025.03.25.0 2025-03-25 17:22:15 +09:00
e7a8c36412 Ver 2025.03.25.0
FrmLogParser :: LogFile DragDrop 패치
2025-03-25 17:06:01 +09:00
jungwoois
0507461566 Depoly 2025-03-20 16:54:12 +09:00
d9d9d7b71f Ver 2025.03.20.0
:: SECS 메시지. 한글패치
2025-03-20 16:38:08 +09:00
0ddef9106b Ver 2025.03.19.4
:: TibSimulator Display Patch
2025-03-19 15:44:34 +09:00
7b11a3e1b1 Ver 2025.03.19.3
:: FrmSimulator Disable Patch
2025-03-19 14:40:27 +09:00
jungwoois
1d77f7a2cd Ver 2025.03.19.2 2025-03-19 13:38:31 +09:00
fe76ce56d4 Ver 2025.03.19.0
FrmEqSelector 로그파일 목록수집 개선(2회 to 1회)
FrmServerLog 파일명 중복에 따른 다운로드 파일명 수정
2025-03-19 13:12:53 +09:00
jungwoois
0c12d15092 Ver 2025.03.18.05 2025-03-18 15:12:57 +09:00
f3d11daf94 한글 Encoding, 병합시 파일시간 기준 2025-03-18 15:00:37 +09:00
fda27adace 파일일자 변경 ToLocalTime 2025-03-18 13:46:23 +09:00
f57a9ae1ff Ver.2025.03.18.2 2025-03-18 11:43:59 +09:00
1ee9e948d9 ViewList 배포 포함 2025-03-18 11:24:22 +09:00
63897c889e 충돌병합 2025-03-18 10:58:56 +09:00
29a0c365c5 Ver 2025.03.18.0 2025-03-18 10:50:14 +09:00
1ffb8e0785 FrmServerLog 2025-03-18 10:49:29 +09:00
05390839fc FrmServerLog 추가 (개발중...) 2025-03-17 17:42:03 +09:00
4f59f1ab2f HSMS 로그파일 갱신오류 2025-03-17 10:52:33 +09:00
010aa6aa49 Ver. 2025.03.14.0 2025-03-14 14:58:31 +09:00
c3e6aad895 Ver. 2025.03.14.0 2025-03-14 09:36:32 +09:00
22 changed files with 1208 additions and 262 deletions

View File

@@ -6,7 +6,7 @@
<appSettings>
<add key="ClientSettingsProvider.ServiceUri" value=""/>
<add key="BULK_VIEWER" value="ViewList.xml" />
</appSettings>
</appSettings>
<system.web>
<membership defaultProvider="ClientAuthenticationMembershipProvider">
<providers>

View File

@@ -35,7 +35,7 @@
<WebPage>index.htm</WebPage>
<TrustUrlParameters>true</TrustUrlParameters>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>2025.01.07.0</ApplicationVersion>
<ApplicationVersion>2025.03.25.0</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<CreateDesktopShortcut>true</CreateDesktopShortcut>
<PublishWizardCompleted>true</PublishWizardCompleted>
@@ -404,6 +404,12 @@
<Compile Include="LOGPARSER\FrmEqSelector.Designer.cs">
<DependentUpon>FrmEqSelector.cs</DependentUpon>
</Compile>
<Compile Include="MESDOWNLOADER\FrmServerLog.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MESDOWNLOADER\FrmServerLog.Designer.cs">
<DependentUpon>FrmServerLog.cs</DependentUpon>
</Compile>
<Compile Include="MESDOWNLOADER\ProgressForm.cs">
<SubType>Form</SubType>
</Compile>
@@ -522,6 +528,9 @@
<EmbeddedResource Include="LOGPARSER\FrmWorkFlow.resx">
<DependentUpon>FrmWorkFlow.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MESDOWNLOADER\FrmServerLog.resx">
<DependentUpon>FrmServerLog.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MONGO\FrmFDCMongo.resx">
<DependentUpon>FrmFDCMongo.cs</DependentUpon>
</EmbeddedResource>
@@ -623,6 +632,16 @@
<IncludeHash>True</IncludeHash>
<FileType>File</FileType>
</PublishFile>
<PublishFile Include="ViewList.xml">
<Visible>False</Visible>
<Group>
</Group>
<TargetPath>
</TargetPath>
<PublishState>Include</PublishState>
<IncludeHash>True</IncludeHash>
<FileType>File</FileType>
</PublishFile>
</ItemGroup>
<ItemGroup>
<Analyzer Include="..\packages\AWSSDK.SecurityToken.3.7.100.14\analyzers\dotnet\cs\AWSSDK.SecurityToken.CodeAnalysis.dll" />

View File

@@ -7,6 +7,6 @@ using System.Threading.Tasks;
namespace DDUtilityApp
{
public enum AccessType { SMB, FTP, FTPS, SFTP };
public enum AccessType { SMB, FTP, FTPS, SFTP, LOCAL };
}

View File

@@ -1,8 +1,11 @@
using JWH;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Drawing;
using System.Windows.Forms;
using Telerik.WinControls.UI;
using static DDUtilityApp.GlobalVariable;
namespace DDUtilityApp
{
@@ -11,7 +14,7 @@ namespace DDUtilityApp
public object SelectedObject { get; set; } = null;
public Dictionary<string, object> Buttons { get; set; } = new Dictionary<string, object>();
public List<DynamicControl> Buttons { get; set; } = new List<DynamicControl>();
public FrmMain()
{
@@ -21,7 +24,7 @@ namespace DDUtilityApp
this.SetEventHandler();
}
public FrmMain(Dictionary<string, object> args) : this()
public FrmMain(List<DynamicControl> args) : this()
{
this.Buttons = args;
this.SetButtons();
@@ -48,21 +51,23 @@ namespace DDUtilityApp
{
try
{
eUserLevel userLevel = GlobalVariable.Instance.UserLevel;
int btnWidth = 200;
int btnHeight = 32;
int tabIndex = 0;
int tabIndex = 10;
List<Button> lstControls = new List<Button>();
foreach(string name in this.Buttons.Keys)
foreach(DynamicControl obj in this.Buttons)
{
object obj = this.Buttons[name];
Button button = new Button();
button.Text = name;
button.Text = obj.Name;
button.Size = new Size(btnWidth, btnHeight);
button.Dock = DockStyle.Top;
button.TabIndex = tabIndex++;
button.Tag = obj;
button.Tag = obj.Value;
button.Visible = obj.Visible;
if (obj.Visible == false && userLevel > eUserLevel.Normal) button.Visible = true;
button.Click += Button_Click;
lstControls.Add(button);
}

View File

@@ -1,4 +1,5 @@
using JWH;
using log4net.Core;
using System;
using System.ComponentModel;
using System.Configuration;
@@ -31,7 +32,7 @@ namespace DDUtilityApp
/// <summary>
/// 로그파일 다운로드 경로 jhlim 20250202
/// </summary>
public string MesDownloadPath { get; set; }
public string DownloadPathServerLog { get; set; }
/// <summary>
/// Workflow 다운로드 경로
@@ -56,6 +57,8 @@ namespace DDUtilityApp
public Size FormSize { get; set; } = new Size(1300, 750);
public eUserLevel UserLevel { get; set; } = eUserLevel.None;
#region [ LogParser ]
public string EisParser_GridHeader { get; set; } = string.Empty;
@@ -106,22 +109,32 @@ namespace DDUtilityApp
}
}
/// <summary>
/// Loading AppSettings
/// </summary>
private void LodConfig()
{
// DefaultPath
string defaultPath = ConfigurationManager.AppSettings["DefaultPath"];
if (string.IsNullOrEmpty(defaultPath)) defaultPath = $@"%MyDocuments%\DDUtility\";
this.DefaultPath = defaultPath.Replace("%MyDocuments%", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
this.DownloadPath = $@"{this.DefaultPath}Download\";
this.WorkflowPath = $@"{this.DefaultPath}Workflow\";
this.MesDownloadPath = $@"{this.DefaultPath}MesDownload\"; //jhlim 20250202
this.DownloadPath = Path.Combine(this.DefaultPath, "Download");
this.WorkflowPath = Path.Combine(this.DefaultPath, "Workflow");
this.DownloadPathServerLog = Path.Combine(this.DefaultPath, "DownloadServer");
}
/// <summary>
/// Loading Setting.xml
/// </summary>
public void LoadSetting()
{
this.LoadSetting($@"{this.DefaultPath}Setting.xml");
}
/// <summary>
/// Loading Setting File
/// </summary>
/// <param name="filename"></param>
private void LoadSetting(string filename)
{
try
@@ -208,6 +221,14 @@ namespace DDUtilityApp
}
}
public enum eUserLevel
{
None = 0,
Normal = 1,
Admin = 16,
SupperAdmin = 128
}
}
}

View File

@@ -20,6 +20,7 @@ using System.IO;
using System.Linq;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using Telerik.WinControls.UI;
@@ -55,6 +56,8 @@ namespace DDUtilityApp.LOGPARSER
public SECSDefine SECSDefine { get; set; } = null;
private int InitializeStatus { get; set; } = 0;
#endregion
#region [ FrmEqSelector ] ---------------------------------------------
@@ -82,17 +85,11 @@ namespace DDUtilityApp.LOGPARSER
this.chkUseSMB.Visible = false;
this.tabControl1.SelectedIndex = 0;
this.tboxModelDescription.Font = font;
this.GridEquipments_Setting();
this.GridLogFiles_Setting(this.gridLogFiles); //jhlim 20250202
this.GridLogFiles_Setting(this.gridHsms); //jhlim 20250202
this.GridLogFiles_Setting(this.gridWorkflow); //jhlim 20250202
this.GridModelDetail_Setting();
}
protected void SetEventHandler()
{
this.Load += FrmEquipments_Load;
this.Shown += this.FrmEqSelector_Shown;
this.FormClosing += FrmEqSelector_FormClosing;
this.FormClosed += this.FrmEqSelector_FormClosed;
this.Disposed += this.FrmEqSelector_Disposed;
@@ -113,12 +110,44 @@ namespace DDUtilityApp.LOGPARSER
this.gridLogFiles.CellDoubleClick += GridLogFiles_CellDoubleClick;
this.gridLogFiles.KeyDown += GridLogFiles_KeyDown;
//jhlim 20250202 start
this.gridWorkflow.CellDoubleClick += Grid_CellDoubleClick;
this.gridWorkflow.KeyDown += Grid_KeyDown;
this.gridHsms.CellDoubleClick += Grid_CellDoubleClick;
this.gridHsms.KeyDown += Grid_KeyDown;
//jhlim 20250202 end
}
private async void FrmEqSelector_Shown(object sender, EventArgs e)
{
await Task.Delay(200);
try
{
this.SuspendLayout();
this.GridEquipments_Setting();
this.GridLogFiles_Setting(this.gridLogFiles);
this.GridLogFiles_Setting(this.gridHsms);
this.GridLogFiles_Setting(this.gridWorkflow);
this.GridModelDetail_Setting();
this.InitializeStatus = 1;
this.SetLogServer();
if (this.Equipment != null) this.SetEquipment(this.Equipment);
else this.SetEquipment(this.ServerName, this.Equipment?.EquipmentID);
this.InitializeStatus = 0;
this.GridEquipments_SelectionChanged(this.gridEquipments, null);
this.SetSelectedLogFiles(this.SelectedLogFiles);
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
finally
{
this.InitializeStatus = 0;
this.ResumeLayout();
}
}
private void FrmEqSelector_Disposed(object sender, EventArgs e)
@@ -157,14 +186,6 @@ namespace DDUtilityApp.LOGPARSER
return base.ProcessCmdKey(ref msg, keyData);
}
private void FrmEquipments_Load(object sender, EventArgs e)
{
this.SetLogServer();
if (this.Equipment != null) this.SetEquipment(this.Equipment);
else this.SetEquipment(this.ServerName, this.Equipment?.EquipmentID);
this.SetSelectedLogFiles(this.SelectedLogFiles);
}
private void FrmEqSelector_FormClosing(object sender, FormClosingEventArgs e)
{
}
@@ -218,7 +239,7 @@ namespace DDUtilityApp.LOGPARSER
{
if (this.tabControl1.SelectedTab == this.tabHSMS)
{
if (this.gridHsms.DataSource == null) return;
if (this.gridHsms.DataSource != null) return;
string remotePath = $"/{this.Account.DefaultPath}/{this.Equipment.EquipmentID}/THiRA_SECSGEM/HSMS";
switch (this.Account.Access)
@@ -356,7 +377,7 @@ namespace DDUtilityApp.LOGPARSER
{
GridViewEx grid = this.gridEquipments;
grid.TableElement.RowHeight = 20;
grid.MultiSelect = true;
grid.MultiSelect = false;
Dictionary<string, string> dicColumnText = new Dictionary<string, string>();
dicColumnText.Add("Facility", "");
@@ -424,12 +445,13 @@ namespace DDUtilityApp.LOGPARSER
{
try
{
if (this.InitializeStatus > 0) return;
if (this.gridEquipments.SelectedRows.Count < 1) return;
this.gridLogFiles.DataSource = null;
this.gridModelDetail.DataSource = null;
this.gridWorkflow.DataSource = null;
this.gridHsms.DataSource = null;
//if (this.tabControl1.TabPages.Contains(this.tabHSMS)) this.tabControl1.TabPages.Remove(this.tabHSMS);
EisEquipment equipment = this.gridEquipments.SelectedRows[0].DataBoundItem as EisEquipment;
if (equipment == null) return;
@@ -570,165 +592,6 @@ namespace DDUtilityApp.LOGPARSER
}
}
/// <summary>
/// [CheckPoint] 선택된 설비의 로그파일 목록을 표시한다.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void xGridEquipments_SelectionChanged(object sender, EventArgs e)
{
try
{
if (this.gridEquipments.SelectedRows.Count < 1) return;
this.gridLogFiles.DataSource = null;
this.gridModelDetail.DataSource = null;
EisEquipment equipment = this.gridEquipments.SelectedRows[0].DataBoundItem as EisEquipment;
if (equipment == null) return;
this.Cursor = Cursors.WaitCursor;
this.Equipment = equipment;
LogServer logServer = this.cboxServer.SelectedItem as LogServer;
string path = string.Empty;
#region [ Model Details ]
// 모델 버전 정보
EisModelDetails[] modelDetails = this.GetModelDetails(equipment);
this.gridModelDetail.AutoBinding(modelDetails);
this.gridModelDetail.SetRowForeColor("LockState", $"LockState = 'BLOCKED'", Color.LightGray);
foreach (GridViewRowInfo row in this.gridModelDetail.Rows)
{
EisModelDetails item = row.DataBoundItem as EisModelDetails;
if (item == null) continue;
if (item.Version == equipment.Version)
{
row.IsSelected = true;
row.IsCurrent = true;
break;
}
}
// 모델 정보
EisModelInfo[] modelInfo = this.GetModelInfo(equipment);
if (modelInfo?.Length > 0)
{
this.tboxModelDescription.Text = modelInfo[0].Description;
}
#endregion
#region [ LogFiles ]
if (logServer.NetworkAccount.ContainsKey(equipment.LogServerIP)) //jhlim 20250202 jj
{
// Checking Local IP-Address
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
foreach (UnicastIPAddressInformation ip in nic.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
if (ip.Address.ToString() == equipment.LogServerIP)
{
path = $@"{equipment.LogPath}\{equipment.EquipmentID}";
break;
}
}
}
}
// SMB (Server Message Block)
//if (string.IsNullOrEmpty(path) && this.chkUseSMB.Checked)
//{
// Account account = logServer.NetworkAccount[equipment.LogServerIP];
// int result = ExtensionAPI.ConnectRemoteServer(account.IPAddress, account.UserID, account.Password);
// if (result != 0 && result != 1219) { MessageBox.Show($@"네트워크 접근에 실패하였습니다. (Code:{result})"); return; }
// path = logServer.GetLogPath(equipment.LogServerIP, equipment.EquipmentID);
//}
if (string.IsNullOrEmpty(path) && this.chkUseSMB.Checked) //jhlim 20250202
{
Account account = logServer.NetworkAccount[equipment.LogServerIP];
object rtnObj = null;
// StpClientWrap 사용
//StpClientWrap.Initialize(equipment?.LogServerIP, "test", "daeduck!1");
//StpClientWrap.Connect();
var svrInfo = (DDUtilityApp.DATA.Account)GetNetworkAccount(equipment?.LogServerIP);
FtpsClient.Initialize(equipment?.LogServerIP, svrInfo.UserID, svrInfo.Password);
FtpsClient.Connect();
var remotePath = $"/{svrInfo.DefaultPath}/{equipment.EquipmentID}";
//var remotePath = $"{equipment.EquipmentID}";
// SFTP 파일 목록 가져오기
//rtnObj = StpClientWrap.GetSftpList(remotePath);
rtnObj = FtpsClient.GetFtpsList(remotePath);
if (rtnObj == null) return;
//StpClientWrap.IsDirectory( "/302304/THiRA_SECSGEM/HSMS")
//var hsmsEnabled = (StpClientWrap.IsDirExists( $"{remotePath}/THiRA_SECSGEM/HSMS"));
var hsmsEnabled = (FtpsClient.IsDirExists($"{remotePath}/THiRA_SECSGEM/HSMS"));
if (hsmsEnabled == false)
{
if (tabControl1.TabPages.Contains(tabHSMS))
{
tabControl1.TabPages.Remove(tabHSMS);
}
}
else
{
if (!tabControl1.TabPages.Contains(tabHSMS))
{
tabControl1.TabPages.Add(tabHSMS);
}
}
this.gridLogFiles.AutoBinding(GetFtpslogFiles(rtnObj));
// 연결 종료 //jhlim 20250202
//StpClientWrap.Disconnect();
FtpsClient.Disconnect();
}
else if (string.IsNullOrEmpty(path) == false)
{
// 로그 파일 목록
DirectoryInfo directory = new DirectoryInfo(path);
if (directory.Exists == false)
{
MessageBox.Show($@"폴더가 존재하지 않습니다" + Environment.NewLine + Environment.NewLine + $@"Path: {path}");
return;
}
LogFile[] logFiles = directory.GetFiles().ToClass<LogFile>().OrderByDescending(x => x.Name).ToArray();
this.gridLogFiles.AutoBinding(logFiles);
}
}
else
{
path = $@"{equipment.LogPath}\{equipment.EquipmentID}";
}
this.rstatus1.Text = path;
if (string.IsNullOrEmpty(path)) return;
#endregion
//// 로그 파일 목록
//DirectoryInfo directory = new DirectoryInfo(path);
//if (directory.Exists == false)
//{
// MessageBox.Show($@"폴더가 존재하지 않습니다" + Environment.NewLine + Environment.NewLine + $@"Path: {path}");
// return;
//}
//LogFile[] logFiles = directory.GetFiles().ToClass<LogFile>().OrderByDescending(x => x.Name).ToArray();
//this.gridLogFiles.AutoBinding(logFiles);
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
finally
{
this.Cursor = Cursors.Default;
}
}
private void GridEquipments_CellDoubleClick(object sender, GridViewCellEventArgs e)
{
try
@@ -911,7 +774,7 @@ namespace DDUtilityApp.LOGPARSER
}
}
MessageBox.Show($"{grid.SelectedRows.Count}개의 파일을 저장하였습니다.");
//MessageBox.Show($"{grid.SelectedRows.Count}개의 파일을 저장하였습니다.");
foreach (string file in downfiles)
System.Diagnostics.Process.Start(file);
}
@@ -1469,9 +1332,9 @@ namespace DDUtilityApp.LOGPARSER
Account = this.Account,
FullName = item.FullName,
Length = item.Size,
CreationTime = item.Modified,
LastAccessTime = item.Modified,
LastWriteTime = item.Modified
CreationTime = item.Created.ToLocalTime(),
LastAccessTime = item.Modified.ToLocalTime(),
LastWriteTime = item.Modified.ToLocalTime()
})
.OrderByDescending(x => x.Name)
.ToArray();

View File

@@ -300,7 +300,10 @@ namespace DDUtilityApp.LOGPARSER
{
ListViewItem lviewItem = this.lviewFiles.Items.Add(Path.GetFileName(filePath));
lviewItem.Checked = true;
lviewItem.Tag = filePath;
LogFile logFile = new LogFile(filePath);
logFile.Account = new Account();
logFile.Account.Access = AccessType.LOCAL;
lviewItem.Tag = logFile;
}
this.tboxEISInfo01.Clear();
@@ -951,6 +954,7 @@ namespace DDUtilityApp.LOGPARSER
private void BtnDeploySite_Click(object sender, EventArgs e)
{
Process.Start("IEXPLORE.EXE", "http://pms.e1soft.co.kr:8090/Deploy/eqview/");
Clipboard.SetText("http://pms.e1soft.co.kr:8090/Deploy/eqview/");
}
private void BtnTest01_Click(object sender, EventArgs e)
@@ -1310,6 +1314,7 @@ namespace DDUtilityApp.LOGPARSER
XLogger.Instance.Info(lviewItem.Text);
LogFile logFile = lviewItem.Tag as LogFile;
if (logFile == null) continue;
switch(logFile.Account.Access)
{
case AccessType.SMB:
@@ -1360,6 +1365,15 @@ namespace DDUtilityApp.LOGPARSER
break;
case AccessType.FTP:
break;
case AccessType.LOCAL:
{
destPath = Path.Combine(GlobalVariable.Instance.DownloadPath, "Local");
if (Directory.Exists(destPath) == false) Directory.CreateDirectory(destPath);
logFile.DestFullName = Path.Combine(destPath, logFile.FileName);
System.IO.File.Copy(logFile.FullName, logFile.DestFullName, true);
}
break;
}
lstFileName.Add(logFile.DestFullName);
@@ -1376,7 +1390,7 @@ namespace DDUtilityApp.LOGPARSER
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
XLogger.Instance.Fatal(ex, true);
return this.StandardCollection;
}
}

View File

@@ -3,6 +3,7 @@ using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http.Headers;
using System.Reflection;
using System.Text;
using System.Windows.Forms;
@@ -74,7 +75,7 @@ namespace DDUtilityApp.LOGPARSER.PARSER
}
catch (Exception ex01)
{
XLogger.Instance.Fatal(ex01);
XLogger.Instance.Fatal(ex01, true);
}
if (reader != null) reader.Close();
@@ -98,6 +99,7 @@ namespace DDUtilityApp.LOGPARSER.PARSER
Parser parser = null;
try
{
// 0.LogLevel 1.DateTime 2.Server
if (string.IsNullOrWhiteSpace(strLine)) return parser;
if (strLine.Length < this.LogDTime.Length) return parser;
string[] strValues = this.GetHeaderValues(strLine);
@@ -131,6 +133,10 @@ namespace DDUtilityApp.LOGPARSER.PARSER
{
parser = this.MES_Parser;
}
else if (strValues[2].Trim() == "TRACE")
{
return null;
}
else if (strValues[2].Trim() == "ADD" || strValues[1].Trim() == "DISPOSE")
{
parser = this.TID_Parser;
@@ -216,7 +222,7 @@ namespace DDUtilityApp.LOGPARSER.PARSER
try
{
MemoryStream stream = new MemoryStream(text.ConvertBytes());
StreamReader reader = new StreamReader(stream);
StreamReader reader = new StreamReader(stream, Encoding.Default);
SECSItem parent = null;
SECSItem item = null;
@@ -378,8 +384,13 @@ namespace DDUtilityApp.LOGPARSER.PARSER
dlg = new FrmEqSelector();
dlg.Owner = sender;
dlg.Size = new System.Drawing.Size(sender.Width - 60, sender.Height - 60);
dlg.StartPosition = FormStartPosition.CenterParent;
dlg.StartPosition = FormStartPosition.Manual;
int nWidth = sender.Width - 10;
int nHeight = sender.Height - 48;
int nLeft = sender.Left + ((sender.Width - nWidth) / 2);
int nTop = Math.Max(0, sender.Top) + ((sender.Height - nHeight)) - 10;
dlg.Size = new System.Drawing.Size(nWidth, nHeight);
dlg.Location = new System.Drawing.Point(nLeft, nTop);
dlg.ServerName = this.ServerName;
dlg.Equipment = sender.Equipment == null ? new EisEquipment() { EquipmentID = this.EquipmentID, Server = new LogServer(this.ServerName)} : sender.Equipment;
dlg.SelectedLogFiles = lstLogFile.ToArray();

View File

@@ -0,0 +1,272 @@
namespace DDUtilityApp.MESDOWNLOADER
{
partial class FrmServerLog
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
Telerik.WinControls.UI.TableViewDefinition tableViewDefinition4 = new Telerik.WinControls.UI.TableViewDefinition();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.panel1 = new System.Windows.Forms.Panel();
this.pnlAPList = new System.Windows.Forms.FlowLayoutPanel();
this.pnlCommand = new System.Windows.Forms.Panel();
this.btnDownPathOpen = new System.Windows.Forms.Button();
this.btnDownPathChange = new System.Windows.Forms.Button();
this.btnRefresh = new System.Windows.Forms.Button();
this.tboxDownPath = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.cboxServer = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
this.treeFolder = new System.Windows.Forms.TreeView();
this.gridFiles = new JWH.CONTROL.GridViewEx();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.panel1.SuspendLayout();
this.pnlCommand.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
this.splitContainer2.Panel1.SuspendLayout();
this.splitContainer2.Panel2.SuspendLayout();
this.splitContainer2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.gridFiles)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.gridFiles.MasterTemplate)).BeginInit();
this.SuspendLayout();
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer1.Location = new System.Drawing.Point(3, 3);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.panel1);
this.splitContainer1.Panel1MinSize = 94;
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.splitContainer2);
this.splitContainer1.Size = new System.Drawing.Size(794, 569);
this.splitContainer1.SplitterDistance = 94;
this.splitContainer1.TabIndex = 0;
//
// panel1
//
this.panel1.Controls.Add(this.pnlAPList);
this.panel1.Controls.Add(this.pnlCommand);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(794, 94);
this.panel1.TabIndex = 0;
//
// pnlAPList
//
this.pnlAPList.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlAPList.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
this.pnlAPList.Location = new System.Drawing.Point(722, 0);
this.pnlAPList.Name = "pnlAPList";
this.pnlAPList.Padding = new System.Windows.Forms.Padding(0, 10, 0, 0);
this.pnlAPList.Size = new System.Drawing.Size(72, 94);
this.pnlAPList.TabIndex = 1;
//
// pnlCommand
//
this.pnlCommand.Controls.Add(this.btnDownPathOpen);
this.pnlCommand.Controls.Add(this.btnDownPathChange);
this.pnlCommand.Controls.Add(this.btnRefresh);
this.pnlCommand.Controls.Add(this.tboxDownPath);
this.pnlCommand.Controls.Add(this.label2);
this.pnlCommand.Controls.Add(this.cboxServer);
this.pnlCommand.Controls.Add(this.label1);
this.pnlCommand.Dock = System.Windows.Forms.DockStyle.Left;
this.pnlCommand.Location = new System.Drawing.Point(0, 0);
this.pnlCommand.Name = "pnlCommand";
this.pnlCommand.Size = new System.Drawing.Size(722, 94);
this.pnlCommand.TabIndex = 0;
//
// btnDownPathOpen
//
this.btnDownPathOpen.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnDownPathOpen.Location = new System.Drawing.Point(622, 62);
this.btnDownPathOpen.Name = "btnDownPathOpen";
this.btnDownPathOpen.Size = new System.Drawing.Size(90, 23);
this.btnDownPathOpen.TabIndex = 6;
this.btnDownPathOpen.Text = "Open";
this.btnDownPathOpen.UseVisualStyleBackColor = true;
//
// btnDownPathChange
//
this.btnDownPathChange.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnDownPathChange.Location = new System.Drawing.Point(622, 37);
this.btnDownPathChange.Name = "btnDownPathChange";
this.btnDownPathChange.Size = new System.Drawing.Size(90, 23);
this.btnDownPathChange.TabIndex = 5;
this.btnDownPathChange.Text = "Change";
this.btnDownPathChange.UseVisualStyleBackColor = true;
//
// btnRefresh
//
this.btnRefresh.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnRefresh.Location = new System.Drawing.Point(622, 10);
this.btnRefresh.Name = "btnRefresh";
this.btnRefresh.Size = new System.Drawing.Size(90, 23);
this.btnRefresh.TabIndex = 4;
this.btnRefresh.Text = "Refresh";
this.btnRefresh.UseVisualStyleBackColor = true;
//
// tboxDownPath
//
this.tboxDownPath.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tboxDownPath.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tboxDownPath.Location = new System.Drawing.Point(136, 38);
this.tboxDownPath.Multiline = true;
this.tboxDownPath.Name = "tboxDownPath";
this.tboxDownPath.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.tboxDownPath.Size = new System.Drawing.Size(480, 47);
this.tboxDownPath.TabIndex = 3;
//
// label2
//
this.label2.Location = new System.Drawing.Point(10, 38);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(120, 23);
this.label2.TabIndex = 2;
this.label2.Text = "로컬디렉토리 : ";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// cboxServer
//
this.cboxServer.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.cboxServer.FormattingEnabled = true;
this.cboxServer.Location = new System.Drawing.Point(136, 12);
this.cboxServer.Name = "cboxServer";
this.cboxServer.Size = new System.Drawing.Size(480, 20);
this.cboxServer.TabIndex = 1;
//
// label1
//
this.label1.Location = new System.Drawing.Point(10, 10);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(120, 23);
this.label1.TabIndex = 0;
this.label1.Text = "Server : ";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// splitContainer2
//
this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer2.Location = new System.Drawing.Point(0, 0);
this.splitContainer2.Name = "splitContainer2";
//
// splitContainer2.Panel1
//
this.splitContainer2.Panel1.Controls.Add(this.treeFolder);
//
// splitContainer2.Panel2
//
this.splitContainer2.Panel2.Controls.Add(this.gridFiles);
this.splitContainer2.Size = new System.Drawing.Size(794, 471);
this.splitContainer2.SplitterDistance = 264;
this.splitContainer2.TabIndex = 0;
//
// treeFolder
//
this.treeFolder.Dock = System.Windows.Forms.DockStyle.Fill;
this.treeFolder.Location = new System.Drawing.Point(0, 0);
this.treeFolder.Name = "treeFolder";
this.treeFolder.Size = new System.Drawing.Size(264, 471);
this.treeFolder.TabIndex = 0;
//
// gridFiles
//
this.gridFiles.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.gridFiles.ColumnResizeKey = System.Windows.Forms.Keys.F6;
this.gridFiles.Dock = System.Windows.Forms.DockStyle.Fill;
this.gridFiles.Location = new System.Drawing.Point(0, 0);
//
//
//
this.gridFiles.MasterTemplate.ViewDefinition = tableViewDefinition4;
this.gridFiles.Name = "gridViewEx1";
//
//
//
this.gridFiles.RootElement.ControlBounds = new System.Drawing.Rectangle(0, 0, 240, 150);
this.gridFiles.Size = new System.Drawing.Size(526, 471);
this.gridFiles.TabIndex = 0;
//
// FrmServerLog
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 575);
this.Controls.Add(this.splitContainer1);
this.Name = "FrmServerLog";
this.Padding = new System.Windows.Forms.Padding(3);
this.Text = "FrmServerLog";
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.panel1.ResumeLayout(false);
this.pnlCommand.ResumeLayout(false);
this.pnlCommand.PerformLayout();
this.splitContainer2.Panel1.ResumeLayout(false);
this.splitContainer2.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
this.splitContainer2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.gridFiles.MasterTemplate)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.gridFiles)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.SplitContainer splitContainer2;
private System.Windows.Forms.FlowLayoutPanel pnlAPList;
private System.Windows.Forms.Panel pnlCommand;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox tboxDownPath;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.ComboBox cboxServer;
private System.Windows.Forms.Button btnDownPathOpen;
private System.Windows.Forms.Button btnDownPathChange;
private System.Windows.Forms.Button btnRefresh;
private System.Windows.Forms.TreeView treeFolder;
private JWH.CONTROL.GridViewEx gridFiles;
}
}

View File

@@ -0,0 +1,556 @@
using DDUtilityApp.LOGPARSER.DATA;
using JWH;
using JWH.NETWORK;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using Telerik.WinControls.UI;
namespace DDUtilityApp.MESDOWNLOADER
{
public partial class FrmServerLog: Form
{
private DataSet DSSetting { get; set; } = null;
private DataTable DTFileInfo { get; set; } = null;
public FrmServerLog()
{
InitializeComponent();
this.SetLayout();
this.SetEventHandler();
}
private void SetLayout()
{
try
{
#if DEBUG
this.Text = $"ServerLog Download - Ver. {Application.ProductVersion} : DEBUG";
#else
this.Text = $"ServerLog Download - Ver. {Application.ProductVersion}";
#endif
this.Font = new Font("돋움체", 9);
this.CreateDTFileInfo();
this.SetCboxServer();
this.GridFiles_Setting();
this.tboxDownPath.ReadOnly = true;
this.tboxDownPath.Text = GlobalVariable.Instance.DownloadPathServerLog;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
private void SetEventHandler()
{
try
{
this.cboxServer.SelectedIndexChanged += this.CboxServer_SelectedIndexChanged;
this.btnRefresh.Click += this.BtnRefresh_Click;
this.btnDownPathChange.Click += this.BtnDownPathChange_Click;
this.btnDownPathOpen.Click += this.BtnDownPathOpen_Click;
this.treeFolder.AfterSelect += this.TreeFolder_AfterSelect;
this.gridFiles.CellDoubleClick += this.GridFiles_CellDoubleClick;
this.gridFiles.KeyDown += this.GridFiles_KeyDown;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
#region [ Controls ] --------------------------------------------------
/// <summary>
/// 서버선택
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CboxServer_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
this.GridFiles_Setting();
if (this.DSSetting == null || this.DSSetting.Tables.Contains("Item") == false) return;
int value = (int)this.cboxServer.SelectedValue;
var query = from dtServer in DSSetting.Tables["Server"].AsEnumerable()
join dtItem in DSSetting.Tables["Item"].AsEnumerable()
on dtServer.Field<int>("Server_Id") equals dtItem.Field<int>("Server_Id")
where dtItem.Field<int>("Server_Id") == value
select new
{
name = dtServer.Field<string>("name"),
nameap = dtItem.Field<string>("name"),
url = dtItem.Field<string>("url"),
dir = dtItem.Field<string>("dir"),
conkey = dtItem.Field<string>("conkey"),
Server_Id = dtItem.Field<int>("Server_Id"),
};
foreach (Control control in this.pnlAPList.Controls)
control.Dispose();
this.pnlAPList.Controls.Clear();
int index = 0;
foreach (var item in query)
{
string[] splitIP = item.url.Split('.');
CheckBox chk = new CheckBox()
{
Text = $"{item.nameap} ({splitIP[splitIP.Length - 1]})",
AutoSize = true,
Checked = true,
Padding = new Padding(5, 3, 3, 5),
Margin = new Padding(0),
Tag = item.nameap,
};
index++;
this.pnlAPList.Controls.Add(chk);
}
this.treeFolder.Nodes.Clear();
TreeNode rootNode = this.treeFolder.Nodes.Add("ROOT");
this.treeFolder.SelectedNode = rootNode;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
/// <summary>
/// 현재 (Treeview.SelectedNode)경로의 파일목록 갱신
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnRefresh_Click(object sender, EventArgs e)
{
try
{
this.Cursor = Cursors.WaitCursor;
this.SuspendLayout();
this.DTFileInfo.Rows.Clear();
this.gridFiles.DataSource = null;
int server_Id = (int)this.cboxServer.SelectedValue;
TreeNode currentNode = this.treeFolder.SelectedNode;
if (currentNode == null) return;
string subPath = currentNode.Tag as string;
foreach (Control control in this.pnlAPList.Controls)
{
CheckBox chk = control as CheckBox;
if (chk == null || chk.Checked == false) continue;
string nameap = control.Tag as string;
if (string.IsNullOrEmpty(nameap)) continue;
DataRow[] rows = this.DSSetting.Tables["Item"].Select($"Server_Id='{server_Id}' AND name='{nameap}'");
foreach (DataRow row in rows)
{
string url = row["url"] as string;
string dir = row["dir"] as string;
string conkey = row["conkey"] as string;
string userId = this.GetUserIdFromConkey(conkey);
string password = this.GetPasswordFromConkey(conkey);
string currentPath = string.IsNullOrEmpty(subPath) ? dir : System.IO.Path.Combine(dir, subPath);
FtpsClient.Initialize(url, userId, password);
var files = FtpsClient.GetFtpsList(currentPath);
foreach (var file in files)
{
DataRow rowFile = this.DTFileInfo.NewRow();
rowFile["nameap"] = nameap;
rowFile["Name"] = file.Name;
rowFile["FileName"] = file.Name;
rowFile["Size"] = this.GetFileSize(file.Size, FileSizeType.MB);
rowFile["Modified"] = file.Modified.ToLocalTime();
rowFile["Type"] = file.Type;
rowFile["url"] = url;
rowFile["dir"] = dir;
rowFile["subpath"] = subPath;
rowFile["userId"] = userId;
rowFile["password"] = password;
this.DTFileInfo.Rows.Add(rowFile);
}
}
}
this.DTFileInfo.DefaultView.RowFilter = $"Type='Directory'";
this.DTFileInfo.DefaultView.Sort = "FileName ASC";
foreach (DataRow row in this.DTFileInfo.DefaultView.ToTable(true, "FileName").Rows)
{
string fileName = row["FileName"] as string;
if (string.IsNullOrEmpty(fileName)) continue;
if (currentNode.Nodes.ContainsKey(fileName)) continue;
TreeNode node = currentNode.Nodes.Add(fileName, fileName);
node.Tag = string.IsNullOrEmpty(currentNode.Tag as string) ? fileName : System.IO.Path.Combine(currentNode.Tag as string, fileName);
}
currentNode.Expand();
this.DTFileInfo.DefaultView.RowFilter = "Type='File'";
this.DTFileInfo.DefaultView.Sort = "Modified DESC";
this.gridFiles.DataSource = this.DTFileInfo;
this.gridFiles.BestFitColumns();
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
finally
{
this.ResumeLayout();
this.Cursor = Cursors.Default;
}
}
/// <summary>
/// 로그파일 다운로드 폴더설정
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnDownPathChange_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrEmpty(this.tboxDownPath.Text))
this.tboxDownPath.Text = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
using (FolderBrowserDialog dlg = new FolderBrowserDialog())
{
dlg.SelectedPath = this.tboxDownPath.Text;
if (dlg.ShowDialog() == DialogResult.OK)
{
this.tboxDownPath.Text = dlg.SelectedPath;
GlobalVariable.Instance.DownloadPathServerLog = this.tboxDownPath.Text;
}
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
/// <summary>
/// 로그파일 다운로드 폴더열기
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnDownPathOpen_Click(object sender, EventArgs e)
{
try
{
string path = System.IO.Path.Combine(this.tboxDownPath.Text, this.cboxServer.Text);
Process.Start("explorer.exe", path);
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
private void TreeFolder_AfterSelect(object sender, TreeViewEventArgs e)
{
this.BtnRefresh_Click(this.btnRefresh, new EventArgs());
}
#endregion
#region [ GridFiles ] -------------------------------------------------
private void GridFiles_Setting()
{
try
{
this.gridFiles.SelectionMode = GridViewSelectionMode.FullRowSelect;
this.gridFiles.MultiSelect = true;
this.gridFiles.TableElement.RowHeight = 22;
this.gridFiles.Columns.Clear();
this.gridFiles.Columns.Add(new GridViewTextBoxColumn("nameap") { HeaderText = "Server", ReadOnly = true });
this.gridFiles.Columns.Add(new GridViewTextBoxColumn("Name") { ReadOnly=true, IsVisible = false });
this.gridFiles.Columns.Add(new GridViewTextBoxColumn("FileName") { ReadOnly = true });
this.gridFiles.Columns.Add(new GridViewTextBoxColumn("Size") { ReadOnly = true, TextAlignment = ContentAlignment.MiddleRight });
this.gridFiles.Columns.Add(new GridViewDateTimeColumn("Modified") { ReadOnly = true });
this.gridFiles.Columns.Add(new GridViewTextBoxColumn("Type") { ReadOnly = true });
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
private void GridFiles_KeyDown(object sender, KeyEventArgs e)
{
try
{
if (e.KeyCode != Keys.Enter) return;
this.GridFiles_CellDoubleClick(this.gridFiles, null);
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
/// <summary>
/// FileDownload
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void GridFiles_CellDoubleClick(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
{
try
{
List<DataRow> rows = new List<DataRow>();
List<string> downloads = new List<string>();
if (e != null)
{
// 더블클릭된 파일 추가
DataRowView view = e.Row.DataBoundItem as DataRowView;
if (view != null && view.Row != null) rows.Add(view.Row);
}
else
{
// 선택된 파일들 추가
List<DataRow> rowsSRC = new List<DataRow>();
foreach(GridViewRowInfo row in this.gridFiles.SelectedRows)
{
DataRowView view = row.DataBoundItem as DataRowView;
if (view != null && view.Row != null) rowsSRC.Add(view.Row);
}
// 수정일자 정렬
foreach (DataRow row in rowsSRC.OrderBy(row => row.Field<DateTime>("Modified")))
rows.Add(row);
}
// 다운로드
bool hasZip = false;
using (ProgressForm frmProgress = new ProgressForm(rows.Count))
{
int countDown = 0;
frmProgress.Show();
frmProgress.UpdateProgress(string.Empty, countDown);
foreach(DataRow row in rows)
{
string nameap = row["nameap"] as string;
string fileName = row["FileName"] as string;
string url = row["url"] as string;
string dir = row["dir"] as string;
string subpath = row["subpath"] as string;
string userId = row["userId"] as string;
string password = row["password"] as string;
string fileNameDST = $"{nameap}_{fileName}";
string extension = System.IO.Path.GetExtension(fileNameDST);
if (string.Compare(extension, ".Zip", true) == 0) hasZip = true;
else if (string.Compare(extension, ".Log", false) != 0) fileNameDST += ".Log";
List<string> paths = new List<string>();
if (!string.IsNullOrEmpty(dir)) paths.Add(dir);
if (!string.IsNullOrEmpty(subpath)) paths.Add(subpath);
if (!string.IsNullOrEmpty(fileName)) paths.Add(fileName);
string pathSRC = System.IO.Path.Combine(paths.ToArray());
string pathDST = System.IO.Path.Combine(this.tboxDownPath.Text, this.cboxServer.Text, fileNameDST);
frmProgress.UpdateProgress($"{fileName}", countDown);
FtpsClient.Disconnect();
FtpsClient.Initialize(url, userId, password);
bool isSuccess = await Task.Run(() =>
FtpsClient.DownloadFtpsFile(pathSRC, pathDST)
);
countDown++;
if (isSuccess) downloads.Add(pathDST);
}
}
if (downloads.Count < 1)
{
MessageBox.Show($"다운로드된 파일이 없습니다.", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
// FileMerge
if (downloads.Count == 1)
{
string fileName = downloads[0];
if (hasZip)
{
string path = System.IO.Path.Combine(this.tboxDownPath.Text, this.cboxServer.Text, fileName);
string command = $"/select,{path}";
Process.Start($"explorer.exe", command);
}
else
{
string extension = System.IO.Path.GetExtension(fileName);
if (string.Compare(extension, ".Log", true) != 0)
System.IO.File.Move(fileName, fileName += ".log");
System.Diagnostics.Process.Start(fileName);
}
}
else
{
if (hasZip)
{
string path = System.IO.Path.Combine(this.tboxDownPath.Text, this.cboxServer.Text);
string command = $"/select,{path}";
Process.Start($"explorer.exe", path);
}
else
{
string fileName = Util.GetFileMerge(downloads);
string extension = System.IO.Path.GetExtension(fileName);
if (string.Compare(extension, ".Log", true) != 0)
System.IO.File.Move(fileName, fileName += ".log");
System.Diagnostics.Process.Start(fileName);
}
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
#endregion
/// <summary>
/// Server + File 저장테이블 생성
/// </summary>
/// <returns></returns>
private void CreateDTFileInfo()
{
try
{
this.DTFileInfo = new DataTable();
this.DTFileInfo.Columns.Add("nameap", typeof(string));
this.DTFileInfo.Columns.Add("Name", typeof(string));
this.DTFileInfo.Columns.Add("FileName", typeof(string));
this.DTFileInfo.Columns.Add("Size", typeof(string));
this.DTFileInfo.Columns.Add("Modified", typeof(DateTime));
this.DTFileInfo.Columns.Add("Type", typeof(string));
this.DTFileInfo.Columns.Add("url", typeof(string));
this.DTFileInfo.Columns.Add("dir", typeof(string));
this.DTFileInfo.Columns.Add("subpath", typeof(string));
this.DTFileInfo.Columns.Add("userId", typeof(string));
this.DTFileInfo.Columns.Add("password", typeof(string));
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
/// <summary>
/// XML 설정파일 로딩 및 CboxServer 셋팅
/// </summary>
private void SetCboxServer()
{
try
{
string path = ConfigurationManager.AppSettings["BULK_VIEWER"];
this.DSSetting = XmlToDsConverter.ConvertXmlToDataSet(path);
if (this.DSSetting == null || this.DSSetting.Tables.Count < 1 || this.DSSetting.Tables.Contains("Server") == false)
{
MessageBox.Show("XML 데이터를 불러올 수 없습니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
this.cboxServer.DropDownStyle = ComboBoxStyle.DropDownList;
this.cboxServer.DataSource = DSSetting.Tables["Server"];
this.cboxServer.DisplayMember = "name";
this.cboxServer.ValueMember = "Server_Id";
this.cboxServer.SelectedIndex = -1;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
/// <summary>
/// conkey to Base64
/// </summary>
/// <param name="conkey"></param>
/// <returns></returns>
private string GetUserIdFromConkey(string conkey)
{
try
{
string value = Util.GetBase64(conkey);
string[] items = value.Split(':');
if (items == null || items.Length < 1) return string.Empty;
return items[0];
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
return string.Empty;
}
}
/// <summary>
/// conkey to Base64
/// </summary>
/// <param name="conkey"></param>
/// <returns></returns>
private string GetPasswordFromConkey(string conkey)
{
try
{
string value = Util.GetBase64(conkey);
string[] items = value.Split(':');
if (items == null || items.Length < 2) return string.Empty;
return items[1];
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
return string.Empty;
}
}
public string GetFileSize(long length, FileSizeType format = FileSizeType.Auto)
{
int index = 0;
int nFormat = (int)format;
double value = length;
for (index = 0; index < nFormat; index++)
{
if (format == FileSizeType.Auto && value < 1024) break;
value /= 1024;
}
return $"{value.ToString("N2")} {(FileSizeType)index}";
}
}
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="gridFiles.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -32,7 +32,7 @@ namespace DDUtilityApp.MESDOWNLOADER
private void ServerLog_Shown(object sender, EventArgs e)
{
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
txtPath.Text = GlobalVariable.Instance.MesDownloadPath; //Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
txtPath.Text = GlobalVariable.Instance.DownloadPathServerLog; //Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
SetGridView();
}
private void ServerLog_Resize(object sender, EventArgs e)
@@ -66,7 +66,7 @@ namespace DDUtilityApp.MESDOWNLOADER
{
// 선택한 경로를 텍스트 박스에 표시
txtPath.Text = folderDialog.SelectedPath;
GlobalVariable.Instance.MesDownloadPath = folderDialog.SelectedPath;
GlobalVariable.Instance.DownloadPathServerLog = folderDialog.SelectedPath;
}
}
}
@@ -366,8 +366,16 @@ namespace DDUtilityApp.MESDOWNLOADER
// 데이터 테이블 생성 후 바인딩
foreach (var item in fileList)
{
dtFiles.Rows.Add(row.Cells["name"].Value, row.Cells["nameap"].Value, item.Name, item.Size.ToString("N0")
, item.Modified.ToString("yyyy-MM-dd HH:mm:ss"), item.Type, row.Cells["url"].Value, row.Cells["dir"].Value, userInfo[0], userInfo[1]);
dtFiles.Rows.Add(
row.Cells["name"].Value,
row.Cells["nameap"].Value,
item.Name, item.Size.ToString("N0"),
item.Modified.ToString("yyyy-MM-dd HH:mm:ss"),
item.Type,
row.Cells["url"].Value,
row.Cells["dir"].Value,
userInfo[0],
userInfo[1]);
}
}

View File

@@ -33,13 +33,13 @@ namespace DDUtilityApp.MESDOWNLOADER
try
{
using (StreamWriter writer = new StreamWriter(mergedFilePath, false)) // false: 새 파일 생성
using (StreamWriter writer = new StreamWriter(mergedFilePath, false, Encoding.Default))
{
foreach (string file in filePaths)
{
if (File.Exists(file))
{
using (StreamReader reader = new StreamReader(file))
using (StreamReader reader = new StreamReader(file, Encoding.Default))
{
writer.Write(reader.ReadToEnd());
}

View File

@@ -30,7 +30,6 @@ namespace DDUtilityApp
Application.SetCompatibleTextRenderingDefault(false);
Form frm = null;
if (args.Length > 0)
{
if (string.Compare(args[0], "FrmLogParser", true) == 0 && args.Length >= 3)
@@ -69,15 +68,16 @@ namespace DDUtilityApp
frmMain.FormBorderStyle = FormBorderStyle.FixedDialog;
#region [ ]
frmMain.Buttons.Add("EIS Log Viewer", new EisParser0());
frmMain.Buttons.Add("MES Log Download", typeof(MESDOWNLOADER.ServerLog));
//frmMain.Buttons.Add("MIS Log Viewer", new AgvParser()); // 제거
frmMain.Buttons.Add("FDC Mongo Viewer", typeof(MONGO.FrmFDCMongo));
frmMain.Buttons.Add("HSMS Converter", typeof(LOGPARSER.FrmHsmsViewer));
frmMain.Buttons.Add("TIB Simulator", typeof(TIBRENDEZVOUS.FrmSimulator01));
frmMain.Buttons.Add("TibcoConfig.Xml", typeof(ETC.FrmTIbcoConfig));
frmMain.Buttons.Add(new DynamicControl("EIS Log Viewer", new EisParser0()));
//frmMain.Buttons.Add("MES Log Download", typeof(MESDOWNLOADER.ServerLog));
frmMain.Buttons.Add(new DynamicControl("ServerLog Download", typeof(MESDOWNLOADER.FrmServerLog), false));
//frmMain.Buttons.Add("MIS Log Viewer", new AgvParser());
frmMain.Buttons.Add(new DynamicControl("FDC Mongo Viewer", typeof(MONGO.FrmFDCMongo)));
frmMain.Buttons.Add(new DynamicControl("HSMS Converter", typeof(LOGPARSER.FrmHsmsViewer)));
frmMain.Buttons.Add(new DynamicControl("TIB Simulator", typeof(TIBRENDEZVOUS.FrmSimulator01)));
frmMain.Buttons.Add(new DynamicControl("TibcoConfig.Xml", typeof(ETC.FrmTIbcoConfig)));
#if DEBUG
frmMain.Buttons.Add("FTP Test", typeof(SPECDOCUMENT.FrmSpecDocument));
frmMain.Buttons.Add(new DynamicControl("FTP Test", typeof(SPECDOCUMENT.FrmSpecDocument)));
#endif
#endregion
@@ -218,4 +218,24 @@ namespace DDUtilityApp
}
public class DynamicControl
{
public string Name { get; set; } = string.Empty;
public object Value { get; set; } = null;
public bool Visible { get; set; } = true;
public DynamicControl(string name, object value, bool visible = true)
{
this.Name = name;
this.Value = value;
this.Visible = visible;
}
}
}

View File

@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호가 자동으로
// 지정되도록 할 수 있습니다.
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2025.02.28.0")]
[assembly: AssemblyFileVersion("2025.02.28.0")]
[assembly: AssemblyVersion("2025.03.27.0")]
[assembly: AssemblyFileVersion("2025.03.27.0")]

View File

@@ -294,8 +294,13 @@
this.lviewSubject.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)));
this.lviewSubject.AutoScroll = true;
this.lviewSubject.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.lviewSubject.Location = new System.Drawing.Point(112, 46);
this.lviewSubject.Name = "lviewSubject";
//
//
//
this.lviewSubject.RootElement.ControlBounds = new System.Drawing.Rectangle(0, 0, 120, 95);
this.lviewSubject.Size = new System.Drawing.Size(350, 89);
this.lviewSubject.TabIndex = 13;
//
@@ -1201,6 +1206,7 @@
//
// gridValue
//
this.gridValue.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.gridValue.ColumnResizeKey = System.Windows.Forms.Keys.F6;
this.gridValue.Dock = System.Windows.Forms.DockStyle.Fill;
this.gridValue.Location = new System.Drawing.Point(0, 0);
@@ -1209,6 +1215,10 @@
//
this.gridValue.MasterTemplate.ViewDefinition = tableViewDefinition1;
this.gridValue.Name = "gridValue";
//
//
//
this.gridValue.RootElement.ControlBounds = new System.Drawing.Rectangle(0, 0, 240, 150);
this.gridValue.Size = new System.Drawing.Size(402, 420);
this.gridValue.TabIndex = 2;
//

View File

@@ -997,7 +997,6 @@ namespace DDUtilityApp.TIBRENDEZVOUS
this.Logger.Info($"Started");
this.tboxSettingInfo.Text = sb.ToString();
this.Text = $"TibSimulator - {this.cboxServer.Text} :: {this.cboxTarget.Text}";
List<Control.ControlCollection> lstControls = new List<Control.ControlCollection>();
lstControls.Add(this.gboxTransport.Controls);
@@ -1008,7 +1007,7 @@ namespace DDUtilityApp.TIBRENDEZVOUS
{
if (ctrl.GetType() == typeof(Label)) continue;
else if (ctrl.GetType() == typeof(TextBox)) ((TextBox)ctrl).ReadOnly = true;
else if (ctrl.GetType() == typeof(ComboBox)) ((ComboBox)ctrl).Enabled = false;
else if (ctrl.GetType() == typeof(ComboBox)) { ComboBox cbox = ctrl as ComboBox; cbox.DropDownStyle = ComboBoxStyle.DropDownList; cbox.Enabled = false; }
else ctrl.Enabled = false;
}
}
@@ -1038,7 +1037,7 @@ namespace DDUtilityApp.TIBRENDEZVOUS
{
if (ctrl.GetType() == typeof(Label)) continue;
else if (ctrl.GetType() == typeof(TextBox)) ((TextBox)ctrl).ReadOnly = false;
else if (ctrl.GetType() == typeof(ComboBox)) ((ComboBox)ctrl).Enabled = true;
else if (ctrl.GetType() == typeof(ComboBox)) { ComboBox cbox = ctrl as ComboBox; cbox.DropDownStyle = ComboBoxStyle.DropDown; cbox.Enabled = true; }
else ctrl.Enabled = true;
}
}
@@ -1052,19 +1051,19 @@ namespace DDUtilityApp.TIBRENDEZVOUS
{
string sendSubject = string.Empty;
string msgName = string.Empty;
string msgSendName = string.Empty;
string msgReplyName = string.Empty;
string msgSendSubjectName = string.Empty;
string msgReplySubjectName = string.Empty;
sendSubject = xmlMessage?.SendSubject;
msgName = xmlMessage?.XmlData?.MessageName;
msgSendName = xmlMessage?.XmlData?.SendSubjectName;
msgReplyName = xmlMessage?.XmlData?.ReplySubjectName;
msgSendSubjectName = xmlMessage?.XmlData?.SendSubjectName;
msgReplySubjectName = xmlMessage?.XmlData?.ReplySubjectName;
bool isOnlyHeader = false;
if (msgName.ToLower().StartsWith("AreYouThereRequest".ToLower()) && this.chkHideAreYouThere.Checked) isOnlyHeader = true;
if (isOnlyHeader) this.Logger.Info($"[S] {sendSubject} - {msgName}", this.ColorOfSend);
else this.Logger.Info($"[S] {sendSubject}{Environment.NewLine}{xmlMessage.XmlData.GetText()}", this.ColorOfSend);
if (isOnlyHeader) this.Logger.Info($"[S] {msgSendSubjectName} - {msgName}", this.ColorOfSend);
else this.Logger.Info($"[S] {msgReplySubjectName}{Environment.NewLine}{xmlMessage.XmlData.GetText()}", this.ColorOfSend);
}
catch (Exception ex)
{
@@ -1084,20 +1083,20 @@ namespace DDUtilityApp.TIBRENDEZVOUS
string listenerSubject = string.Empty;
string msgName = string.Empty;
string msgSendName = string.Empty;
string msgReplyName = string.Empty;
string msgSendSubjectName = string.Empty;
string msgReplySubjectName = string.Empty;
if (sender != null) listenerSubject = sender.Subject;
msgName = xmlReceived?.XmlData?.MessageName;
msgSendName = xmlReceived?.XmlData?.SendSubjectName;
msgReplyName = xmlReceived?.XmlData?.ReplySubjectName;
msgSendSubjectName = xmlReceived?.XmlData?.SendSubjectName;
msgReplySubjectName = xmlReceived?.XmlData?.ReplySubjectName;
// Log Write
bool isOnlyHeader = false;
if (msgName.ToLower().StartsWith("AreYouThereRequest".ToLower()) && this.chkHideAreYouThere.Checked) isOnlyHeader = true;
if (isOnlyHeader) this.Logger.Info($"[R] {listenerSubject} - {msgName}", this.ColorOfRecived);
else this.Logger.Info($"[R] {listenerSubject}{Environment.NewLine}{xmlReceived.XmlData.GetText()}", this.ColorOfRecived);
if (isOnlyHeader) this.Logger.Info($"[R] {msgReplySubjectName} - {msgName}", this.ColorOfRecived);
else this.Logger.Info($"[R] {msgReplySubjectName}{Environment.NewLine}{xmlReceived.XmlData.GetText()}", this.ColorOfRecived);
// Reply Message
bool isReply = false;
@@ -1113,24 +1112,23 @@ namespace DDUtilityApp.TIBRENDEZVOUS
foreach (XmlMessage xmlReply in xmlReplys)
{
this.cboxSendSubject.Text = xmlReply.XmlData.SendSubjectName;
this.tboxSendMessage.Text = xmlReply.XmlData.GetText();
this.tboxSendMessage.Tag = xmlReply;
if (xmlReply.IsReply && xmlReply.RequestMessage != null)
if (!string.IsNullOrEmpty(xmlReply.RequestMessage.ReplySubject)) this.SendButtons_Focus(this.btnSendReply);
else this.SendButtons_Focus(this.btnSend);
//else if (xmlReply.SendRequestFlag) this.SendButtons_Focus(this.btnSendRequest);
else this.SendButtons_Focus(this.btnSend);
if (xmlReceived.XmlData.MessageName.ToLower().StartsWith("AreYouThereRequest".ToLower()))
{
if (this.chkSendAreYouThereReply.Checked)
{
this.TibRendezvous.SendMessage(xmlReply);
this.tboxSendMessage.Clear();
this.tboxSendMessage.Tag = null;
return;
}
else
{
this.cboxSendSubject.Text = xmlReply.SendSubject;
this.tboxSendMessage.Text = xmlReply.XmlData.GetText();
this.tboxSendMessage.Tag = xmlReply;
if (xmlReply.IsReply && xmlReply.RequestMessage != null)
if (!string.IsNullOrEmpty(xmlReply.RequestMessage.ReplySubject)) this.SendButtons_Focus(this.btnSendReply);
else this.SendButtons_Focus(this.btnSend);
else this.SendButtons_Focus(this.btnSend);
}
}
else
@@ -1138,9 +1136,17 @@ namespace DDUtilityApp.TIBRENDEZVOUS
if (this.chkSendReply.Checked)
{
this.TibRendezvous.SendMessage(xmlReply);
this.tboxSendMessage.Clear();
this.tboxSendMessage.Tag = null;
return;
}
else
{
this.cboxSendSubject.Text = xmlReply.SendSubject;
this.tboxSendMessage.Text = xmlReply.XmlData.GetText();
this.tboxSendMessage.Tag = xmlReply;
if (xmlReply.IsReply && xmlReply.RequestMessage != null)
if (!string.IsNullOrEmpty(xmlReply.RequestMessage.ReplySubject)) this.SendButtons_Focus(this.btnSendReply);
else this.SendButtons_Focus(this.btnSend);
else this.SendButtons_Focus(this.btnSend);
}
}
}

View File

@@ -117,6 +117,15 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="lviewSubject.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="gridValue.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>138, 17</value>
</metadata>
<metadata name="radStatusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>243, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>

View File

@@ -15,7 +15,7 @@
<Server name="FDC">
<Item name="AP01" url="192.168.8.212" dir="/FDCLog" conkey="bG9ndXNlcjpEYWVkdWNrITE="/>
</Server>
<Server name="RMS">
<Server name="RTD">
<Item name="AP01" url="192.168.8.221" dir="/RTDLog" conkey="bG9ndXNlcjpEYWVkdWNrITE="/>
<Item name="AP02" url="192.168.8.222" dir="/RTDLog" conkey="bG9ndXNlcjpEYWVkdWNrITE="/>
</Server>

View File

@@ -60,8 +60,8 @@ namespace JWH.TIB
XmlMessage xmlMessage = new XmlMessage(xmlData);
if (isValueSetting)
{
this.SetMessageValue(xmlMessage.XmlData.Header);
this.SetMessageValue(xmlMessage.XmlData.Body);
this.SetMessageBodyValue(xmlMessage.XmlData.Header);
this.SetMessageBodyValue(xmlMessage.XmlData.Body);
}
return xmlMessage;
@@ -90,11 +90,11 @@ namespace JWH.TIB
DirectoryInfo directoryInfo = new DirectoryInfo(this.PathMessageReply);
foreach (FileInfo fileInfo in directoryInfo.GetFiles($"{xmlRequest.XmlData.MessageName}_*.xml"))
{
StreamReader reader = new StreamReader(fileInfo.FullName, Encoding.UTF8, true);
StreamReader reader = new StreamReader(fileInfo.FullName, Encoding.Default, true);
strReply = reader.ReadToEnd();
xmlReply = new XmlMessage(strReply);
xmlReply.SetRequstMessage(xmlRequest);
this.SetMessageValue(xmlReply.XmlData.Body, xmlRequest);
xmlReply.SetSubjectName(xmlRequest);
this.SetMessageBodyValue(xmlReply.XmlData.Body, xmlRequest);
lstReply.Add(xmlReply);
}
@@ -131,8 +131,11 @@ namespace JWH.TIB
XmlMessage xmlReply = new XmlMessage(xmlRequest.XmlData.GetText());
xmlReply.XmlData.MessageName += "Reply";
xmlReply.XmlData.SendRequestFlag = false;
xmlReply.XmlData.ReplySubjectName = xmlRequest.XmlData.SendSubjectName;
xmlReply.XmlData.SendSubjectName = xmlRequest.XmlData.ReplySubjectName;
xmlReply.SendSubject = xmlReply.XmlData.SendSubjectName;
xmlReply.SendRequestFlag = xmlReply.XmlData.SendRequestFlag;
xmlReply.RequestMessage = xmlRequest;
if (xmlRequest.SendRequestFlag) xmlReply.IsReply = true;
@@ -150,10 +153,12 @@ namespace JWH.TIB
if (xmlRequest == null) return null;
XmlMessage xmlReply = new XmlMessage(xmlRequest.XmlData.GetText());
xmlReply.XmlData.SendRequestFlag = false;
xmlReply.XmlData.MessageName += "Reply";
xmlReply.XmlData.SendRequestFlag = false;
xmlReply.XmlData.ReplySubjectName = xmlRequest.XmlData.SendSubjectName;
xmlReply.XmlData.SendSubjectName = xmlRequest.XmlData.ReplySubjectName;
xmlReply.SendSubject = xmlReply.XmlData.SendSubjectName;
xmlReply.SendRequestFlag = xmlReply.XmlData.SendRequestFlag;
XmlNode nodeReturn = xmlReply.XmlData.Message.CreateChildNode("return");
nodeReturn.CreateChildNode("returncode", "0");
@@ -176,7 +181,7 @@ namespace JWH.TIB
/// </summary>
/// <param name="node"></param>
/// <param name="srcMessage">RequestMessage</param>
private void SetMessageValue(XmlNode node, XmlMessage srcMessage = null)
private void SetMessageBodyValue(XmlNode node, XmlMessage srcMessage = null)
{
// MessageValue(UI)
if (node.GetText() == string.Empty)
@@ -220,7 +225,7 @@ namespace JWH.TIB
foreach (XmlNode child in node.ChildNodes)
{
if (child.GetType() == typeof(XmlText)) continue;
this.SetMessageValue(child, srcMessage);
this.SetMessageBodyValue(child, srcMessage);
}
}

View File

@@ -175,7 +175,7 @@ namespace JWH.TIB
#region [ Method ] ====================================================
/// <summary>
/// FromString
/// 전달된 메시지(문자열)로 속성을 셋팅한다.
/// </summary>
/// <param name="xmlData"></param>
public void FromString(string xmlData)

View File

@@ -174,7 +174,11 @@ namespace JWH.TIB
#region [ Public Method ] =============================================
public void SetRequstMessage(XmlMessage xmlRequest)
/// <summary>
/// Set Value of SendSubject, ReplySubject
/// </summary>
/// <param name="xmlRequest"></param>
public void SetSubjectName(XmlMessage xmlRequest)
{
this.RequestMessage = xmlRequest;
this.IsReply = true;