초기 커밋.
This commit is contained in:
25
SSG_Automation_Solution.sln
Normal file
25
SSG_Automation_Solution.sln
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 16
|
||||||
|
VisualStudioVersion = 16.0.33328.57
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SSG_Automation_Solution", "SSG_Automation_Solution\SSG_Automation_Solution.csproj", "{2D212A21-573E-4C84-9ABA-A559D0878BE9}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{2D212A21-573E-4C84-9ABA-A559D0878BE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{2D212A21-573E-4C84-9ABA-A559D0878BE9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{2D212A21-573E-4C84-9ABA-A559D0878BE9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{2D212A21-573E-4C84-9ABA-A559D0878BE9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {14326FCE-3599-48EB-9A32-0CE02382E835}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
51
SSG_Automation_Solution/App.config
Normal file
51
SSG_Automation_Solution/App.config
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<configSections>
|
||||||
|
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System">
|
||||||
|
<section name="DevExpress.LookAndFeel.Design.AppSettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
||||||
|
</sectionGroup>
|
||||||
|
</configSections>
|
||||||
|
<applicationSettings>
|
||||||
|
<DevExpress.LookAndFeel.Design.AppSettings>
|
||||||
|
<setting name="DefaultAppSkin" serializeAs="String">
|
||||||
|
<value></value>
|
||||||
|
</setting>
|
||||||
|
<setting name="DefaultPalette" serializeAs="String">
|
||||||
|
<value>Blue Dark</value>
|
||||||
|
</setting>
|
||||||
|
<setting name="TouchUI" serializeAs="String">
|
||||||
|
<value></value>
|
||||||
|
</setting>
|
||||||
|
<setting name="CompactUI" serializeAs="String">
|
||||||
|
<value></value>
|
||||||
|
</setting>
|
||||||
|
<setting name="TouchScaleFactor" serializeAs="String">
|
||||||
|
<value></value>
|
||||||
|
</setting>
|
||||||
|
<setting name="DirectX" serializeAs="String">
|
||||||
|
<value></value>
|
||||||
|
</setting>
|
||||||
|
<setting name="RegisterUserSkins" serializeAs="String">
|
||||||
|
<value>True</value>
|
||||||
|
</setting>
|
||||||
|
<setting name="RegisterBonusSkins" serializeAs="String">
|
||||||
|
<value></value>
|
||||||
|
</setting>
|
||||||
|
<setting name="FontBehavior" serializeAs="String">
|
||||||
|
<value></value>
|
||||||
|
</setting>
|
||||||
|
<setting name="DefaultAppFont" serializeAs="String">
|
||||||
|
<value></value>
|
||||||
|
</setting>
|
||||||
|
<setting name="DPIAwarenessMode" serializeAs="String">
|
||||||
|
<value></value>
|
||||||
|
</setting>
|
||||||
|
<setting name="CustomPaletteCollection" serializeAs="Xml">
|
||||||
|
<value />
|
||||||
|
</setting>
|
||||||
|
</DevExpress.LookAndFeel.Design.AppSettings>
|
||||||
|
</applicationSettings>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
|
||||||
|
</startup>
|
||||||
|
</configuration>
|
||||||
62
SSG_Automation_Solution/Data/DBInfo.cs
Normal file
62
SSG_Automation_Solution/Data/DBInfo.cs
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SSG_Automation_Solution.Data
|
||||||
|
{
|
||||||
|
public class DBInfo
|
||||||
|
{
|
||||||
|
private string _DBIP = "localhost";
|
||||||
|
public string DBIP
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_DBIP == "localhost")
|
||||||
|
{
|
||||||
|
LoadOptions();
|
||||||
|
}
|
||||||
|
|
||||||
|
return _DBIP;
|
||||||
|
}
|
||||||
|
set { _DBIP = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
string dafaultOptionListPath = Environment.CurrentDirectory + @"\Data\options.json";
|
||||||
|
|
||||||
|
#region Singleton
|
||||||
|
|
||||||
|
private static DBInfo uniqueInstance = null;
|
||||||
|
private static readonly Object mInstanceLocker = new Object();
|
||||||
|
|
||||||
|
public static DBInfo getInstance()
|
||||||
|
{
|
||||||
|
lock (mInstanceLocker)
|
||||||
|
{
|
||||||
|
if (uniqueInstance == null)
|
||||||
|
{
|
||||||
|
uniqueInstance = new DBInfo();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return uniqueInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
public void LoadOptions()
|
||||||
|
{
|
||||||
|
if (File.Exists(dafaultOptionListPath))
|
||||||
|
{
|
||||||
|
using (StreamReader file = new StreamReader(dafaultOptionListPath))
|
||||||
|
{
|
||||||
|
JObject jobj = JObject.Parse(file.ReadToEnd());
|
||||||
|
|
||||||
|
if (jobj.ContainsKey("DBIP")) DBIP = jobj["DBIP"].ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
97
SSG_Automation_Solution/Data/LogWriter.cs
Normal file
97
SSG_Automation_Solution/Data/LogWriter.cs
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SSG_Automation_Solution.Data
|
||||||
|
{
|
||||||
|
public class LogWriter
|
||||||
|
{
|
||||||
|
public enum LogType { Error, Display, Normal }
|
||||||
|
|
||||||
|
#region Variables
|
||||||
|
public string LogFileName { get; set; }
|
||||||
|
public bool isShowLogNormal { get; set; } = true;
|
||||||
|
public bool isShowLogDisplay { get; set; } = true;
|
||||||
|
public bool isShowLogError { get; set; } = true;
|
||||||
|
|
||||||
|
public Color colorLogNormal { get; set; } = Color.FromArgb(195, 195, 195);
|
||||||
|
public Color colorLogDisplay { get; set; } = Color.FromArgb(160, 50, 50);
|
||||||
|
public Color colorLogError { get; set; } = Color.FromArgb(230, 0, 0);
|
||||||
|
|
||||||
|
public bool isSaveLogNormal { get; set; } = true;
|
||||||
|
public bool isSaveLogDisplay { get; set; } = true;
|
||||||
|
public bool isSaveLogError { get; set; } = true;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Singleton
|
||||||
|
|
||||||
|
private static LogWriter uniqueInstance = null;
|
||||||
|
private static readonly Object mInstanceLocker = new Object();
|
||||||
|
|
||||||
|
public static LogWriter getInstance()
|
||||||
|
{
|
||||||
|
lock (mInstanceLocker)
|
||||||
|
{
|
||||||
|
if (uniqueInstance == null)
|
||||||
|
{
|
||||||
|
uniqueInstance = new LogWriter();
|
||||||
|
|
||||||
|
string m_exePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
|
||||||
|
string folderPath = m_exePath + @"\Logs";
|
||||||
|
DirectoryInfo directory = new DirectoryInfo(folderPath);
|
||||||
|
if (!directory.Exists) directory.Create();
|
||||||
|
|
||||||
|
DateTime now = DateTime.Now;
|
||||||
|
foreach (FileInfo file in directory.GetFiles())
|
||||||
|
{
|
||||||
|
TimeSpan timeDiff = now - file.LastWriteTime;
|
||||||
|
if (timeDiff.TotalHours > 170) file.Delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return uniqueInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#region Method
|
||||||
|
public void LogWrite(string logMessage, LogType logType)
|
||||||
|
{
|
||||||
|
string m_exePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
|
||||||
|
string folderPath = m_exePath + @"\Logs";
|
||||||
|
DirectoryInfo di = new DirectoryInfo(folderPath);
|
||||||
|
if (!di.Exists) di.Create();
|
||||||
|
|
||||||
|
|
||||||
|
string suffix = "";
|
||||||
|
switch (logType)
|
||||||
|
{
|
||||||
|
case LogType.Normal: suffix = " normal.txt"; break;
|
||||||
|
case LogType.Display: suffix = " display.txt"; break;
|
||||||
|
case LogType.Error: suffix = " error.txt"; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (StreamWriter w = File.AppendText(folderPath + @"\" + LogFileName + suffix))
|
||||||
|
{
|
||||||
|
w.WriteLine(DateTime.Now.ToString("yyMMdd HH:mm:ss.fff : ") + logMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
114
SSG_Automation_Solution/Data/Options.cs
Normal file
114
SSG_Automation_Solution/Data/Options.cs
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
using DevExpress.XtraEditors;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SSG_Automation_Solution.Data
|
||||||
|
{
|
||||||
|
public class Options
|
||||||
|
{
|
||||||
|
#region Singleton
|
||||||
|
|
||||||
|
private static Options uniqueInstance = null;
|
||||||
|
private static readonly Object mInstanceLocker = new Object();
|
||||||
|
|
||||||
|
public static Options getInstance()
|
||||||
|
{
|
||||||
|
lock (mInstanceLocker)
|
||||||
|
{
|
||||||
|
if (uniqueInstance == null)
|
||||||
|
{
|
||||||
|
uniqueInstance = new Options();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return uniqueInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#region
|
||||||
|
|
||||||
|
public List<gridColor> gridColors = new List<gridColor>();
|
||||||
|
|
||||||
|
public struct gridColor
|
||||||
|
{
|
||||||
|
public string 명칭;
|
||||||
|
public Color 색상;
|
||||||
|
|
||||||
|
public gridColor(string 명칭, Color 색상) : this()
|
||||||
|
{
|
||||||
|
this.명칭 = 명칭;
|
||||||
|
this.색상 = 색상;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string gridColorPath = Environment.CurrentDirectory + @"\Data\gridColor.json";
|
||||||
|
|
||||||
|
public Color GetGridColor(LabelControl lbl)
|
||||||
|
{
|
||||||
|
Color color = gridColors.Find(x => x.명칭 == lbl.Name).색상;
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ChangeGridColor(string 명칭, Color 색상)
|
||||||
|
{
|
||||||
|
|
||||||
|
int index = gridColors.FindIndex(x => x.명칭 == 명칭);
|
||||||
|
if (index > -1) gridColors.RemoveAt(index);
|
||||||
|
gridColors.Add(new gridColor(명칭, 색상));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SaveGridColor()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
JObject json = new JObject();
|
||||||
|
|
||||||
|
foreach (gridColor g in gridColors)
|
||||||
|
{
|
||||||
|
json.Add(g.명칭, g.색상.ToArgb());
|
||||||
|
}
|
||||||
|
|
||||||
|
File.WriteAllText(gridColorPath, json.ToString(), Encoding.UTF8);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine("DatControl Err");
|
||||||
|
Console.WriteLine(ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadGridCOlor()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (File.Exists(gridColorPath))
|
||||||
|
{
|
||||||
|
using (StreamReader file = new StreamReader(gridColorPath))
|
||||||
|
{
|
||||||
|
using (JsonTextReader reader = new JsonTextReader(file))
|
||||||
|
{
|
||||||
|
JObject json = (JObject)JToken.ReadFrom(reader);
|
||||||
|
|
||||||
|
foreach (var x in json)
|
||||||
|
{
|
||||||
|
ChangeGridColor(x.Key, Color.FromArgb((int)x.Value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex) { }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
29
SSG_Automation_Solution/Data/SceneGroup.cs
Normal file
29
SSG_Automation_Solution/Data/SceneGroup.cs
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SSG_Automation_Solution.Data
|
||||||
|
{
|
||||||
|
public class SceneGroup
|
||||||
|
{
|
||||||
|
public string GroupName { get; set; } // 그룹 이름
|
||||||
|
public List<SceneVO> Scenes { get; set; } = new List<SceneVO>(); // 그룹의 SceneVO 리스트
|
||||||
|
|
||||||
|
// 그룹에 Scene 추가
|
||||||
|
public void AddScene(SceneVO scene)
|
||||||
|
{
|
||||||
|
if (!Scenes.Contains(scene))
|
||||||
|
{
|
||||||
|
Scenes.Add(scene);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 그룹에서 Scene 제거
|
||||||
|
public void RemoveScene(SceneVO scene)
|
||||||
|
{
|
||||||
|
Scenes.Remove(scene);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
50
SSG_Automation_Solution/Data/SceneVO.cs
Normal file
50
SSG_Automation_Solution/Data/SceneVO.cs
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SSG_Automation_Solution.Data
|
||||||
|
{
|
||||||
|
public class SceneVO
|
||||||
|
{
|
||||||
|
private string groupName;
|
||||||
|
private string sceneName;
|
||||||
|
private string sceneDate;
|
||||||
|
private string scenePath;
|
||||||
|
private string sceneCG;
|
||||||
|
private string sceneLayer;
|
||||||
|
|
||||||
|
public string GroupName
|
||||||
|
{
|
||||||
|
get { return groupName; }
|
||||||
|
set { groupName = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public string SceneName {
|
||||||
|
get { return sceneName; }
|
||||||
|
set { sceneName = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public string SceneDate
|
||||||
|
{
|
||||||
|
get { return sceneDate; }
|
||||||
|
set { sceneDate = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public string ScenePath
|
||||||
|
{
|
||||||
|
get { return scenePath; }
|
||||||
|
set { scenePath = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public string SceneLayer
|
||||||
|
{
|
||||||
|
get { return sceneLayer; }
|
||||||
|
set { sceneLayer = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public BindingList<VariablesVO> Variables;
|
||||||
|
}
|
||||||
|
}
|
||||||
243
SSG_Automation_Solution/Data/Schedule.cs
Normal file
243
SSG_Automation_Solution/Data/Schedule.cs
Normal file
@@ -0,0 +1,243 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SSG_Automation_Solution.Data
|
||||||
|
{
|
||||||
|
public class Schedule : INotifyPropertyChanged
|
||||||
|
{
|
||||||
|
public bool HasDisplayed = false;
|
||||||
|
public bool HasOuted = false;
|
||||||
|
public bool IgnoreForbid = false;
|
||||||
|
public bool IsServiceGoods = false;
|
||||||
|
|
||||||
|
|
||||||
|
private Guid idValue = Guid.NewGuid();
|
||||||
|
[Display(Order = -1)]
|
||||||
|
public Guid ID
|
||||||
|
{
|
||||||
|
get { return this.idValue; }
|
||||||
|
}
|
||||||
|
|
||||||
|
string text;
|
||||||
|
[DisplayName("종류")]
|
||||||
|
public string scheduleType
|
||||||
|
{
|
||||||
|
get { return text; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (text != value)
|
||||||
|
{
|
||||||
|
//if (string.IsNullOrEmpty(value)) throw new Exception();
|
||||||
|
text = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string scheduleSimulCast;
|
||||||
|
[DisplayName("동시송출")]
|
||||||
|
public string scheduleSimulCastName
|
||||||
|
{
|
||||||
|
get { return scheduleSimulCast; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (scheduleSimulCast != value)
|
||||||
|
{
|
||||||
|
scheduleSimulCast = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string sceneGroup;
|
||||||
|
[DisplayName("씬그룹")]
|
||||||
|
public string sceneGroupName
|
||||||
|
{
|
||||||
|
get { return sceneGroup; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (sceneGroup != value)
|
||||||
|
{
|
||||||
|
//if (string.IsNullOrEmpty(value)) throw new Exception();
|
||||||
|
sceneGroup = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
string scene;
|
||||||
|
[DisplayName("씬이름")]
|
||||||
|
public string sceneName
|
||||||
|
{
|
||||||
|
get { return scene; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (scene != value)
|
||||||
|
{
|
||||||
|
//if (string.IsNullOrEmpty(value)) throw new Exception();
|
||||||
|
scene = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DateTime? startTime;
|
||||||
|
//[DataType(DataType.DateTime)]
|
||||||
|
[DisplayName("시작시간")]
|
||||||
|
public DateTime? StartTimeDateTime
|
||||||
|
{
|
||||||
|
get { return startTime; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (startTime != value)
|
||||||
|
{
|
||||||
|
startTime = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private TimeSpan? relativeStartTime;
|
||||||
|
|
||||||
|
[DisplayName("상대시간")]
|
||||||
|
public TimeSpan? RelativeStartTime
|
||||||
|
{
|
||||||
|
get { return relativeStartTime; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (relativeStartTime != value)
|
||||||
|
{
|
||||||
|
relativeStartTime = value;
|
||||||
|
OnPropertyChanged(nameof(RelativeStartTime));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public TimeSpan? GetPreviousScheduleStartTime(BindingList<Schedule> allSchedules)
|
||||||
|
{
|
||||||
|
if (this.scheduleType != "송출") return null;
|
||||||
|
|
||||||
|
var previousSchedule = allSchedules
|
||||||
|
.Where(s => s.scheduleType == "스케쥴" && s.StartTimeDateTime <= this.StartTimeDateTime)
|
||||||
|
.OrderByDescending(s => s.StartTimeDateTime)
|
||||||
|
.FirstOrDefault();
|
||||||
|
|
||||||
|
return this.StartTimeDateTime - previousSchedule?.StartTimeDateTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
TimeSpan? duration;
|
||||||
|
[DisplayName("길이")]
|
||||||
|
public TimeSpan? DurationSpan
|
||||||
|
{
|
||||||
|
get { return duration; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (duration != value)
|
||||||
|
{
|
||||||
|
duration = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TimeSpan? tapeTime;
|
||||||
|
[DisplayName("테잎길이")]
|
||||||
|
public TimeSpan? TapeTime
|
||||||
|
{
|
||||||
|
get { return tapeTime; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (tapeTime != value)
|
||||||
|
{
|
||||||
|
tapeTime = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[DisplayName("종료시간")]
|
||||||
|
public DateTime? EndTimeDateTime
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (text == "스케쥴")
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
int multi = 0;
|
||||||
|
for (int i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
if (duration.Value.TotalSeconds >= tapeTime.Value.TotalSeconds * i) multi = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return startTime + new TimeSpan(0, 0, Convert.ToInt32(tapeTime.Value.TotalSeconds) * multi);
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
return startTime + DurationSpan;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return startTime + DurationSpan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Int16? layer;
|
||||||
|
[DisplayName("레이어")]
|
||||||
|
public Int16? layerNumber
|
||||||
|
{
|
||||||
|
get { return layer; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (layer != value)
|
||||||
|
{
|
||||||
|
layer = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
string done;
|
||||||
|
[DisplayName("상태")]
|
||||||
|
public string doneString
|
||||||
|
{
|
||||||
|
get { return done; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (done != value)
|
||||||
|
{
|
||||||
|
done = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public BindingList<VariablesVO> 변수정보;
|
||||||
|
|
||||||
|
public TimeSpan 스케쥴기준송출시간;
|
||||||
|
|
||||||
|
public event PropertyChangedEventHandler PropertyChanged;
|
||||||
|
protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
|
||||||
|
{
|
||||||
|
if (PropertyChanged != null)
|
||||||
|
{
|
||||||
|
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
19
SSG_Automation_Solution/Data/SyncMetadata.cs
Normal file
19
SSG_Automation_Solution/Data/SyncMetadata.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace SSG_Automation_Solution.Data
|
||||||
|
{
|
||||||
|
public class FileMetadata
|
||||||
|
{
|
||||||
|
public DateTime? LastModified { get; set; }
|
||||||
|
public string Hash { get; set; }
|
||||||
|
public DateTime? UploadTime { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SyncMetadata
|
||||||
|
{
|
||||||
|
public FileMetadata SceneList { get; set; } = new FileMetadata();
|
||||||
|
public FileMetadata Groups { get; set; } = new FileMetadata();
|
||||||
|
public FileMetadata Schedule { get; set; } = new FileMetadata();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
25
SSG_Automation_Solution/Data/VariablesVO.cs
Normal file
25
SSG_Automation_Solution/Data/VariablesVO.cs
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SSG_Automation_Solution.Data
|
||||||
|
{
|
||||||
|
public class VariablesVO
|
||||||
|
{
|
||||||
|
private string tag;
|
||||||
|
private string text;
|
||||||
|
|
||||||
|
public string Tag
|
||||||
|
{
|
||||||
|
get { return tag; }
|
||||||
|
set { tag = value; }
|
||||||
|
}
|
||||||
|
public string Text
|
||||||
|
{
|
||||||
|
get { return text; }
|
||||||
|
set { text = value; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
using DevExpress.Utils.Drawing;
|
||||||
|
using DevExpress.XtraEditors.Drawing;
|
||||||
|
using DevExpress.XtraEditors.ViewInfo;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SSG_Automation_Solution.Design.CustomControl
|
||||||
|
{
|
||||||
|
public class CustomToggleSwitchPainter : ToggleSwitchPainter
|
||||||
|
{
|
||||||
|
public CustomToggleSwitchPainter() : base() { }
|
||||||
|
|
||||||
|
protected override void DrawContent(ControlGraphicsInfoArgs info)
|
||||||
|
{
|
||||||
|
BaseCheckEditViewInfo vi = info.ViewInfo as BaseCheckEditViewInfo;
|
||||||
|
vi.CheckInfo.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
||||||
|
ToggleObjectInfoArgs args = (vi.CheckInfo) as ToggleObjectInfoArgs;
|
||||||
|
int offset = 2;
|
||||||
|
|
||||||
|
int width = args.GlyphRect.Width - args.SwitchRect.Width;
|
||||||
|
if (args.GlyphRect.X == args.SwitchRect.X)
|
||||||
|
vi.CheckInfo.CaptionRect = new Rectangle(args.SwitchRect.Right, args.SwitchRect.Y, width, args.SwitchRect.Height);
|
||||||
|
else
|
||||||
|
if (args.GlyphRect.Right == args.SwitchRect.Right)
|
||||||
|
vi.CheckInfo.CaptionRect = new Rectangle(args.GlyphRect.X + offset, args.GlyphRect.Y, width, args.SwitchRect.Height);
|
||||||
|
|
||||||
|
base.DrawContent(info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
207
SSG_Automation_Solution/Design/Forms/LoginForm.Designer.cs
generated
Normal file
207
SSG_Automation_Solution/Design/Forms/LoginForm.Designer.cs
generated
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
|
||||||
|
namespace SSG_Automation_Solution.Design.Forms
|
||||||
|
{
|
||||||
|
partial class LoginForm
|
||||||
|
{
|
||||||
|
/// <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()
|
||||||
|
{
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LoginForm));
|
||||||
|
this.labelControl1 = new DevExpress.XtraEditors.LabelControl();
|
||||||
|
this.labelControl2 = new DevExpress.XtraEditors.LabelControl();
|
||||||
|
this.labelControl3 = new DevExpress.XtraEditors.LabelControl();
|
||||||
|
this.labelControl4 = new DevExpress.XtraEditors.LabelControl();
|
||||||
|
this.textEditPassword = new DevExpress.XtraEditors.TextEdit();
|
||||||
|
this.textEditUsername = new DevExpress.XtraEditors.TextEdit();
|
||||||
|
this.simpleButton1 = new DevExpress.XtraEditors.SimpleButton();
|
||||||
|
this.svgImageBox1 = new DevExpress.XtraEditors.SvgImageBox();
|
||||||
|
this.checkEdit1 = new DevExpress.XtraEditors.CheckEdit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.textEditPassword.Properties)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.textEditUsername.Properties)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.svgImageBox1)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.checkEdit1.Properties)).BeginInit();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// labelControl1
|
||||||
|
//
|
||||||
|
this.labelControl1.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60)))));
|
||||||
|
this.labelControl1.Appearance.Options.UseBackColor = true;
|
||||||
|
this.labelControl1.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None;
|
||||||
|
this.labelControl1.Location = new System.Drawing.Point(170, 153);
|
||||||
|
this.labelControl1.Name = "labelControl1";
|
||||||
|
this.labelControl1.Size = new System.Drawing.Size(320, 3);
|
||||||
|
this.labelControl1.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// labelControl2
|
||||||
|
//
|
||||||
|
this.labelControl2.Appearance.Font = new System.Drawing.Font("나눔스퀘어 네오 Bold", 8.999999F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||||
|
this.labelControl2.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60)))));
|
||||||
|
this.labelControl2.Appearance.Options.UseFont = true;
|
||||||
|
this.labelControl2.Appearance.Options.UseForeColor = true;
|
||||||
|
this.labelControl2.Location = new System.Drawing.Point(170, 100);
|
||||||
|
this.labelControl2.Name = "labelControl2";
|
||||||
|
this.labelControl2.Size = new System.Drawing.Size(63, 13);
|
||||||
|
this.labelControl2.TabIndex = 2;
|
||||||
|
this.labelControl2.Text = "Username";
|
||||||
|
//
|
||||||
|
// labelControl3
|
||||||
|
//
|
||||||
|
this.labelControl3.Appearance.Font = new System.Drawing.Font("나눔스퀘어 네오 Bold", 8.999999F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||||
|
this.labelControl3.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60)))));
|
||||||
|
this.labelControl3.Appearance.Options.UseFont = true;
|
||||||
|
this.labelControl3.Appearance.Options.UseForeColor = true;
|
||||||
|
this.labelControl3.Location = new System.Drawing.Point(170, 171);
|
||||||
|
this.labelControl3.Name = "labelControl3";
|
||||||
|
this.labelControl3.Size = new System.Drawing.Size(61, 13);
|
||||||
|
this.labelControl3.TabIndex = 5;
|
||||||
|
this.labelControl3.Text = "Password";
|
||||||
|
//
|
||||||
|
// labelControl4
|
||||||
|
//
|
||||||
|
this.labelControl4.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60)))));
|
||||||
|
this.labelControl4.Appearance.Options.UseBackColor = true;
|
||||||
|
this.labelControl4.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None;
|
||||||
|
this.labelControl4.Location = new System.Drawing.Point(170, 224);
|
||||||
|
this.labelControl4.Name = "labelControl4";
|
||||||
|
this.labelControl4.Size = new System.Drawing.Size(320, 3);
|
||||||
|
this.labelControl4.TabIndex = 4;
|
||||||
|
//
|
||||||
|
// textEditPassword
|
||||||
|
//
|
||||||
|
this.textEditPassword.Location = new System.Drawing.Point(170, 190);
|
||||||
|
this.textEditPassword.Name = "textEditPassword";
|
||||||
|
this.textEditPassword.Properties.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(109)))), ((int)(((byte)(156)))));
|
||||||
|
this.textEditPassword.Properties.Appearance.Font = new System.Drawing.Font("나눔스퀘어 네오 Bold", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||||
|
this.textEditPassword.Properties.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
|
||||||
|
this.textEditPassword.Properties.Appearance.Options.UseBackColor = true;
|
||||||
|
this.textEditPassword.Properties.Appearance.Options.UseFont = true;
|
||||||
|
this.textEditPassword.Properties.Appearance.Options.UseForeColor = true;
|
||||||
|
this.textEditPassword.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
|
||||||
|
this.textEditPassword.Properties.ContextImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("textEditPassword.Properties.ContextImageOptions.Image")));
|
||||||
|
this.textEditPassword.Properties.NullText = "password";
|
||||||
|
this.textEditPassword.Size = new System.Drawing.Size(320, 34);
|
||||||
|
this.textEditPassword.TabIndex = 101;
|
||||||
|
this.textEditPassword.EditValueChanged += new System.EventHandler(this.textEdit1_EditValueChanged);
|
||||||
|
//
|
||||||
|
// textEditUsername
|
||||||
|
//
|
||||||
|
this.textEditUsername.Location = new System.Drawing.Point(170, 119);
|
||||||
|
this.textEditUsername.Name = "textEditUsername";
|
||||||
|
this.textEditUsername.Properties.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(109)))), ((int)(((byte)(156)))));
|
||||||
|
this.textEditUsername.Properties.Appearance.Font = new System.Drawing.Font("나눔스퀘어 네오 Bold", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||||
|
this.textEditUsername.Properties.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
|
||||||
|
this.textEditUsername.Properties.Appearance.Options.UseBackColor = true;
|
||||||
|
this.textEditUsername.Properties.Appearance.Options.UseFont = true;
|
||||||
|
this.textEditUsername.Properties.Appearance.Options.UseForeColor = true;
|
||||||
|
this.textEditUsername.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
|
||||||
|
this.textEditUsername.Properties.ContextImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("textEditUsername.Properties.ContextImageOptions.Image")));
|
||||||
|
this.textEditUsername.Properties.NullText = "username";
|
||||||
|
this.textEditUsername.Size = new System.Drawing.Size(320, 34);
|
||||||
|
this.textEditUsername.TabIndex = 100;
|
||||||
|
this.textEditUsername.EditValueChanged += new System.EventHandler(this.textEdit1_EditValueChanged);
|
||||||
|
//
|
||||||
|
// simpleButton1
|
||||||
|
//
|
||||||
|
this.simpleButton1.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(77)))), ((int)(((byte)(130)))), ((int)(((byte)(184)))));
|
||||||
|
this.simpleButton1.Appearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(77)))), ((int)(((byte)(130)))), ((int)(((byte)(184)))));
|
||||||
|
this.simpleButton1.Appearance.Font = new System.Drawing.Font("나눔스퀘어 네오 Bold", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||||
|
this.simpleButton1.Appearance.ForeColor = System.Drawing.Color.White;
|
||||||
|
this.simpleButton1.Appearance.Options.UseBackColor = true;
|
||||||
|
this.simpleButton1.Appearance.Options.UseBorderColor = true;
|
||||||
|
this.simpleButton1.Appearance.Options.UseFont = true;
|
||||||
|
this.simpleButton1.Appearance.Options.UseForeColor = true;
|
||||||
|
this.simpleButton1.Location = new System.Drawing.Point(170, 280);
|
||||||
|
this.simpleButton1.Name = "simpleButton1";
|
||||||
|
this.simpleButton1.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
|
||||||
|
this.simpleButton1.Size = new System.Drawing.Size(320, 55);
|
||||||
|
this.simpleButton1.TabIndex = 103;
|
||||||
|
this.simpleButton1.Text = "LOGIN";
|
||||||
|
this.simpleButton1.Click += new System.EventHandler(this.simpleButton1_Click);
|
||||||
|
//
|
||||||
|
// svgImageBox1
|
||||||
|
//
|
||||||
|
this.svgImageBox1.Location = new System.Drawing.Point(615, 3);
|
||||||
|
this.svgImageBox1.Name = "svgImageBox1";
|
||||||
|
this.svgImageBox1.Size = new System.Drawing.Size(27, 26);
|
||||||
|
this.svgImageBox1.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("svgImageBox1.SvgImage")));
|
||||||
|
this.svgImageBox1.TabIndex = 103;
|
||||||
|
this.svgImageBox1.Text = "svgImageBox1";
|
||||||
|
this.svgImageBox1.Click += new System.EventHandler(this.svgImageBox1_Click);
|
||||||
|
//
|
||||||
|
// checkEdit1
|
||||||
|
//
|
||||||
|
this.checkEdit1.Location = new System.Drawing.Point(170, 233);
|
||||||
|
this.checkEdit1.Name = "checkEdit1";
|
||||||
|
this.checkEdit1.Properties.Appearance.Font = new System.Drawing.Font("나눔스퀘어 네오 Bold", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||||
|
this.checkEdit1.Properties.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60)))));
|
||||||
|
this.checkEdit1.Properties.Appearance.Options.UseFont = true;
|
||||||
|
this.checkEdit1.Properties.Appearance.Options.UseForeColor = true;
|
||||||
|
this.checkEdit1.Properties.Caption = "Remember me";
|
||||||
|
this.checkEdit1.Properties.CheckBoxOptions.SvgColorChecked = System.Drawing.Color.FromArgb(((int)(((byte)(77)))), ((int)(((byte)(130)))), ((int)(((byte)(184)))));
|
||||||
|
this.checkEdit1.Size = new System.Drawing.Size(122, 20);
|
||||||
|
this.checkEdit1.TabIndex = 10;
|
||||||
|
//
|
||||||
|
// LoginForm
|
||||||
|
//
|
||||||
|
this.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(109)))), ((int)(((byte)(156)))));
|
||||||
|
this.Appearance.Options.UseBackColor = true;
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.ClientSize = new System.Drawing.Size(644, 372);
|
||||||
|
this.Controls.Add(this.checkEdit1);
|
||||||
|
this.Controls.Add(this.svgImageBox1);
|
||||||
|
this.Controls.Add(this.simpleButton1);
|
||||||
|
this.Controls.Add(this.textEditUsername);
|
||||||
|
this.Controls.Add(this.labelControl3);
|
||||||
|
this.Controls.Add(this.labelControl4);
|
||||||
|
this.Controls.Add(this.textEditPassword);
|
||||||
|
this.Controls.Add(this.labelControl2);
|
||||||
|
this.Controls.Add(this.labelControl1);
|
||||||
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
|
||||||
|
this.Name = "LoginForm";
|
||||||
|
this.Text = "Login";
|
||||||
|
this.Shown += new System.EventHandler(this.LoginForm_Shown);
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.textEditPassword.Properties)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.textEditUsername.Properties)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.svgImageBox1)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.checkEdit1.Properties)).EndInit();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
private DevExpress.XtraEditors.LabelControl labelControl1;
|
||||||
|
private DevExpress.XtraEditors.LabelControl labelControl2;
|
||||||
|
private DevExpress.XtraEditors.LabelControl labelControl3;
|
||||||
|
private DevExpress.XtraEditors.LabelControl labelControl4;
|
||||||
|
private DevExpress.XtraEditors.TextEdit textEditPassword;
|
||||||
|
private DevExpress.XtraEditors.TextEdit textEditUsername;
|
||||||
|
private DevExpress.XtraEditors.SimpleButton simpleButton1;
|
||||||
|
private DevExpress.XtraEditors.SvgImageBox svgImageBox1;
|
||||||
|
private DevExpress.XtraEditors.CheckEdit checkEdit1;
|
||||||
|
}
|
||||||
|
}
|
||||||
169
SSG_Automation_Solution/Design/Forms/LoginForm.cs
Normal file
169
SSG_Automation_Solution/Design/Forms/LoginForm.cs
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
using DevExpress.XtraEditors;
|
||||||
|
using Microsoft.Win32;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using SSG_Automation_Solution.Data;
|
||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace SSG_Automation_Solution.Design.Forms
|
||||||
|
{
|
||||||
|
public partial class LoginForm : DevExpress.XtraEditors.XtraForm
|
||||||
|
{
|
||||||
|
public int LoginResult { get; private set; } // 로그인 상태를 나타내는 반환값
|
||||||
|
private readonly string _restServerUrl = "http://"+ DBInfo.getInstance().DBIP + ":60031/api/auth/login"; // REST 서버 주소
|
||||||
|
public string Username { get; private set; }
|
||||||
|
|
||||||
|
string subKey = @"SOFTWARE\CI";
|
||||||
|
|
||||||
|
|
||||||
|
public LoginForm()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
LoginResult = 0; // 기본값: 로그인 실패
|
||||||
|
|
||||||
|
// 비밀번호 입력 필드에서 Enter 키 처리
|
||||||
|
textEditPassword.KeyDown += TextEditPassword_KeyDown;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LoadReg()
|
||||||
|
{
|
||||||
|
RegistryKey key = Registry.CurrentUser.CreateSubKey(subKey);
|
||||||
|
if (key.GetValue("checked") != null) checkEdit1.Checked = Convert.ToBoolean(key.GetValue("checked").ToString());
|
||||||
|
if (key.GetValue("id") != null) textEditUsername.Text = key.GetValue("id").ToString();
|
||||||
|
if (key.GetValue("pw") != null) textEditPassword.Text = key.GetValue("pw").ToString();
|
||||||
|
key.Close();
|
||||||
|
|
||||||
|
//if (textEditPassword.Text.Trim() != "") simpleButton1_Click(null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SaveReg()
|
||||||
|
{
|
||||||
|
RegistryKey key = Registry.CurrentUser.CreateSubKey(subKey);
|
||||||
|
key.SetValue("checked", checkEdit1.Checked);
|
||||||
|
key.SetValue("id", textEditUsername.Text);
|
||||||
|
|
||||||
|
if (checkEdit1.Checked) key.SetValue("pw", textEditPassword.Text);
|
||||||
|
else key.SetValue("pw", "");
|
||||||
|
key.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void textEdit1_EditValueChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
TextEdit textEdit = (TextEdit)sender;
|
||||||
|
textEdit.ForeColor = Color.White;
|
||||||
|
|
||||||
|
if (textEdit == textEditPassword)
|
||||||
|
{
|
||||||
|
textEditPassword.Properties.PasswordChar = '*';
|
||||||
|
textEditPassword.Properties.UseSystemPasswordChar = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 비밀번호 입력 필드에서 Enter 키 감지
|
||||||
|
private void TextEditPassword_KeyDown(object sender, KeyEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.KeyCode == Keys.Enter) // Enter 키 확인
|
||||||
|
{
|
||||||
|
simpleButton1_Click(sender, e); // 로그인 버튼 클릭 이벤트 호출
|
||||||
|
e.Handled = true; // 기본 Enter 동작 방지
|
||||||
|
e.SuppressKeyPress = true; // 시스템 Ding 소리 방지
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void simpleButton1_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
// 예제: 유저 정보 확인 로직
|
||||||
|
string username = textEditUsername.Text; // TextEdit에 유저 ID 입력
|
||||||
|
string password = textEditPassword.Text; // TextEdit에 비밀번호 입력
|
||||||
|
Username = username;
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
|
||||||
|
{
|
||||||
|
MessageBox.Show("유저이름이나 비밀번호에 값이 없습니다.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// REST 서버로 로그인 요청 보내기
|
||||||
|
var loginResponse = await VerifyLoginWithServer(username, password);
|
||||||
|
|
||||||
|
SaveReg();
|
||||||
|
|
||||||
|
if (loginResponse == 1) // 관리자
|
||||||
|
{
|
||||||
|
LoginResult = 1;
|
||||||
|
this.DialogResult = DialogResult.OK;
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
else if (loginResponse == 2) // 일반 사용자
|
||||||
|
{
|
||||||
|
LoginResult = 2;
|
||||||
|
this.DialogResult = DialogResult.OK;
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
else // 로그인 실패
|
||||||
|
{
|
||||||
|
LoginResult = 0;
|
||||||
|
MessageBox.Show("유효하지 않은 사용자 또는 비밀번호 입니다.", "Login Failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task<int> VerifyLoginWithServer(string username, string password)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (username == "admin" && password == "admin") return 1;
|
||||||
|
|
||||||
|
using (HttpClient client = new HttpClient())
|
||||||
|
{
|
||||||
|
// 요청 데이터 생성
|
||||||
|
var payload = new
|
||||||
|
{
|
||||||
|
Username = username,
|
||||||
|
Password = password
|
||||||
|
};
|
||||||
|
|
||||||
|
string jsonPayload = JsonConvert.SerializeObject(payload);
|
||||||
|
StringContent content = new StringContent(jsonPayload, Encoding.UTF8, "application/json");
|
||||||
|
|
||||||
|
// POST 요청 전송
|
||||||
|
HttpResponseMessage response = await client.PostAsync(_restServerUrl, content);
|
||||||
|
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
// 응답 데이터를 JSON으로 파싱
|
||||||
|
var result = await response.Content.ReadAsStringAsync();
|
||||||
|
dynamic jsonResponse = JsonConvert.DeserializeObject(result);
|
||||||
|
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
MessageBox.Show($"서버와의 통신 에러: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0; // 로그인 실패
|
||||||
|
}
|
||||||
|
|
||||||
|
private void svgImageBox1_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
LoginResult = 0; // 로그인 실패로 설정
|
||||||
|
this.DialogResult = DialogResult.Cancel; // 취소 버튼 처리
|
||||||
|
Application.Exit(); // 실패 시 프로그램 종료
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LoginForm_Shown(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
LoadReg();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
165
SSG_Automation_Solution/Design/Forms/LoginForm.resx
Normal file
165
SSG_Automation_Solution/Design/Forms/LoginForm.resx
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
<?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>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="textEditPassword.Properties.ContextImageOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
|
||||||
|
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAmdEVYdFRpdGxlAFF1ZXN0aW9uO0hlbHA7RG9jdW1l
|
||||||
|
bnRhdGlvbjtXaGF0ben5RgAAAWVJREFUWEfF19GNwjAQBFBKoARKuBKuAUuUQAnXAZIboIQrgV//UQIl
|
||||||
|
UMKVkNNIGymaWWfXEZf7eBIaVl7jOIk5TNN0+E8S7E2CvUkQKbWdS23XUtu91PYw+Izsk+sjEnhKbUdr
|
||||||
|
8FNqmwKvkYlI4MGATqPIhcfxSODZOAGs1pHHYhJ4OhN42vXHkvN3sy8ei0ngWUwAzS78y0ptN6c53Hks
|
||||||
|
JoHHJvDNjanGW4kH1zEJPGuNFzW4HH8zgYzOLXrlOibBFthsTnP44FomwSjblNwYwg0IEoxYaY5bNNw3
|
||||||
|
IEHWO5qDBBm4tk5jWL1VPRJkWCNpznUZEmQ4t9yLa7IkyHB+/Y1rsiTIcFYgfOD0SJBhL5/5NAT7rsA7
|
||||||
|
STDC3pLp45dHggxrvNwH+HzmugwJInZA5U04T2LoIQQSRDrHs9nw5ZAgUmo7OY1nJ66PSJDReRFtehZI
|
||||||
|
kGUvJPxZgfDg0SPB3iTY2y9xLWth57sNgAAAAABJRU5ErkJggg==
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="textEditUsername.Properties.ContextImageOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
|
||||||
|
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAydEVYdFRpdGxlAEN1c3RvbWVyO0VtcGxveWVlO1Bl
|
||||||
|
cnNvbjtDb250YWN0O1VzZXI7Q2xpZW50fhE26AAAAaRJREFUWEfFlqFLBFEQxg+0GAzCiVXRYtBuVQQF
|
||||||
|
Jwj+MWIQmSvCddFiFwzGAS1aFUHEIIhwh0ZRMSgorAy8lXP2e2/XfXtr+JX35pvvd7sbrpEkSeM/yRwQ
|
||||||
|
SxFWiOWAWB6I5dPxSCyHxLIK5jPECOwQS5LDPshVIrAEynysgXy0gD52W+TjCOSjBW5BkY87kI8WeANF
|
||||||
|
Pl5APlrAloT4APkogXlQkodm7J7SArugIA/N2D2lBbZBQR6asXtKC0wSyxMo8aGzmrF7Sgsom6DIxzrI
|
||||||
|
RwvMgCIfOmvz0QLKMSiznIBcZQKzxPIOSlP0TmdsrjIBZZlYnkH5q7uz8xliBZRRYtlwr+SMWLaIZQzM
|
||||||
|
QWIEBsCZZRCc/aKswByxXBLLFLhL0a//ys3aux/+IjBOLEwsNz3v+pRYhsDsMLFc9MxppkUsE3a2iMAI
|
||||||
|
sey5/3v2Y1POiWXBPW5lkViuwZyiO3SX7iwkME0s92AR4sthzxG6U3cHBZrE0gHhqtDdzZBAG4Sqph0S
|
||||||
|
6OevT+mEBOxwXwgJdO1wH+h6Beomc1A3mYO6yRzUzTcKdExBDdX0MAAAAABJRU5ErkJggg==
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<assembly alias="DevExpress.Data.v20.2" name="DevExpress.Data.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
|
||||||
|
<data name="svgImageBox1.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v20.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x
|
||||||
|
MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E
|
||||||
|
ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD6AQAAAu+7
|
||||||
|
vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4
|
||||||
|
IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
|
||||||
|
LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw
|
||||||
|
YWNlPSJwcmVzZXJ2ZSIgaWQ9IkNsZWFySGVhZGVyQW5kRm9vdGVyIiBzdHlsZT0iZW5hYmxlLWJhY2tn
|
||||||
|
cm91bmQ6bmV3IDAgMCAzMiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkuUmVke2ZpbGw6
|
||||||
|
I0QxMUMxQzt9Cjwvc3R5bGU+DQogIDxwYXRoIGQ9Ik0yNyw0SDVDNC41LDQsNCw0LjUsNCw1djIyYzAs
|
||||||
|
MC41LDAuNSwxLDEsMWgyMmMwLjUsMCwxLTAuNSwxLTFWNUMyOCw0LjUsMjcuNSw0LDI3LDR6IE0yMiwy
|
||||||
|
MGwtMiwybC00LTRsLTQsNCAgbC0yLTJsNC00bC00LTRsMi0ybDQsNGw0LTRsMiwybC00LDRMMjIsMjB6
|
||||||
|
IiBjbGFzcz0iUmVkIiAvPg0KPC9zdmc+Cw==
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
3796
SSG_Automation_Solution/Design/Forms/MainForm.Designer.cs
generated
Normal file
3796
SSG_Automation_Solution/Design/Forms/MainForm.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
3507
SSG_Automation_Solution/Design/Forms/MainForm.cs
Normal file
3507
SSG_Automation_Solution/Design/Forms/MainForm.cs
Normal file
File diff suppressed because it is too large
Load Diff
1055
SSG_Automation_Solution/Design/Forms/MainForm.resx
Normal file
1055
SSG_Automation_Solution/Design/Forms/MainForm.resx
Normal file
File diff suppressed because it is too large
Load Diff
35
SSG_Automation_Solution/Program.cs
Normal file
35
SSG_Automation_Solution/Program.cs
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
using System;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace SSG_Automation_Solution.Design.Forms
|
||||||
|
{
|
||||||
|
static class Program
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 해당 애플리케이션의 주 진입점입니다.
|
||||||
|
/// </summary>
|
||||||
|
[STAThread]
|
||||||
|
static void Main()
|
||||||
|
{
|
||||||
|
Application.EnableVisualStyles();
|
||||||
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
|
|
||||||
|
// 로그인 폼을 생성
|
||||||
|
using (LoginForm loginForm = new LoginForm())
|
||||||
|
{
|
||||||
|
// 로그인 폼의 위치를 화면 중앙으로 설정
|
||||||
|
loginForm.StartPosition = FormStartPosition.CenterScreen;
|
||||||
|
|
||||||
|
// 로그인 폼 표시
|
||||||
|
var loginResult = loginForm.ShowDialog();
|
||||||
|
|
||||||
|
if (loginResult == DialogResult.OK && loginForm.LoginResult > 0)
|
||||||
|
{
|
||||||
|
// 로그인 성공: MainForm 실행
|
||||||
|
Application.Run(new MainForm(loginForm.LoginResult, loginForm.Username));
|
||||||
|
// 7/9
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
36
SSG_Automation_Solution/Properties/AssemblyInfo.cs
Normal file
36
SSG_Automation_Solution/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
|
||||||
|
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
|
||||||
|
// 이러한 특성 값을 변경하세요.
|
||||||
|
[assembly: AssemblyTitle("SSG_Automation_Solution")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("SSG_Automation_Solution")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2024")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
|
||||||
|
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
|
||||||
|
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
|
||||||
|
[assembly: Guid("2d212a21-573e-4c84-9aba-a559d0878be9")]
|
||||||
|
|
||||||
|
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
|
||||||
|
//
|
||||||
|
// 주 버전
|
||||||
|
// 부 버전
|
||||||
|
// 빌드 번호
|
||||||
|
// 수정 버전
|
||||||
|
//
|
||||||
|
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
|
||||||
|
// 기본값으로 할 수 있습니다.
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||||
73
SSG_Automation_Solution/Properties/Resources.Designer.cs
generated
Normal file
73
SSG_Automation_Solution/Properties/Resources.Designer.cs
generated
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// 이 코드는 도구를 사용하여 생성되었습니다.
|
||||||
|
// 런타임 버전:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
|
||||||
|
// 이러한 변경 내용이 손실됩니다.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace SSG_Automation_Solution.Properties {
|
||||||
|
using System;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
|
||||||
|
/// </summary>
|
||||||
|
// 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
|
||||||
|
// 클래스에서 자동으로 생성되었습니다.
|
||||||
|
// 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 ResGen을
|
||||||
|
// 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
internal class Resources {
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal Resources() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||||
|
get {
|
||||||
|
if (object.ReferenceEquals(resourceMan, null)) {
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SSG_Automation_Solution.Properties.Resources", typeof(Resources).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을
|
||||||
|
/// 재정의합니다.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture {
|
||||||
|
get {
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap no_image_icon_23494 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("no-image-icon-23494", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
124
SSG_Automation_Solution/Properties/Resources.resx
Normal file
124
SSG_Automation_Solution/Properties/Resources.resx
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
<?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>
|
||||||
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="no-image-icon-23494" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\no-image-icon-23494.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
29
SSG_Automation_Solution/Properties/Settings.Designer.cs
generated
Normal file
29
SSG_Automation_Solution/Properties/Settings.Designer.cs
generated
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
namespace SSG_Automation_Solution.Properties
|
||||||
|
{
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
|
||||||
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
|
||||||
|
{
|
||||||
|
|
||||||
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
|
||||||
|
public static Settings Default
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return defaultInstance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
7
SSG_Automation_Solution/Properties/Settings.settings
Normal file
7
SSG_Automation_Solution/Properties/Settings.settings
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||||
|
<Profiles>
|
||||||
|
<Profile Name="(Default)" />
|
||||||
|
</Profiles>
|
||||||
|
<Settings />
|
||||||
|
</SettingsFile>
|
||||||
11
SSG_Automation_Solution/Properties/licenses.licx
Normal file
11
SSG_Automation_Solution/Properties/licenses.licx
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
DevExpress.XtraEditors.ImageComboBoxEdit, DevExpress.XtraEditors.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
|
||||||
|
DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
|
||||||
|
DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
|
||||||
|
DevExpress.XtraRichEdit.RichEditControl, DevExpress.XtraRichEdit.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
|
||||||
|
DevExpress.XtraEditors.DateEdit, DevExpress.XtraEditors.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
|
||||||
|
DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
|
||||||
|
DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
|
||||||
|
DevExpress.XtraBars.Docking2010.DocumentManager, DevExpress.XtraBars.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
|
||||||
|
DevExpress.XtraEditors.PictureEdit, DevExpress.XtraEditors.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
|
||||||
|
DevExpress.XtraGauges.Win.GaugeControl, DevExpress.XtraGauges.v20.2.Win, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
|
||||||
|
DevExpress.XtraBars.Ribbon.RibbonControl, DevExpress.XtraBars.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
|
||||||
BIN
SSG_Automation_Solution/Resources/no-image-icon-23494.png
Normal file
BIN
SSG_Automation_Solution/Resources/no-image-icon-23494.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.0 KiB |
184
SSG_Automation_Solution/SSG_Automation_Solution.csproj
Normal file
184
SSG_Automation_Solution/SSG_Automation_Solution.csproj
Normal file
@@ -0,0 +1,184 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{2D212A21-573E-4C84-9ABA-A559D0878BE9}</ProjectGuid>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<RootNamespace>SSG_Automation_Solution</RootNamespace>
|
||||||
|
<AssemblyName>SSG_Automation_Solution</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
|
<Deterministic>true</Deterministic>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<ApplicationIcon>ssg.ico</ApplicationIcon>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="DevExpress.Data.Desktop.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DevExpress.Data.Desktop.20.2.10\lib\net452\DevExpress.Data.Desktop.v20.2.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DevExpress.Data.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DevExpress.Data.20.2.10\lib\net452\DevExpress.Data.v20.2.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DevExpress.Images.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||||
|
<Reference Include="DevExpress.Office.v20.2.Core, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DevExpress.Office.Core.20.2.10\lib\net452\DevExpress.Office.v20.2.Core.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DevExpress.Pdf.v20.2.Core, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DevExpress.Pdf.Core.20.2.10\lib\net452\DevExpress.Pdf.v20.2.Core.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DevExpress.Pdf.v20.2.Drawing, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DevExpress.Pdf.Drawing.20.2.10\lib\net452\DevExpress.Pdf.v20.2.Drawing.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DevExpress.Printing.v20.2.Core, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DevExpress.Printing.Core.20.2.10\lib\net452\DevExpress.Printing.v20.2.Core.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DevExpress.RichEdit.v20.2.Core, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DevExpress.RichEdit.Core.20.2.10\lib\net452\DevExpress.RichEdit.v20.2.Core.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DevExpress.Sparkline.v20.2.Core, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DevExpress.Sparkline.Core.20.2.10\lib\net452\DevExpress.Sparkline.v20.2.Core.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DevExpress.Utils.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DevExpress.Utils.20.2.10\lib\net452\DevExpress.Utils.v20.2.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DevExpress.XtraBars.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DevExpress.Win.Navigation.20.2.10\lib\net452\DevExpress.XtraBars.v20.2.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DevExpress.XtraEditors.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DevExpress.Win.Navigation.20.2.10\lib\net452\DevExpress.XtraEditors.v20.2.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DevExpress.XtraGauges.v20.2.Core, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DevExpress.Gauges.Core.20.2.10\lib\net452\DevExpress.XtraGauges.v20.2.Core.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DevExpress.XtraGauges.v20.2.Presets, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DevExpress.Win.Gauges.20.2.10\lib\net452\DevExpress.XtraGauges.v20.2.Presets.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DevExpress.XtraGauges.v20.2.Win, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DevExpress.Win.Gauges.20.2.10\lib\net452\DevExpress.XtraGauges.v20.2.Win.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DevExpress.XtraGrid.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||||
|
<Reference Include="DevExpress.XtraLayout.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DevExpress.Win.Navigation.20.2.10\lib\net452\DevExpress.XtraLayout.v20.2.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DevExpress.XtraPrinting.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DevExpress.Win.Printing.20.2.10\lib\net452\DevExpress.XtraPrinting.v20.2.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DevExpress.XtraRichEdit.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||||
|
<Reference Include="DevExpress.XtraScheduler.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||||
|
<Reference Include="DevExpress.XtraScheduler.v20.2.Core, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
|
||||||
|
<Reference Include="DevExpress.XtraScheduler.v20.2.Core.Desktop, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
|
||||||
|
<Reference Include="DevExpress.XtraTreeList.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\DevExpress.Win.TreeList.20.2.10\lib\net452\DevExpress.XtraTreeList.v20.2.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Interop.K3DAsyncEngineLib">
|
||||||
|
<HintPath>..\..\..\..\..\..\K3DAsyncEngine\Bin\x64\C#\Interop.K3DAsyncEngineLib.dll</HintPath>
|
||||||
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.ComponentModel.DataAnnotations" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Data.Linq" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Deployment" />
|
||||||
|
<Reference Include="System.Drawing" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Windows.Forms" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Data\DBInfo.cs" />
|
||||||
|
<Compile Include="Data\LogWriter.cs" />
|
||||||
|
<Compile Include="Data\Options.cs" />
|
||||||
|
<Compile Include="Data\SceneGroup.cs" />
|
||||||
|
<Compile Include="Data\SceneVO.cs" />
|
||||||
|
<Compile Include="Data\Schedule.cs" />
|
||||||
|
<Compile Include="Data\SyncMetadata.cs" />
|
||||||
|
<Compile Include="Data\VariablesVO.cs" />
|
||||||
|
<Compile Include="Design\CustomControl\CustomToggleSwitchPainter.cs" />
|
||||||
|
<Compile Include="Design\Forms\LoginForm.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Design\Forms\LoginForm.Designer.cs">
|
||||||
|
<DependentUpon>LoginForm.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Design\Forms\MainForm.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Design\Forms\MainForm.Designer.cs">
|
||||||
|
<DependentUpon>MainForm.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Program.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="SyncManager.cs" />
|
||||||
|
<Compile Include="Tornado\K3DEventHandler.cs" />
|
||||||
|
<Compile Include="Tornado\K3DEventHandlerBase.cs" />
|
||||||
|
<Compile Include="Tornado\TornadoManager.cs" />
|
||||||
|
<EmbeddedResource Include="Design\Forms\LoginForm.resx">
|
||||||
|
<DependentUpon>LoginForm.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Design\Forms\MainForm.resx">
|
||||||
|
<DependentUpon>MainForm.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Properties\licenses.licx" />
|
||||||
|
<EmbeddedResource Include="Properties\Resources.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<Compile Include="Properties\Resources.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
</Compile>
|
||||||
|
<None Include="packages.config" />
|
||||||
|
<None Include="Properties\Settings.settings">
|
||||||
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
<Compile Include="Properties\Settings.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="App.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="API\" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="Resources\no-image-icon-23494.png" />
|
||||||
|
<Content Include="ssg.ico" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
</Project>
|
||||||
BIN
SSG_Automation_Solution/SSG_Automation_Solution.zip
Normal file
BIN
SSG_Automation_Solution/SSG_Automation_Solution.zip
Normal file
Binary file not shown.
510
SSG_Automation_Solution/SyncManager.cs
Normal file
510
SSG_Automation_Solution/SyncManager.cs
Normal file
@@ -0,0 +1,510 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using SSG_Automation_Solution.Data;
|
||||||
|
|
||||||
|
public class FileInfoResponse
|
||||||
|
{
|
||||||
|
public bool Exists { get; set; }
|
||||||
|
public long FileSize { get; set; }
|
||||||
|
public DateTime? LastModified { get; set; }
|
||||||
|
public string FileHash { get; set; } // 파일의 SHA-256 해시 값
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SyncManager
|
||||||
|
{
|
||||||
|
private static readonly string ApiBaseUrl = "http://" + DBInfo.getInstance().DBIP + ":60031/api/sync";
|
||||||
|
private static readonly string LocalPath = Environment.CurrentDirectory + @"\Data";
|
||||||
|
private string UserId { get; set; }
|
||||||
|
TimeSpan timeGap = new TimeSpan(0);
|
||||||
|
|
||||||
|
public void setTimeGap(TimeSpan span)
|
||||||
|
{
|
||||||
|
timeGap = span;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SyncManager(string userId)
|
||||||
|
{
|
||||||
|
UserId = userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> GetIsModifyingAsync()
|
||||||
|
{
|
||||||
|
using (HttpClient client = new HttpClient())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
HttpResponseMessage response = await client.GetAsync($"{ApiBaseUrl}/modifying-status?userId={UserId}");
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var result = JsonConvert.DeserializeObject<dynamic>(await response.Content.ReadAsStringAsync());
|
||||||
|
return result.isModifying;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"서버 상태 조회 실패: {ex.Message}");
|
||||||
|
}
|
||||||
|
return false; // 기본값 반환
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task SetIsModifyingAsync(bool status)
|
||||||
|
{
|
||||||
|
using (HttpClient client = new HttpClient())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string jsonContent = JsonConvert.SerializeObject(status);
|
||||||
|
var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");
|
||||||
|
|
||||||
|
HttpResponseMessage response = await client.PostAsync($"{ApiBaseUrl}/set-modifying?userId={UserId}", content);
|
||||||
|
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"서버 isModifying 상태 변경: {status}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine($"서버 상태 변경 실패: {response.ReasonPhrase}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"서버 상태 변경 요청 중 오류 발생: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 단일 파일 동기화 (Groups.json, scenelist.json, 또는 scheduleData/*.json)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="localFilePath">로컬 파일 경로 (예: Data\\Groups.json)</param>
|
||||||
|
/// <param name="fileNameOnServer">서버에서 사용할 파일 이름 (예: Groups.json, scheduleData\\False_20250130.json)</param>
|
||||||
|
public async Task<int> SyncFileAsync(string localFilePath, string fileNameOnServer)
|
||||||
|
{
|
||||||
|
bool isScheduleFile = fileNameOnServer.StartsWith("scheduleData");
|
||||||
|
bool localExists = File.Exists(localFilePath);
|
||||||
|
bool localHasSongChul = true;
|
||||||
|
|
||||||
|
if (isScheduleFile && localExists)
|
||||||
|
{
|
||||||
|
string localContent = File.ReadAllText(localFilePath);
|
||||||
|
if (!localContent.Contains("\"scheduleType\":\"송출\""))
|
||||||
|
{
|
||||||
|
localHasSongChul = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var serverInfo = await GetServerFileInfo(fileNameOnServer);
|
||||||
|
bool serverExists = (serverInfo != null);
|
||||||
|
|
||||||
|
if (isScheduleFile)
|
||||||
|
{
|
||||||
|
if (!localHasSongChul) localExists = false;
|
||||||
|
if (!serverExists && !localExists)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!serverExists && !localExists)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (serverExists && localExists)
|
||||||
|
{
|
||||||
|
var localInfo = new FileInfo(localFilePath);
|
||||||
|
long localSize = localInfo.Length;
|
||||||
|
DateTime localTime = localInfo.LastWriteTimeUtc;
|
||||||
|
string localHash = ComputeLocalFileHash(localFilePath);
|
||||||
|
|
||||||
|
long serverSize = serverInfo.FileSize;
|
||||||
|
DateTime serverTime = serverInfo.LastModified ?? DateTime.MinValue;
|
||||||
|
string serverHash = serverInfo.FileHash;
|
||||||
|
|
||||||
|
if (localInfo.FullName.Contains("sceneList0"))
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Local: size={localSize}, time={localTime}, hash={localHash}");
|
||||||
|
Console.WriteLine($"Server: size={serverSize}, time={serverTime}, hash={serverHash}");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (localHash == serverHash)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (localTime > serverTime)
|
||||||
|
{
|
||||||
|
await UploadRawJsonFile(localFilePath, fileNameOnServer);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await DownloadRawJsonFile(localFilePath, fileNameOnServer);
|
||||||
|
if (fileNameOnServer.Contains("Groups.json")) return 1;
|
||||||
|
else if (fileNameOnServer.Contains("scenelist.json")) return 2;
|
||||||
|
else return 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (serverExists && !localExists)
|
||||||
|
{
|
||||||
|
await DownloadRawJsonFile(localFilePath, fileNameOnServer);
|
||||||
|
if (fileNameOnServer.Contains("Groups.json")) return 1;
|
||||||
|
else if (fileNameOnServer.Contains("scenelist.json")) return 2;
|
||||||
|
else return 3;
|
||||||
|
}
|
||||||
|
else if (!serverExists && localExists)
|
||||||
|
{
|
||||||
|
await UploadRawJsonFile(localFilePath, fileNameOnServer);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 서버 파일 정보 조회: fileName => { Exists, FileSize, LastModified, FileHash }
|
||||||
|
/// </summary>
|
||||||
|
private async Task<FileInfoResponse> GetServerFileInfo(string fileName)
|
||||||
|
{
|
||||||
|
using (HttpClient client = new HttpClient())
|
||||||
|
{
|
||||||
|
string url = $"{ApiBaseUrl}/fileinfo?fileName={fileName}&userId={UserId}";
|
||||||
|
HttpResponseMessage response = await client.GetAsync(url);
|
||||||
|
if (!response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
string json = await response.Content.ReadAsStringAsync();
|
||||||
|
if (string.IsNullOrWhiteSpace(json))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return JsonConvert.DeserializeObject<FileInfoResponse>(json);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string ComputeLocalFileHash(string filePath)
|
||||||
|
{
|
||||||
|
if (!File.Exists(filePath))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
using (var sha256 = SHA256.Create())
|
||||||
|
using (var stream = File.OpenRead(filePath))
|
||||||
|
{
|
||||||
|
byte[] hashBytes = sha256.ComputeHash(stream);
|
||||||
|
return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task<string> GetServerFileHash(HttpClient client, string serverFilePath, string userId)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string requestUrl = $"{ApiBaseUrl}/file-hash?file={serverFilePath}&userId={userId}";
|
||||||
|
HttpResponseMessage response = await client.GetAsync(requestUrl);
|
||||||
|
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var result = JsonConvert.DeserializeObject<dynamic>(await response.Content.ReadAsStringAsync());
|
||||||
|
return result.Hash;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine($"⚠ 서버 해시 요청 실패: {serverFilePath} - {response.ReasonPhrase}");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"⚠ 서버 해시 조회 중 예외 발생: {ex.Message}");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 로컬 -> 서버 (Raw JSON) 업로드
|
||||||
|
/// </summary>
|
||||||
|
private async Task UploadRawJsonFile(string localFilePath, string fileNameOnServer)
|
||||||
|
{
|
||||||
|
using (HttpClient client = new HttpClient())
|
||||||
|
{
|
||||||
|
if (!File.Exists(localFilePath))
|
||||||
|
{
|
||||||
|
Console.WriteLine($"❌ 업로드할 파일이 존재하지 않음: {localFilePath}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1️⃣ 서버에서 해당 파일의 해시값 가져오기
|
||||||
|
string serverHash = await GetServerFileHash(client, fileNameOnServer, UserId);
|
||||||
|
string localHash = ComputeLocalFileHash(localFilePath);
|
||||||
|
|
||||||
|
if (serverHash != null && serverHash == localHash)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"✅ 파일이 동일하므로 업로드 생략: {localFilePath}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
using (var form = new MultipartFormDataContent())
|
||||||
|
{
|
||||||
|
byte[] fileBytes = File.ReadAllBytes(localFilePath);
|
||||||
|
var fileContent = new ByteArrayContent(fileBytes);
|
||||||
|
fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
|
||||||
|
|
||||||
|
form.Add(fileContent, "file", Path.GetFileName(localFilePath));
|
||||||
|
|
||||||
|
string requestUrl = $"{ApiBaseUrl}/upload-file?file={fileNameOnServer}&userId={UserId}";
|
||||||
|
HttpResponseMessage response = await client.PostAsync(requestUrl, form);
|
||||||
|
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"✅ 업로드 성공: {localFilePath} => {fileNameOnServer}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
string errorMessage = await response.Content.ReadAsStringAsync();
|
||||||
|
Console.WriteLine($"❌ 업로드 실패: {localFilePath} - {response.ReasonPhrase}");
|
||||||
|
Console.WriteLine(errorMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 서버 -> 로컬 (Raw JSON) 다운로드
|
||||||
|
/// </summary>
|
||||||
|
private async Task DownloadRawJsonFile(string localPath, string fileNameOnServer)
|
||||||
|
{
|
||||||
|
using (HttpClient client = new HttpClient())
|
||||||
|
{
|
||||||
|
// 1️⃣ 서버에서 해당 파일의 해시값 가져오기
|
||||||
|
string serverHash = await GetServerFileHash(client, fileNameOnServer, UserId);
|
||||||
|
string localHash = ComputeLocalFileHash(localPath);
|
||||||
|
|
||||||
|
if (serverHash != null && serverHash == localHash)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"✅ 파일이 동일하므로 다운로드 생략: {fileNameOnServer}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string requestUrl = $"{ApiBaseUrl}/download-file?file={fileNameOnServer}&userId={UserId}";
|
||||||
|
HttpResponseMessage response = await client.GetAsync(requestUrl);
|
||||||
|
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
byte[] fileData = await response.Content.ReadAsByteArrayAsync();
|
||||||
|
File.WriteAllBytes(localPath, fileData);
|
||||||
|
|
||||||
|
Console.WriteLine($"✅ 다운로드 성공: {fileNameOnServer} => {localPath}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine($"❌ 다운로드 실패: {fileNameOnServer} - {response.ReasonPhrase}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//────────────────────────────────────────────────────────────
|
||||||
|
// 아래부터 신규 추가: 단순 파일 업로드/다운로드 API (1~5 폴더)
|
||||||
|
//────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 로컬 파일을 서버의 지정된 폴더(1~5)에 업로드합니다.
|
||||||
|
/// API 엔드포인트: POST {ApiBaseUrl}/upload-simple-file/{folderId}?userId={UserId}
|
||||||
|
/// </summary>
|
||||||
|
public async Task<int> UploadSimpleFileAsync(string localFilePath, int folderId)
|
||||||
|
{
|
||||||
|
if (!File.Exists(localFilePath))
|
||||||
|
{
|
||||||
|
Console.WriteLine($"업로드할 파일이 존재하지 않습니다: {localFilePath}");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
using (HttpClient client = new HttpClient())
|
||||||
|
{
|
||||||
|
using (var form = new MultipartFormDataContent())
|
||||||
|
{
|
||||||
|
byte[] fileBytes = File.ReadAllBytes(localFilePath);
|
||||||
|
var fileContent = new ByteArrayContent(fileBytes);
|
||||||
|
fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
|
||||||
|
form.Add(fileContent, "file", Path.GetFileName(localFilePath));
|
||||||
|
|
||||||
|
string requestUrl = $"{ApiBaseUrl}/upload-simple-file/{folderId}?userId={UserId}";
|
||||||
|
HttpResponseMessage response = await client.PostAsync(requestUrl, form);
|
||||||
|
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"✅ 단순 파일 업로드 성공: {localFilePath} => 폴더 {folderId}");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
string errorMsg = await response.Content.ReadAsStringAsync();
|
||||||
|
Console.WriteLine($"❌ 단순 파일 업로드 실패: {localFilePath} - {response.ReasonPhrase}\n{errorMsg}");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 서버의 지정된 폴더(1~5)에서 파일을 다운로드합니다.
|
||||||
|
/// API 엔드포인트: GET {ApiBaseUrl}/download-simple-file/{folderId}/{fileName}?userId={UserId}
|
||||||
|
/// 다운로드한 파일은 localFilePath에 저장됩니다.
|
||||||
|
/// </summary>
|
||||||
|
public async Task<int> DownloadSimpleFileAsync(string fileName, int folderId, string localFilePath)
|
||||||
|
{
|
||||||
|
using (HttpClient client = new HttpClient())
|
||||||
|
{
|
||||||
|
string requestUrl = $"{ApiBaseUrl}/download-simple-file/{folderId}/{fileName}?userId={UserId}";
|
||||||
|
HttpResponseMessage response = await client.GetAsync(requestUrl);
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
byte[] fileData = await response.Content.ReadAsByteArrayAsync();
|
||||||
|
File.WriteAllBytes(localFilePath, fileData);
|
||||||
|
Console.WriteLine($"✅ 단순 파일 다운로드 성공: {fileName} (폴더 {folderId}) => {localFilePath}");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine($"❌ 단순 파일 다운로드 실패: {fileName} (폴더 {folderId}) - {response.ReasonPhrase}");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//────────────────────────────────────────────────────────────
|
||||||
|
// 기존 Thumbnail 및 기타 동기화 관련 메서드들은 그대로 유지
|
||||||
|
//────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
#region Thumbnail Upload and DownLoad
|
||||||
|
|
||||||
|
private static readonly string ThumbnailFolder = Path.Combine(Environment.CurrentDirectory, "Thumbnail");
|
||||||
|
|
||||||
|
public async Task UploadThumbnailAsync(string filePath)
|
||||||
|
{
|
||||||
|
using (HttpClient client = new HttpClient())
|
||||||
|
{
|
||||||
|
if (!File.Exists(filePath))
|
||||||
|
{
|
||||||
|
Console.WriteLine($"업로드할 썸네일이 존재하지 않습니다: {filePath}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string fileName = Path.GetFileName(filePath);
|
||||||
|
string requestUrl = $"{ApiBaseUrl}/upload-thumbnail?userId={UserId}";
|
||||||
|
|
||||||
|
using (var form = new MultipartFormDataContent())
|
||||||
|
{
|
||||||
|
var fileContent = new ByteArrayContent(File.ReadAllBytes(filePath));
|
||||||
|
fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/png");
|
||||||
|
form.Add(fileContent, "file", fileName);
|
||||||
|
|
||||||
|
HttpResponseMessage response = await client.PostAsync(requestUrl, form);
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"썸네일 업로드 성공: {fileName}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine($"썸네일 업로드 실패: {fileName} - {response.ReasonPhrase}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task SyncThumbnailsAsync()
|
||||||
|
{
|
||||||
|
if (!Directory.Exists(ThumbnailFolder))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(ThumbnailFolder);
|
||||||
|
}
|
||||||
|
|
||||||
|
string[] localThumbnails = Directory.GetFiles(ThumbnailFolder, "*.png")
|
||||||
|
.Select(Path.GetFileName)
|
||||||
|
.ToArray();
|
||||||
|
|
||||||
|
List<string> serverThumbnails = await GetServerThumbnailsAsync();
|
||||||
|
|
||||||
|
foreach (var localFile in localThumbnails)
|
||||||
|
{
|
||||||
|
if (!serverThumbnails.Contains(localFile))
|
||||||
|
{
|
||||||
|
Console.WriteLine($"서버에 없는 썸네일 발견. 업로드 시도: {localFile}");
|
||||||
|
await UploadThumbnailAsync(Path.Combine(ThumbnailFolder, localFile));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var serverFile in serverThumbnails)
|
||||||
|
{
|
||||||
|
if (!localThumbnails.Contains(serverFile))
|
||||||
|
{
|
||||||
|
Console.WriteLine($"클라이언트에 없는 썸네일 발견. 다운로드 시도: {serverFile}");
|
||||||
|
await DownloadThumbnailAsync(serverFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string ComputeFileHash(string filePath)
|
||||||
|
{
|
||||||
|
using (var sha256 = SHA256.Create())
|
||||||
|
using (var stream = File.OpenRead(filePath))
|
||||||
|
{
|
||||||
|
byte[] hashBytes = sha256.ComputeHash(stream);
|
||||||
|
return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<string>> GetServerThumbnailsAsync()
|
||||||
|
{
|
||||||
|
using (HttpClient client = new HttpClient())
|
||||||
|
{
|
||||||
|
string requestUrl = $"{ApiBaseUrl}/list-thumbnails?userId={UserId}";
|
||||||
|
HttpResponseMessage response = await client.GetAsync(requestUrl);
|
||||||
|
|
||||||
|
if (!response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
Console.WriteLine("서버의 썸네일 목록을 가져오는 데 실패했습니다.");
|
||||||
|
return new List<string>();
|
||||||
|
}
|
||||||
|
|
||||||
|
string jsonResponse = await response.Content.ReadAsStringAsync();
|
||||||
|
return JsonConvert.DeserializeObject<List<string>>(jsonResponse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task DownloadThumbnailAsync(string fileName)
|
||||||
|
{
|
||||||
|
using (HttpClient client = new HttpClient())
|
||||||
|
{
|
||||||
|
string requestUrl = $"{ApiBaseUrl}/download-thumbnail?fileName={fileName}&userId={UserId}";
|
||||||
|
HttpResponseMessage response = await client.GetAsync(requestUrl);
|
||||||
|
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
byte[] imageData = await response.Content.ReadAsByteArrayAsync();
|
||||||
|
string localFilePath = Path.Combine(ThumbnailFolder, fileName);
|
||||||
|
File.WriteAllBytes(localFilePath, imageData);
|
||||||
|
Console.WriteLine($"썸네일 다운로드 성공: {localFilePath}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine($"썸네일 다운로드 실패: {fileName} - {response.ReasonPhrase}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
24
SSG_Automation_Solution/Tornado/K3DEventHandler.cs
Normal file
24
SSG_Automation_Solution/Tornado/K3DEventHandler.cs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
using SSG_Automation_Solution.Design.Forms;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SSG_Automation_Solution.Tornado
|
||||||
|
{
|
||||||
|
public class K3DEventHandler : K3DEventHandlerBase
|
||||||
|
{
|
||||||
|
public MainForm mainForm;
|
||||||
|
|
||||||
|
public K3DEventHandler(MainForm _mainForm)
|
||||||
|
{
|
||||||
|
mainForm = _mainForm;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnLogMessage(string LogMessage)
|
||||||
|
{
|
||||||
|
mainForm.OnLogMessage(LogMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
663
SSG_Automation_Solution/Tornado/K3DEventHandlerBase.cs
Normal file
663
SSG_Automation_Solution/Tornado/K3DEventHandlerBase.cs
Normal file
@@ -0,0 +1,663 @@
|
|||||||
|
using K3DAsyncEngineLib;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SSG_Automation_Solution.Tornado
|
||||||
|
{
|
||||||
|
public class K3DEventHandlerBase : KAEventHandler
|
||||||
|
{
|
||||||
|
virtual public void OnAddPause(int bSuccess, string SceneName, int AnimationType, int FrameNo, int Delay, int bAuto) { }
|
||||||
|
|
||||||
|
virtual public void OnAddPauseByName(int bSuccess, string SceneName, string AnimationName, int FrameNo, int Delay, int bAuto) { }
|
||||||
|
|
||||||
|
virtual public void OnAddText(int bSuccess, string ObjectName, string Text, int StyleNo) { }
|
||||||
|
|
||||||
|
virtual public void OnBeginTransaction(int iSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnDeletePause(int bSuccess, string SceneName, int AnimationType, int FrameNo, int bAll) { }
|
||||||
|
|
||||||
|
virtual public void OnDeletePauseByName(int bSuccess, string SceneName, string AnimationName, int FrameNo, int bAll) { }
|
||||||
|
|
||||||
|
virtual public void OnEditText(int bSuccess, string ObjectName, string Text, int BeginPos, int EndPos, int StyleNo) { }
|
||||||
|
|
||||||
|
virtual public void OnEndTransaction(int iSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnHeartBeat(int bSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnHello() { }
|
||||||
|
|
||||||
|
virtual public void OnClose(int ErrorCode) { }
|
||||||
|
|
||||||
|
virtual public void OnLoadProject(int bSuccess, KAScene pScene, int TotalCount) { }
|
||||||
|
|
||||||
|
virtual public void OnCloseProject(int bSuccess, string AliasName) { }
|
||||||
|
|
||||||
|
virtual public void OnSelectProject(int bSuccess, string AliasName) { }
|
||||||
|
|
||||||
|
virtual public void OnLoadScene(int bSuccess, string SceneName) { }
|
||||||
|
|
||||||
|
virtual public void OnLoadSceneForce(int bSuccess, string SceneName) { }
|
||||||
|
|
||||||
|
virtual public void OnLogMessage(string LogMessage) { }
|
||||||
|
|
||||||
|
virtual public void OnMessageNo(uint MessageNo) { }
|
||||||
|
|
||||||
|
virtual public void OnPause(int bSuccess, int OutputChannelIndex, int LayerNo) { }
|
||||||
|
|
||||||
|
virtual public void OnPlay(int bSuccess, int OutputChannelIndex, int LayerNo) { }
|
||||||
|
|
||||||
|
virtual public void OnPlayOut(int bSuccess, int OutputChannelIndex, int LayerNo) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryAnimationCount(int bSuccess, string SceneName, int AnimationCount) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryAnimationNames(int bSuccess, string SceneName, int Index, int TotalCount, string pAnimationName) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryChartDataTable(int bSuccess, string ObjectName, int Index, int TotalCount, ref sKChartDataTable Param) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryChartObjects(int bSuccess, string SceneName, int Index, int TotalCount, ref sKChart Param) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryClassType(int bSuccess, string ObjectName, int ClassType) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryIsOnAir(int bSuccess, int OutputChannelIndex, int LayerNo) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryLightNames(int bSuccess, string SceneName, int Index, int TotalCount, string pLightName) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryObjectAttribute(int bSuccess, string ObjectName, ref sKObjectAttribute pKObjectAttribute) { }
|
||||||
|
|
||||||
|
virtual public void OnQuerySceneEffectType(int bSuccess, string SceneName, int bInEffect, eKSceneEffectType EffectType, int Duration) { }
|
||||||
|
|
||||||
|
virtual public void OnQuerySize(int bSuccess, string ObjectName, float Width, float Height, float Depth) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryVariables(int bSuccess, string SceneName, int Index, int TotalCount, ref sKVariable Param) { }
|
||||||
|
|
||||||
|
virtual public void OnReloadScene(int bSuccess, string FileName, string SceneName) { }
|
||||||
|
|
||||||
|
virtual public void OnReplaceWithAFile(int bSuccess, string ObjectName, string ReplaceFileName) { }
|
||||||
|
|
||||||
|
virtual public void OnResume(int bSuccess, int OutputChannelIndex, int LayerNo) { }
|
||||||
|
|
||||||
|
virtual public void OnRollbackTransaction(int iSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnSaveImageFile(int bSuccess, string SceneName, int Width, int Height, int Frame, string ImagePathName) { }
|
||||||
|
|
||||||
|
virtual public void OnDownloadThumbnail(int bSuccess, string SceneName, int Width, int Height, int Frame, string ImagePathName) { }
|
||||||
|
|
||||||
|
virtual public void OnSaveScene(int bSuccess, string SceneName, string K3SFileName, int UseCollect) { }
|
||||||
|
|
||||||
|
virtual public void OnScenePaused(int bSuccess, int OutputChannelIndex, int LayerNo) { }
|
||||||
|
|
||||||
|
virtual public void OnScenePlayed(int bSuccess, int OutputChannelIndex, int LayerNo) { }
|
||||||
|
|
||||||
|
virtual public void OnSceneAnimationPlayed(int bSuccess, int OutputChannelIndex, int LayerNo) { }
|
||||||
|
|
||||||
|
virtual public void OnScenePrepare(int bSuccess, string SceneName, int OutputChannelIndex, int LayerNo) { }
|
||||||
|
|
||||||
|
virtual public void OnScenePrepareEx(int bSuccess, string SceneName, int OutputChannelIndex, int LayerNo) { }
|
||||||
|
|
||||||
|
virtual public void OnSetBackground(int bSuccess, string SceneName, ref sKBackground Param) { }
|
||||||
|
|
||||||
|
virtual public void OnSetBackgroundPauseAtZeroFrameAsStandBy(int bSuccess, string SceneName, int bPause) { }
|
||||||
|
|
||||||
|
virtual public void OnSetBackgroundFill(int bSuccess, string SceneName, int R, int G, int B, int A) { }
|
||||||
|
|
||||||
|
virtual public void OnSetBackgroundTexture(int bSuccess, string SceneName, string TextureFileName) { }
|
||||||
|
|
||||||
|
virtual public void OnSetBackgroundVideo(int bSuccess, string SceneName, string VideoFileName, int LoopCount, int LoopInfinite) { }
|
||||||
|
|
||||||
|
virtual public void OnSetBackgroundLiveIn(int bSuccess, string SceneName, int InputChannel) { }
|
||||||
|
|
||||||
|
virtual public void OnUseBackground(int bSuccess, string SceneName, int Use) { }
|
||||||
|
|
||||||
|
virtual public void OnSetChangeOut(int bSuccess, string SceneName) { }
|
||||||
|
|
||||||
|
virtual public void OnSetChartCellData(int bSuccess, string ObjectName, float Value) { }
|
||||||
|
|
||||||
|
virtual public void OnSetChartCSVFile(int bSuccess, string ObjectName, string FilePath) { }
|
||||||
|
|
||||||
|
virtual public void OnSetCircleAngleKey(int bSuccess, string ObjectName, int KeyIndex, float Start, float End) { }
|
||||||
|
|
||||||
|
virtual public void OnSetCountDown(int bSuccess, string ObjectName, float Second) { }
|
||||||
|
|
||||||
|
virtual public void OnSetCounterNumberKey(int bSuccess, string ObjectName, int KeyIndex, double Number) { }
|
||||||
|
|
||||||
|
virtual public void OnSetCropKey(int bSuccess, string ObjectName, int KeyIndex, float Left, float Top, float Right, float Bottom) { }
|
||||||
|
|
||||||
|
virtual public void OnSetCylinderAngleKey(int bSuccess, string ObjectName, int KeyIndex, float Start, float End) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEdgeAttribute(int bSuccess, string ObjectName, ref sKEdgeAttribute Param) { }
|
||||||
|
|
||||||
|
virtual public void OnSetFaceAttribute(int bSuccess, string ObjectName, ref sKFaceAttribute Param) { }
|
||||||
|
|
||||||
|
virtual public void OnSetFont(int bSuccess, string ObjectName, ref sKFont Param) { }
|
||||||
|
|
||||||
|
virtual public void OnSetLightAttribute(int bSuccess, string SceneName, string LightName, ref sKLightAttribute Param) { }
|
||||||
|
|
||||||
|
virtual public void OnSetLightColor(int bSuccess, string SceneName, string LightName, ref sKLightColor Param) { }
|
||||||
|
|
||||||
|
virtual public void OnSetMaterial(int bSuccess, string ObjectName, ref sKMaterial pKMaterial) { }
|
||||||
|
|
||||||
|
virtual public void OnSetMaterialKey(int bSuccess, string ObjectName, int KeyIndex, ref sKMaterial pKMaterial) { }
|
||||||
|
|
||||||
|
virtual public void OnSetLensFlaresKey(int bSuccess, string ObjectName, int KeyIndex, float X, float Y, float Z) { }
|
||||||
|
|
||||||
|
virtual public void OnSetObjectAttribute(int bSuccess, string ObjectName, ref sKObjectAttribute pKObjectAttribute) { }
|
||||||
|
|
||||||
|
virtual public void OnSetPosition(int bSuccess, string ObjectName, float X, float Y, float Z) { }
|
||||||
|
|
||||||
|
virtual public void OnSetPositionKey(int bSuccess, string ObjectName, int KeyIndex, float X, float Y, float Z) { }
|
||||||
|
|
||||||
|
virtual public void OnSetRotation(int bSuccess, string ObjectName, float X, float Y, float Z) { }
|
||||||
|
|
||||||
|
virtual public void OnSetRotationKey(int bSuccess, string ObjectName, int KeyIndex, float X, float Y, float Z) { }
|
||||||
|
|
||||||
|
virtual public void OnSetScale(int bSuccess, string ObjectName, float X, float Y, float Z) { }
|
||||||
|
|
||||||
|
virtual public void OnSetScaleKey(int bSuccess, string ObjectName, int KeyIndex, float X, float Y, float Z) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEffectType(int bSuccess, string SceneName, int bInEffect, eKSceneEffectType EffectType, int Duration) { }
|
||||||
|
|
||||||
|
virtual public void OnSetShadowAttribute(int bSuccess, string ObjectName, ref sKShadowAttribute Param) { }
|
||||||
|
|
||||||
|
virtual public void OnSetSize(int bSuccess, string ObjectName, float Width, float Height, float Depth) { }
|
||||||
|
|
||||||
|
virtual public void OnSetSphereAngleKey(int bSuccess, string ObjectName, int KeyIndex, float Start, float End) { }
|
||||||
|
|
||||||
|
virtual public void OnSetStyleColor(int bSuccess, string ObjectName, ref sKStyleColor Param) { }
|
||||||
|
|
||||||
|
virtual public void OnSetFaceColor(int bSuccess, string ObjectName, int R, int G, int B, int A) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEdgeColor(int bSuccess, string ObjectName, int R, int G, int B, int A) { }
|
||||||
|
|
||||||
|
virtual public void OnSetShadowColor(int bSuccess, string ObjectName, int R, int G, int B, int A) { }
|
||||||
|
|
||||||
|
virtual public void OnSetFaceTextColor(int bSuccess, string ObjectName, int BeginPos, int Count, int R, int G, int B, int A) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEdgeTextColor(int bSuccess, string ObjectName, int BeginPos, int Count, int R, int G, int B, int A) { }
|
||||||
|
|
||||||
|
virtual public void OnSetShadowTextColor(int bSuccess, string ObjectName, int BeginPos, int Count, int R, int G, int B, int A) { }
|
||||||
|
|
||||||
|
virtual public void OnSetTextStyle(int bSuccess, string ObjectName, int Begin, int Count, int StyleNo) { }
|
||||||
|
|
||||||
|
virtual public void OnSetValue(int bSuccess, string ObjectName, string Value) { }
|
||||||
|
|
||||||
|
virtual public void OnSetTextTexture(int bSuccess, string ObjectName, string FileName) { }
|
||||||
|
|
||||||
|
virtual public void OnSetStyleTexture(int bSuccess, string ObjectName, string FileName) { }
|
||||||
|
|
||||||
|
virtual public void OnSetDiffuseTexture(int bSuccess, string ObjectName, string FileName) { }
|
||||||
|
|
||||||
|
virtual public void OnSetSpecularTexture(int bSuccess, string ObjectName, string FileName) { }
|
||||||
|
|
||||||
|
virtual public void OnSetTransparencyTexture(int bSuccess, string ObjectName, string FileName) { }
|
||||||
|
|
||||||
|
virtual public void OnSetNormalTexture(int bSuccess, string ObjectName, string FileName) { }
|
||||||
|
|
||||||
|
virtual public void OnSetReflectionTexture(int bSuccess, string ObjectName, string FileName) { }
|
||||||
|
|
||||||
|
virtual public void OnSetRefractionTexture(int bSuccess, string ObjectName, string FileName) { }
|
||||||
|
|
||||||
|
virtual public void OnSetVisible(int bSuccess, string ObjectName, int bShow) { }
|
||||||
|
|
||||||
|
virtual public void OnStop(int bSuccess, int OutputChannelIndex, int LayerNo) { }
|
||||||
|
|
||||||
|
virtual public void OnStopAll(int iSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnStoreTextStyle(int bSuccess, string ObjectName, string Text, int StyleCount) { }
|
||||||
|
|
||||||
|
virtual public void OnTrigger(int bSuccess, int OutputChannelIndex, int LayerNo, int AnimationType) { }
|
||||||
|
|
||||||
|
virtual public void OnTriggerByName(int bSuccess, int OutputChannelIndex, int LayerNo, string AnimationName) { }
|
||||||
|
|
||||||
|
virtual public void OnTriggerObject(int bSuccess, string ObjectName, int OutputChannelIndex, int LayerNo, int AnimationType, int bWithChildren) { }
|
||||||
|
|
||||||
|
virtual public void OnTriggerObjectByName(int bSuccess, string ObjectName, int OutputChannelIndex, int LayerNo, string AnimationName, int bWithChildren) { }
|
||||||
|
|
||||||
|
virtual public void OnUnloadAll(int bSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnUnloadScene(int bSuccess, string SceneName) { }
|
||||||
|
|
||||||
|
virtual public void OnUpdateTextures(int bSuccess, string SceneName) { }
|
||||||
|
|
||||||
|
virtual public void OnAddPathPoint(int bSuccess, string ObjectName, int Count) { }
|
||||||
|
|
||||||
|
virtual public void OnClearPathPoints(int bSuccess, string ObjectName) { }
|
||||||
|
|
||||||
|
virtual public void OnAddPathShapePoint(int bSuccess, string ObjectName, int Count) { }
|
||||||
|
|
||||||
|
virtual public void OnClearPathShapePoints(int bSuccess, string ObjectName) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryScrollRemainingDistance(int bSuccess, string ObjectName, int ScrollRemainingDistance) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryScrollChildRemainingDistance(int bSuccess, string ObjectName, string ChildName, int ScrollRemainingDistance) { }
|
||||||
|
|
||||||
|
virtual public void OnAddScrollObject(int bSuccess, string ObjectName, string ChildName) { }
|
||||||
|
|
||||||
|
virtual public void OnSetVariableName(int bSuccess, string ObjectName, string VariableName) { }
|
||||||
|
|
||||||
|
virtual public void OnAdjustScrollSpeed(int bSuccess, string ObjectName, float SpeedDelta) { }
|
||||||
|
|
||||||
|
virtual public void OnSetScrollSpeed(int bSuccess, string ObjectName, float Speed) { }
|
||||||
|
|
||||||
|
virtual public void OnSetDiffuse(int bSuccess, string ObjectName, int R, int G, int B) { }
|
||||||
|
|
||||||
|
virtual public void OnSetAmbient(int bSuccess, string ObjectName, int R, int G, int B) { }
|
||||||
|
|
||||||
|
virtual public void OnSetSpecular(int bSuccess, string ObjectName, int R, int G, int B) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEmissive(int bSuccess, string ObjectName, int R, int G, int B) { }
|
||||||
|
|
||||||
|
virtual public void OnSetOpacity(int bSuccess, string ObjectName, int Opacity) { }
|
||||||
|
|
||||||
|
virtual public void OnSetDiffuseKey(int bSuccess, string ObjectName, int KeyIndex, int R, int G, int B) { }
|
||||||
|
|
||||||
|
virtual public void OnSetAmbientKey(int bSuccess, string ObjectName, int KeyIndex, int R, int G, int B) { }
|
||||||
|
|
||||||
|
virtual public void OnSetSpecularKey(int bSuccess, string ObjectName, int KeyIndex, int R, int G, int B) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEmissiveKey(int bSuccess, string ObjectName, int KeyIndex, int R, int G, int B) { }
|
||||||
|
|
||||||
|
virtual public void OnSetOpacityKey(int bSuccess, string ObjectName, int KeyIndex, int Opacity) { }
|
||||||
|
|
||||||
|
virtual public void OnSetLoftPositionKey(int bSuccess, string ObjectName, int KeyIndex, float Start, float End) { }
|
||||||
|
|
||||||
|
virtual public void OnModifyPathPoint(int bSuccess, string ObjectName, int Index, float X, float Y, float Z) { }
|
||||||
|
|
||||||
|
virtual public void OnSetVideoFrame(int bSuccess, string ObjectName, int StartFrame, int StopFrame) { }
|
||||||
|
|
||||||
|
virtual public void OnSetVideoRepeatInfo(int bSuccess, string ObjectName, int StartFrame, int StopFrame, int LoopCount, int bInfinite, int bPlayAsOut) { }
|
||||||
|
|
||||||
|
virtual public void OnSetTextStyleLibrary(int bSuccess, string ObjectName, string Text, int StyleID) { }
|
||||||
|
|
||||||
|
virtual public void OnAddTextStyleLibrary(int bSuccess, string ObjectName, string Text, int StyleID) { }
|
||||||
|
|
||||||
|
virtual public void OnInitScrollObject(int bSuccess, string ObjectName) { }
|
||||||
|
|
||||||
|
virtual public void OnSetCounterInfo(int bSuccess, string ObjectName, string Format, int UpdatePeriod, int bAddPlusSign) { }
|
||||||
|
|
||||||
|
virtual public void OnSetCounterNumber(int bSuccess, string ObjectName, double Number) { }
|
||||||
|
|
||||||
|
virtual public void OnSetCounterRange(int bSuccess, string ObjectName, double StartTime, double EndTime) { }
|
||||||
|
|
||||||
|
virtual public void OnSetCounterRemainingTime(int bSuccess, string ObjectName, double BaseTime) { }
|
||||||
|
|
||||||
|
virtual public void OnSetCounterElapsedTime(int bSuccess, string ObjectName, double BaseTime) { }
|
||||||
|
|
||||||
|
virtual public void OnSaveObjectImage(int bSuccess, string ObjectName, string FileName) { }
|
||||||
|
|
||||||
|
virtual public void OnSendMosMessage(int bSuccess, string MosMessage) { }
|
||||||
|
|
||||||
|
virtual public void OnReceiveFile(int bSuccess, string ExistingFileName, string NewFileName) { }
|
||||||
|
|
||||||
|
virtual public void OnAddObject(int bSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnAddCloneObject(int bSuccess, string SceneName, string NewVariable) { }
|
||||||
|
|
||||||
|
virtual public void OnSavePreviewImage(int bSuccess, string ImagePathName, int Width, int Height) { }
|
||||||
|
|
||||||
|
virtual public void OnNewProject(int bSuccess, string AliasName) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryPickedObjects(int bSuccess, string SceneName, int index, int TotalCount, ref sKVariable Param) { }
|
||||||
|
|
||||||
|
virtual public void OnSetSceneDuration(int bSuccess, string SceneName, int AnimationType, int Duration) { }
|
||||||
|
|
||||||
|
virtual public void OnSetBackgroundChangeType(int bSuccess, string SceneName, eKBackgroundChangeType ChangeType) { }
|
||||||
|
|
||||||
|
virtual public void OnSetBackgroundPauseType(int bSuccess, string SceneName, eKBackgroundPauseType PauseType) { }
|
||||||
|
|
||||||
|
virtual public void OnDragObject(int bSuccess, string ObjectName, int X, int Y, int FrameCount) { }
|
||||||
|
|
||||||
|
virtual public void OnMoveCamera(int bSuccess, string ObjectName, int X, int Y, int Z, int FrameCount) { }
|
||||||
|
|
||||||
|
virtual public void OnResetDrag(int bSuccess, string ObjectName, int FrameCount) { }
|
||||||
|
|
||||||
|
virtual public void OnCreateStory(int bSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnInsertStory(int bSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnMoveStory(int bSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnSwapStory(int bSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnDeleteStory(int bSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnCreateItem(int bSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnPrepareItem(int bSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnSceneSaved(int bSuccess, string FileName) { }
|
||||||
|
|
||||||
|
virtual public void OnResumeBackground(int bSuccess, int OutputChannelIndex, int LayerNo) { }
|
||||||
|
|
||||||
|
virtual public void OnSetSceneScrollSpeed(int bSuccess, string SceneName, float Speed) { }
|
||||||
|
|
||||||
|
virtual public void OnCreateWithAFile(int bSuccess, string SceneName, string FileName, string VariableName) { }
|
||||||
|
|
||||||
|
virtual public void OnSetSceneAudioFile(int bSuccess, string SceneName, int AnimatiionType, string AudioFileName) { }
|
||||||
|
|
||||||
|
virtual public void OnSetScrollSpeedByScenePlayer(int bSuccess, int OutputChannelIndex, int LayerNo, float Speed) { }
|
||||||
|
|
||||||
|
virtual public void OnAdjustScrollSpeedByScenePlayer(int bSuccess, int OutputChannelIndex, int LayerNo, float SpeedDelta) { }
|
||||||
|
|
||||||
|
virtual public void OnEnableSceneAudio(int bSuccess, string SceneName, int AnimatiionType, int bEnable) { }
|
||||||
|
|
||||||
|
virtual public void OnInsertItem(int bSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnDeleteItem(int bSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnMoveItem(int bSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnSwapItem(int bSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnUpdateItems(int bSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnSetPositionOfPathAnimation(int bSuccess, string ObjectName, float Position) { }
|
||||||
|
|
||||||
|
virtual public void OnSetPositionKeyOfPathAnimation(int bSuccess, string ObjectName, int KeyIndex, float Position) { }
|
||||||
|
|
||||||
|
virtual public void OnUpdateThumbnail(int bSuccess, string SceneName) { }
|
||||||
|
|
||||||
|
virtual public void OnSetStyleItemTexture(int bSuccess, string ObjectName, eKStyleType ItemType, int ItemIndex, string FileName) { }
|
||||||
|
|
||||||
|
virtual public void OnSetKeyFrame(int bSuccess, eKObjectAttribute AttributeType, string ObjectName, int KeyIndex, int Frame, eKKeyFrameType KeyFrameType) { }
|
||||||
|
|
||||||
|
virtual public void OnSetKeyInterpolation(int bSuccess, eKObjectAttribute AttributeType, string ObjectName, int KeyIndex, eKKeyInterpolationType InInterpolation, eKKeyInterpolationType OutInterpolation) { }
|
||||||
|
|
||||||
|
virtual public void OnSetStartFrame(int bSuccess, string ObjectName, int Frame) { }
|
||||||
|
|
||||||
|
virtual public void OnStartVideoCapture(int bSuccess, string FilePath, int VideoCodec) { }
|
||||||
|
|
||||||
|
virtual public void OnStopVideoCapture(int bSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnCaptureImage(int bSuccess, string FilePath) { }
|
||||||
|
|
||||||
|
virtual public void OnAddAbsolutePause(int bSuccess, string SceneName, int AnimationType, int FrameNo, int Delay, int bAuto) { }
|
||||||
|
|
||||||
|
virtual public void OnResetTotalTime(int bSuccess, string SceneName, int AnimationType) { }
|
||||||
|
|
||||||
|
virtual public void OnSetTotalTime(int bSuccess, string SceneName, int AnimationType, int Frame) { }
|
||||||
|
|
||||||
|
virtual public void OnSetAnimationLibrary(int bSuccess, string ObjectName, int AnimationID, int bApplyAtCurrentPosition) { }
|
||||||
|
|
||||||
|
virtual public void OnSetMaterialLibrary(int bSuccess, string ObjectName, int MaterialID) { }
|
||||||
|
|
||||||
|
virtual public void OnSetStyleLibrary(int bSuccess, string ObjectName, int StyleID) { }
|
||||||
|
|
||||||
|
virtual public void OnSetObjectEffectType(int bSuccess, string ObjectName, int bInEffect, eKEffectType EffectType, int Duration) { }
|
||||||
|
|
||||||
|
virtual public void OnSetAnimationLibrary(int bSuccess, string ObjectName, string Name, int bApplyAtCurrentPosition) { }
|
||||||
|
|
||||||
|
virtual public void OnSetMaterialLibrary(int bSuccess, string ObjectName, string Name) { }
|
||||||
|
|
||||||
|
virtual public void OnSetStyleLibrary(int bSuccess, string ObjectName, string Name) { }
|
||||||
|
|
||||||
|
virtual public void OnLoadStyleLibrarys(int bSuccess, string LibraryPath) { }
|
||||||
|
|
||||||
|
virtual public void OnLoadAnimationLibrarys(int bSuccess, string LibraryPath) { }
|
||||||
|
|
||||||
|
virtual public void OnLoadMaterialLibrarys(int bSuccess, string LibraryPath) { }
|
||||||
|
|
||||||
|
virtual public void OnCheckVersion(int bSuccess, string ServerVersion, string SDKVersion) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEffectNone(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEffectWipe(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEffectPush(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEffectTransform(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEffectCurl(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEffectRipple(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEffectParticle(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEffectFade(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEffectDistortion(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEffectBlink(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEffectCrop(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEffectBlur(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEffectColor(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEffectSidefade(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEffectCutOut(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { }
|
||||||
|
|
||||||
|
virtual public void OnSetSceneEffectType(int bSuccess, string SceneName, int bInEffect, eKSceneEffectType EffectType, int Duration) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryGroupType(int bSuccess, string ObjectName, eKGroupType GroupType) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryImageType(int bSuccess, string ObjectName, eKTextureTarget TextureTarget, eKImageType ImageType) { }
|
||||||
|
|
||||||
|
virtual public void OnSetDiffuseTextColor(int bSuccess, string ObjectName, int BeginPos, int Count, int R, int G, int B, int A) { }
|
||||||
|
|
||||||
|
virtual public void OnSetVideoPlayInfo(int bSuccess, string ObjectName, eKTextureTarget TextureTarget, ref sKVideoPlayInfo pVideoPlayInfo) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryVideoPlayInfo(int bSuccess, string ObjectName, eKTextureTarget TextureTarget, ref sKVideoPlayInfo pVideoPlayInfo) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryIs3D(int bSuccess, string ObjectName, int b3D) { }
|
||||||
|
|
||||||
|
//virtual public void OnAddScrollObject2(int bSuccess, string ObjectName, string ChildName, string VariableName) { }
|
||||||
|
|
||||||
|
virtual public void OnPlayDirect(int bSuccess, string SceneName, int OutputChannelIndex, int LayerNo) { }
|
||||||
|
|
||||||
|
virtual public void OnSetImageType(int bSuccess, string ObjectName, eKTextureTarget TextureTarget, eKImageType ImageType) { }
|
||||||
|
|
||||||
|
virtual public void OnCutIn(int bSuccess, int OutputChannelIndex, int LayerNo) { }
|
||||||
|
|
||||||
|
virtual public void OnCutOut(int bSuccess, int OutputChannelIndex, int LayerNo) { }
|
||||||
|
|
||||||
|
virtual public void OnClearNextPreview(int bSuccess, int OutputChannelIndex, int LayerNo) { }
|
||||||
|
|
||||||
|
virtual public void OnSetAudioOutput(int bSuccess, eKPlayAudioType PlayAudioType) { }
|
||||||
|
|
||||||
|
virtual public void OnSetMemo(int bSuccess, string ObjectName, string Memo) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryMemo(int bSuccess, string ObjectName, string Memo) { }
|
||||||
|
|
||||||
|
virtual public void OnEnableMaterialItem(int bSuccess, string ObjectName, eKMaterialType Type, int bEnable) { }
|
||||||
|
|
||||||
|
virtual public void OnSetDiffuseColor(int bSuccess, string ObjectName, sKColor Color) { }
|
||||||
|
|
||||||
|
virtual public void OnSetDiffuseColorKey(int bSuccess, string ObjectName, int KeyIndex, sKColor Color) { }
|
||||||
|
|
||||||
|
virtual public void OnSetAmbientColor(int bSuccess, string ObjectName, sKColor Color) { }
|
||||||
|
|
||||||
|
virtual public void OnSetAmbientColorKey(int bSuccess, string ObjectName, int KeyIndex, sKColor Color) { }
|
||||||
|
|
||||||
|
virtual public void OnSetSpecularColor(int bSuccess, string ObjectName, sKColor Color) { }
|
||||||
|
|
||||||
|
virtual public void OnSetSpecularColorKey(int bSuccess, string ObjectName, int KeyIndex, sKColor Color) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEmissiveColor(int bSuccess, string ObjectName, sKColor Color) { }
|
||||||
|
|
||||||
|
virtual public void OnSetEmissiveColorKey(int bSuccess, string ObjectName, int KeyIndex, sKColor Color) { }
|
||||||
|
|
||||||
|
virtual public void OnSetSpecularSharpness(int bSuccess, string ObjectName, float Sharpness) { }
|
||||||
|
|
||||||
|
virtual public void OnSetTransparencyOpacity(int bSuccess, string ObjectName, byte Opacity) { }
|
||||||
|
|
||||||
|
virtual public void OnSetMaterialTextureOffset(int bSuccess, string ObjectName, float x, float y) { }
|
||||||
|
|
||||||
|
virtual public void OnSetMaterialTextureOffsetKey(int bSuccess, string ObjectName, int KeyIndex, float x, float y) { }
|
||||||
|
|
||||||
|
virtual public void OnSetMaterialTextureTiling(int bSuccess, string ObjectName, float x, float y) { }
|
||||||
|
|
||||||
|
virtual public void OnSetMaterialTextureTilingKey(int bSuccess, string ObjectName, int KeyIndex, float x, float y) { }
|
||||||
|
|
||||||
|
virtual public void OnSetMaterialTextureRotation(int bSuccess, string ObjectName, float Degree) { }
|
||||||
|
|
||||||
|
virtual public void OnSetMaterialTextureRotationKey(int bSuccess, string ObjectName, int KeyIndex, float Degree) { }
|
||||||
|
|
||||||
|
virtual public void OnSetMaterialTextureType(int bSuccess, string ObjectName, eKTextureType Type) { }
|
||||||
|
|
||||||
|
virtual public void OnSetMaterialTextureFile(int bSuccess, string ObjectName, string FilePathName) { }
|
||||||
|
|
||||||
|
virtual public void OnSetMaterialTextureFilter(int bSuccess, string ObjectName, eKTextureFilter FilterType) { }
|
||||||
|
|
||||||
|
virtual public void OnSetMaterialTextureOpacity(int bSuccess, string ObjectName, byte Opacity) { }
|
||||||
|
|
||||||
|
virtual public void OnSetMaterialTextureBlending(int bSuccess, string ObjectName, eKTextureBlending BlendingType) { }
|
||||||
|
|
||||||
|
virtual public void OnSetMaterialTextureAddress(int bSuccess, string ObjectName, eKTextureAddress AddressType) { }
|
||||||
|
|
||||||
|
virtual public void OnSetTrialPlayMode(int bSuccess) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryFont(int bSuccess, string ObjectName, ref sKFont Param) { }
|
||||||
|
|
||||||
|
virtual public void OnSetImageOriginalSize(int bSuccess, string SceneName, string ObjectName) { }
|
||||||
|
|
||||||
|
virtual public void OnApplyLibrary(int bSuccess, string SceneName, string ObjectName, string LibraryPath, eKEffectTarget EffectTarget) { }
|
||||||
|
|
||||||
|
virtual public void OnSetTableValue(int bSuccess, string SceneName, string ObjectName, int Row, int Column, string Value) { }
|
||||||
|
|
||||||
|
virtual public void OnSetTableColor(int bSuccess, string SceneName, string ObjectName, int Row, int Column, sKColor Color) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryTableValue(int bSuccess, string SceneName, string ObjectName, int Row, int Column, string Value) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryTableValues(int bSuccess, string SceneName, string ObjectName, int Index, int TotalCount, int Row, int Column, string Value) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryPauseCount(int bSuccess, string SceneName, int AnimationType, int PauseCount) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryPauseCountByName(int bSuccess, string SceneName, string AnimationName, int PauseCount) { }
|
||||||
|
|
||||||
|
virtual public void OnPlayRange(int bSuccess, int OutputChannelIndex, int LayerNo, int PlaybackRangeNo) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryPlaybackRangeCount(int bSuccess, string SceneName, int PlaybackRangeCount) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryPlaybackRange(int bSuccess, string SceneName, int PlaybackRangeNo, int Start, int End) { }
|
||||||
|
|
||||||
|
//virtual public void OnSetVROffset(int bSuccess, string SceneName, float Horz, float Vert) { }
|
||||||
|
|
||||||
|
virtual public void OnSetOutputChannelIndex(int bSuccess, string SceneName, int OutputChannelIndex) { }
|
||||||
|
|
||||||
|
virtual public void OnQueryOutputChannelIndex(int bSuccess, string SceneName, int OutputChannelIndex) { }
|
||||||
|
|
||||||
|
virtual public void OnEndTransactionOnChannel(int bSuccess, int OutputChannelIndex) { }
|
||||||
|
|
||||||
|
void IKAEventHandler.OnSetVROffset(int bSuccess, string SceneName, float Horz, float Vert)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnQueryTotalTime(int iSuccess, string SceneName, int AnimationType, int Frame)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnSetPathShapeOutlineThickness(int bSuccess, string SceneName, string ObjectName, float Thickness)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnEnablePathShapeOutline(int bSuccess, string SceneName, string ObjectName, int bEnable)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnPlayInNextPreview(int bSuccess, int OutputChannelIndex, int LayerNo)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnPlayOutNextPreview(int bSuccess, int OutputChannelIndex, int LayerNo)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnSetPlaybackCamera(int bSuccess, string SceneName, string ObjectName)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnSetMoveTo(int bSuccess, string SceneName, string ObjectName, float X, float Y, float Z)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnSetRotateTo(int bSuccess, string SceneName, string ObjectName, float Pitch, float Yaw, float Roll)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnSetVerticalFOV(int bSuccess, string SceneName, string ObjectName, float Angle)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnSetDelay(int bSuccess, string SceneName, string ObjectName, int Delay)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnExportVideo(int bSuccess, string SceneName, string FileName)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnStopVideoExporting(int bSuccess, string SceneName)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnQueryVideoExportingProgress(int bSuccess, string SceneName, int CurrentFrame, int TotalFrame)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnFinishedVideoExporting(int bSuccess, string FileName)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnSetPause(int bSuccess, string SceneName, int AnimationType, int FrameNo, int Delay, int bAuto)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnSetPauseByName(int bSuccess, string SceneName, string AnimationName, int FrameNo, int Delay, int bAuto)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnSetPauseWithIndex(int bSuccess, string SceneName, int AnimationType, int Index, int Delay, int bAuto)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnSetPauseWithIndexByName(int bSuccess, string SceneName, string AnimationName, int Index, int Delay, int bAuto)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnDeletePauseWithIndex(int bSuccess, string SceneName, int AnimationType, int Index, int bAll)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnDeletePauseWithIndexByName(int bSuccess, string SceneName, string AnimationName, int Index, int bAll)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
void IKAEventHandler.OnQueryTextlistOfTextObjects(int bSuccess, string SceneName, int Index, int TotalCount, string Text)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IKAEventHandler.OnPlayIn(int bSuccess, int OutputChannelIndex, int LayerNo)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
}
|
||||||
108
SSG_Automation_Solution/Tornado/TornadoManager.cs
Normal file
108
SSG_Automation_Solution/Tornado/TornadoManager.cs
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
using K3DAsyncEngineLib;
|
||||||
|
using SSG_Automation_Solution.Data;
|
||||||
|
using SSG_Automation_Solution.Design.Forms;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SSG_Automation_Solution.Tornado
|
||||||
|
{
|
||||||
|
public class TornadoManager
|
||||||
|
{
|
||||||
|
#region variables
|
||||||
|
|
||||||
|
protected KAEngine KAEngine;
|
||||||
|
protected KAScenePlayer KAScenePlayer;
|
||||||
|
protected KAScene KAScene;
|
||||||
|
protected K3DEventHandler KAEvent;
|
||||||
|
|
||||||
|
public string IP { get; set; } = "127.0.0.1";
|
||||||
|
public int Port { get; set; } = 30001;
|
||||||
|
|
||||||
|
public int DissolveTime { get; set; } = 3;
|
||||||
|
|
||||||
|
public bool isConnected()
|
||||||
|
{
|
||||||
|
if (KAScenePlayer == null) return false;
|
||||||
|
else return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#region singleton
|
||||||
|
|
||||||
|
private static TornadoManager uniqueInstance = null;
|
||||||
|
private static readonly Object mInstanceLocker = new Object();
|
||||||
|
|
||||||
|
public static TornadoManager getInstance()
|
||||||
|
{
|
||||||
|
lock (mInstanceLocker)
|
||||||
|
{
|
||||||
|
if (uniqueInstance == null)
|
||||||
|
{
|
||||||
|
uniqueInstance = new TornadoManager();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return uniqueInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TornadoManager()
|
||||||
|
{
|
||||||
|
KAEngine = new KAEngine();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#region Method - Connection
|
||||||
|
public void setMainFrom(MainForm _mainForm)
|
||||||
|
{
|
||||||
|
KAEvent = new K3DEventHandler(_mainForm);
|
||||||
|
}
|
||||||
|
public void Connection()
|
||||||
|
{
|
||||||
|
KAEngine.KTAPConnect(1, IP, Port, 0, KAEvent);
|
||||||
|
KAScenePlayer = KAEngine.GetScenePlayer();
|
||||||
|
}
|
||||||
|
public void AliveCheck()
|
||||||
|
{
|
||||||
|
KAEngine.HeartBeat();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
public void Display(SceneVO scene ,short? layerNo , BindingList<VariablesVO> variables)
|
||||||
|
{
|
||||||
|
KAScene = KAEngine.LoadScene(scene.ScenePath, scene.SceneName);
|
||||||
|
foreach(var v in variables)
|
||||||
|
{
|
||||||
|
KAScene.GetObject(v.Tag).SetValue(v.Text);
|
||||||
|
}
|
||||||
|
int layer = Convert.ToInt32(layerNo);
|
||||||
|
KAScenePlayer.Prepare(layer, KAScene);
|
||||||
|
KAScenePlayer.Play(layer);
|
||||||
|
|
||||||
|
KAEngine.UnloadScene(scene.SceneName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Out(short? layerNo)
|
||||||
|
{
|
||||||
|
int layer = Convert.ToInt32(layerNo);
|
||||||
|
KAScenePlayer.CutOut(layer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void FileLoad(string path, string sceneName ,string savePath, int frame)
|
||||||
|
{
|
||||||
|
KAScene = KAEngine.LoadScene(path, sceneName);
|
||||||
|
KAScene.DownloadThumbnail(savePath, 640, 480, frame);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
18
SSG_Automation_Solution/packages.config
Normal file
18
SSG_Automation_Solution/packages.config
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="DevExpress.Data" version="20.2.10" targetFramework="net472" />
|
||||||
|
<package id="DevExpress.Data.Desktop" version="20.2.10" targetFramework="net472" />
|
||||||
|
<package id="DevExpress.Gauges.Core" version="20.2.10" targetFramework="net472" />
|
||||||
|
<package id="DevExpress.Office.Core" version="20.2.10" targetFramework="net472" />
|
||||||
|
<package id="DevExpress.Pdf.Core" version="20.2.10" targetFramework="net472" />
|
||||||
|
<package id="DevExpress.Pdf.Drawing" version="20.2.10" targetFramework="net472" />
|
||||||
|
<package id="DevExpress.Printing.Core" version="20.2.10" targetFramework="net472" />
|
||||||
|
<package id="DevExpress.RichEdit.Core" version="20.2.10" targetFramework="net472" />
|
||||||
|
<package id="DevExpress.Sparkline.Core" version="20.2.10" targetFramework="net472" />
|
||||||
|
<package id="DevExpress.Utils" version="20.2.10" targetFramework="net472" />
|
||||||
|
<package id="DevExpress.Win.Gauges" version="20.2.10" targetFramework="net472" />
|
||||||
|
<package id="DevExpress.Win.Navigation" version="20.2.10" targetFramework="net472" />
|
||||||
|
<package id="DevExpress.Win.Printing" version="20.2.10" targetFramework="net472" />
|
||||||
|
<package id="DevExpress.Win.TreeList" version="20.2.10" targetFramework="net472" />
|
||||||
|
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net472" />
|
||||||
|
</packages>
|
||||||
BIN
SSG_Automation_Solution/ssg.ico
Normal file
BIN
SSG_Automation_Solution/ssg.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.8 KiB |
Reference in New Issue
Block a user