/** * DeukPack serialization warnings — 컬럼 누락/변경 시 경고 로그. * 모든 시리얼라이저(프로토콜)에서 공통 사용. 앱에서 로거 설정 가능. */ using System; namespace DeukPack.Protocol { /// /// Column missing or unknown field during deserialization: optional warning callback. /// Set LogTo to override default (Trace); e.g. Unity: (s, id, name) => UnityEngine.Debug.LogWarning($"DeukPack: {s}"). /// public static class DeukPackSerializationWarnings { /// (structName, fieldId, fieldName) for unknown/extra field in stream. public static Action OnUnknownField = LogUnknownFieldDefault; /// (structName, fieldName) for required field missing from stream. public static Action OnMissingRequiredField = LogMissingRequiredDefault; public static void LogUnknownField(string structName, short fieldId, string fieldName) { (OnUnknownField ?? LogUnknownFieldDefault)(structName ?? "", fieldId, fieldName ?? ""); } public static void LogMissingRequiredField(string structName, string fieldName) { (OnMissingRequiredField ?? LogMissingRequiredDefault)(structName ?? "", fieldName ?? ""); } private static void LogUnknownFieldDefault(string structName, short fieldId, string fieldName) { #if NETSTANDARD2_0 || NET6_0_OR_GREATER System.Diagnostics.Trace.TraceWarning("[DeukPack] Unknown field: struct={0}, fieldId={1}, fieldName={2}", structName, fieldId, fieldName ?? ""); #else System.Console.Error.WriteLine($"[DeukPack] Unknown field: struct={structName}, fieldId={fieldId}, fieldName={fieldName ?? ""}"); #endif } private static void LogMissingRequiredDefault(string structName, string fieldName) { #if NETSTANDARD2_0 || NET6_0_OR_GREATER System.Diagnostics.Trace.TraceWarning("[DeukPack] Missing required field: struct={0}, fieldName={1}", structName, fieldName ?? ""); #else System.Console.Error.WriteLine($"[DeukPack] Missing required field: struct={structName}, fieldName={fieldName ?? ""}"); #endif } } }