26.04.17 작업 진행 사항

This commit is contained in:
2026-04-17 00:39:25 +09:00
parent e0c5f4dbfe
commit fa49317b34
38 changed files with 7735 additions and 298 deletions

View File

@@ -564,6 +564,73 @@ static Task<SceneValidationProbeResult> ValidateSceneOperationsAsync(SceneValida
continue;
}
if (string.Equals(operation.Method, "SetVisible", StringComparison.OrdinalIgnoreCase))
{
handler.ResetVisibleTask();
sceneObject.SetVisible(operation.Visible ? 1 : 0);
if (!WaitForTaskWithMessagePump(handler.VisibleTask, options.Connection.Timeout))
{
results.Add(new SceneOperationValidationResult(
operation.ObjectName,
operation.Method,
DescribeOperationPayload(operation),
"TIMEOUT",
"OnSetVisible timed out."));
continue;
}
var callbackResult = handler.VisibleTask.Result;
results.Add(new SceneOperationValidationResult(
operation.ObjectName,
operation.Method,
DescribeOperationPayload(operation),
callbackResult.ToString(),
string.Empty));
continue;
}
if (string.Equals(operation.Method, "SetStyleColor", StringComparison.OrdinalIgnoreCase))
{
if (sceneObject is not IKAStyle style)
{
results.Add(new SceneOperationValidationResult(
operation.ObjectName,
operation.Method,
DescribeOperationPayload(operation),
"NOT_A_STYLE_OBJECT",
"Object does not implement IKAStyle."));
continue;
}
handler.ResetStyleColorTask();
style.SetStyleColor(
ParseStyleType(operation.StyleType),
operation.Order,
operation.R,
operation.G,
operation.B,
operation.A);
if (!WaitForTaskWithMessagePump(handler.StyleColorTask, options.Connection.Timeout))
{
results.Add(new SceneOperationValidationResult(
operation.ObjectName,
operation.Method,
DescribeOperationPayload(operation),
"TIMEOUT",
"OnSetStyleColor timed out."));
continue;
}
var callbackResult = handler.StyleColorTask.Result;
results.Add(new SceneOperationValidationResult(
operation.ObjectName,
operation.Method,
DescribeOperationPayload(operation),
callbackResult.ToString(),
string.Empty));
continue;
}
handler.ResetSetValueTask();
sceneObject.SetValue(operation.Value ?? string.Empty);
if (!WaitForTaskWithMessagePump(handler.SetValueTask, options.Connection.Timeout))
@@ -1023,11 +1090,34 @@ static List<SceneValidationOperation> LoadValidationOperations(SceneValidationOp
static string DescribeOperationPayload(SceneValidationOperation operation)
{
if (string.Equals(operation.Method, "SetVisible", StringComparison.OrdinalIgnoreCase))
{
return $"visible={operation.Visible}";
}
if (string.Equals(operation.Method, "SetStyleColor", StringComparison.OrdinalIgnoreCase))
{
return $"styleType={operation.StyleType}, order={operation.Order}, rgba=({operation.R}, {operation.G}, {operation.B}, {operation.A})";
}
return string.Equals(operation.Method, "SetCounterNumberKey", StringComparison.OrdinalIgnoreCase)
? $"keyIndex={operation.KeyIndex}, number={operation.Number:0.###}"
: operation.Value ?? string.Empty;
}
static eKStyleType ParseStyleType(string? value)
{
return (value ?? string.Empty).Trim().ToLowerInvariant() switch
{
"face" => eKStyleType.STYLE_TYPE_FACE,
"edge" => eKStyleType.STYLE_TYPE_EDGE,
"shadow" => eKStyleType.STYLE_TYPE_SHADOW,
"underline" => eKStyleType.STYLE_TYPE_UNDERLINE,
"frame" => eKStyleType.STYLE_TYPE_FRAME,
_ => throw new ArgumentException($"Unsupported style type: {value}")
};
}
static void WriteSceneValidationMarkdown(SceneValidationOptions options, IReadOnlyList<SceneOperationValidationResult> results)
{
Directory.CreateDirectory(Path.GetDirectoryName(options.OutputPath)!);
@@ -1477,6 +1567,20 @@ internal sealed class SceneValidationOperation
public int KeyIndex { get; set; }
public double Number { get; set; }
public string? StyleType { get; set; }
public int Order { get; set; }
public int R { get; set; }
public int G { get; set; }
public int B { get; set; }
public int A { get; set; } = 255;
public bool Visible { get; set; }
}
internal sealed record SceneOperationValidationResult(string ObjectName, string Method, string Payload, string Result, string Detail);
@@ -1490,6 +1594,8 @@ internal sealed class ProbeEventHandler : KAEventHandler
private TaskCompletionSource<eKResult> _loadSceneTask = new(TaskCreationOptions.RunContinuationsAsynchronously);
private TaskCompletionSource<eKResult> _unloadSceneTask = new(TaskCreationOptions.RunContinuationsAsynchronously);
private TaskCompletionSource<eKResult> _counterNumberKeyTask = new(TaskCreationOptions.RunContinuationsAsynchronously);
private TaskCompletionSource<eKResult> _styleColorTask = new(TaskCreationOptions.RunContinuationsAsynchronously);
private TaskCompletionSource<eKResult> _visibleTask = new(TaskCreationOptions.RunContinuationsAsynchronously);
private TaskCompletionSource<eKResult> _setValueTask = new(TaskCreationOptions.RunContinuationsAsynchronously);
private TaskCompletionSource<ObjectInfosProbeResult> _objectInfosTask = new(TaskCreationOptions.RunContinuationsAsynchronously);
private IKAScene? _sceneToQueryOnLoad;
@@ -1504,6 +1610,10 @@ internal sealed class ProbeEventHandler : KAEventHandler
public Task<eKResult> CounterNumberKeyTask => _counterNumberKeyTask.Task;
public Task<eKResult> StyleColorTask => _styleColorTask.Task;
public Task<eKResult> VisibleTask => _visibleTask.Task;
public Task<eKResult> SetValueTask => _setValueTask.Task;
public Task<ObjectInfosProbeResult> ObjectInfosTask => _objectInfosTask.Task;
@@ -1514,6 +1624,10 @@ internal sealed class ProbeEventHandler : KAEventHandler
public void ResetCounterNumberKeyTask() => _counterNumberKeyTask = new TaskCompletionSource<eKResult>(TaskCreationOptions.RunContinuationsAsynchronously);
public void ResetStyleColorTask() => _styleColorTask = new TaskCompletionSource<eKResult>(TaskCreationOptions.RunContinuationsAsynchronously);
public void ResetVisibleTask() => _visibleTask = new TaskCompletionSource<eKResult>(TaskCreationOptions.RunContinuationsAsynchronously);
public void ResetSetValueTask() => _setValueTask = new TaskCompletionSource<eKResult>(TaskCreationOptions.RunContinuationsAsynchronously);
public void ResetObjectInfosTask() => _objectInfosTask = new TaskCompletionSource<ObjectInfosProbeResult>(TaskCreationOptions.RunContinuationsAsynchronously);
@@ -1657,12 +1771,28 @@ internal sealed class ProbeEventHandler : KAEventHandler
public void OnQuerySceneEffectType(eKResult Result, string SceneName, int bInEffect, eKEffectType EffectType, int Duration) { }
public void OnQueryDuration(eKResult Result, string SceneName, string AnimationName, int Duration) { }
public void OnQueryContentsOfTextObjects(eKResult Result, string SceneName, KAStrings pTexts) { }
public void OnSetStyleColor(eKResult Result, string SceneName, string ObjectName) { }
public void OnSetStyleColor(eKResult Result, string SceneName, string ObjectName)
{
if (Result != eKResult.RESULT_ERROR_NO_VARIABLE_OBJECT)
{
Console.WriteLine($"[SDK] OnSetStyleColor result={Result} scene={SceneName} object={ObjectName}");
}
_styleColorTask.TrySetResult(Result);
}
public void OnSetStyleTexture(eKResult Result, string SceneName, string ObjectName) { }
public void OnSetFaceTextColor(eKResult Result, string SceneName, string ObjectName) { }
public void OnSetEdgeTextColor(eKResult Result, string SceneName, string ObjectName) { }
public void OnSetShadowTextColor(eKResult Result, string SceneName, string ObjectName) { }
public void OnSetVisible(eKResult Result, string SceneName, string ObjectName) { }
public void OnSetVisible(eKResult Result, string SceneName, string ObjectName)
{
if (Result != eKResult.RESULT_ERROR_NO_VARIABLE_OBJECT)
{
Console.WriteLine($"[SDK] OnSetVisible result={Result} scene={SceneName} object={ObjectName}");
}
_visibleTask.TrySetResult(Result);
}
public void OnSetValue(eKResult Result, string SceneName, string ObjectName)
{
if (Result != eKResult.RESULT_ERROR_NO_VARIABLE_OBJECT)

View File

@@ -0,0 +1,6 @@
[
{ "objectName": "유확당01", "method": "SetVisible", "visible": false },
{ "objectName": "유확당01", "method": "SetValue", "value": "${SCENE_DIR}\\Images\\Tag\\당선.vrv" },
{ "objectName": "유확당01", "method": "SetVisible", "visible": true },
{ "objectName": "유확당02", "method": "SetVisible", "visible": false }
]

View File

@@ -0,0 +1,4 @@
[
{ "objectName": "개표율01", "method": "SetValue", "value": "개표 98.7%" },
{ "objectName": "시도명01", "method": "SetValue", "value": "부산시장" }
]

View File

@@ -0,0 +1,5 @@
[
{ "objectName": "정당판01", "method": "SetStyleColor", "styleType": "face", "order": 0, "r": 57, "g": 84, "b": 199, "a": 255 },
{ "objectName": "정당바01", "method": "SetStyleColor", "styleType": "face", "order": 0, "r": 0, "g": 30, "b": 84, "a": 255 },
{ "objectName": "득표율01", "method": "SetStyleColor", "styleType": "edge", "order": 0, "r": 57, "g": 84, "b": 199, "a": 255 }
]