초기 커밋.

This commit is contained in:
2026-04-01 19:57:37 +09:00
parent 77156cb437
commit cc3b473ba7
33 changed files with 11470 additions and 0 deletions

View 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

View 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>

View 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();
}
}
}
}
}

View 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
}
}

View 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
}
}

View 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);
}
}
}

View 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;
}
}

View 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));
}
}
}
}

View 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();
}
}

View 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; }
}
}
}

View File

@@ -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);
}
}
}

View 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;
}
}

View 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();
}
}
}

View 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>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View 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
}
}
}
}
}

View 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")]

View 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));
}
}
}
}

View 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>

View 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;
}
}
}
}

View 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>

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

View 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>

Binary file not shown.

View 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
}

View 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);
}
}
}

View 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)
{
}
*/
}
}

View 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);
}
}
}

View 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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB