코드 개선

This commit is contained in:
logonkhi
2025-08-18 13:45:51 +09:00
parent ed9a7bc985
commit eb99ef4ed5
5 changed files with 25 additions and 37 deletions

View File

@@ -57,7 +57,7 @@ namespace UVC.Data.Core
/// 업데이트가 즉시 적용되어야 하는지 여부를 나타냅니다.
/// </summary>
/// <returns></returns>
public bool IsUpdateImmediately { get; }
public bool IsUpdateImmediately { get; set; }
}
}

View File

@@ -86,17 +86,11 @@ namespace UVC.Data
dataObject.MarkAllAsUpdated();
var newData = dataObject.Clone(fromPool: false);
//데이터 즉시 업데이트 여부 설정
if (newData is DataObject dataObj)
{
dataObj.IsUpdateImmediately = dataObject.IsUpdateImmediately;
}
else if (newData is DataArray dataArray)
{
dataArray.IsUpdateImmediately = dataObject.IsUpdateImmediately;
}
newData.IsUpdateImmediately = dataObject.IsUpdateImmediately;
dataObjects.Add(key, newData);
NotifyDataUpdate(key, newData.Clone(false));
var notifiedDataObject = newData.Clone(false);
notifiedDataObject.IsUpdateImmediately = dataObject.IsUpdateImmediately;
NotifyDataUpdate(key, notifiedDataObject);
return dataObject;
}
else
@@ -112,17 +106,21 @@ namespace UVC.Data
{
newDataObject = dataObject;
}
//데이터 즉시 업데이트 여부 설정
if (newDataObject is DataObject dataObj)
{
dataObj.IsUpdateImmediately = dataObject.IsUpdateImmediately;
}
else if (newDataObject is DataArray dataArray)
{
dataArray.IsUpdateImmediately = dataObject.IsUpdateImmediately;
}
newDataObject.IsUpdateImmediately = dataObject.IsUpdateImmediately;
bool shouldInvoke = !updatedDataOnly || newDataObject.UpdatedCount > 0;
if (shouldInvoke) NotifyDataUpdate(key, newDataObject == dataObject ? newDataObject.Clone(false) : newDataObject);
if (shouldInvoke)
{
var notifiedDataObject = newDataObject;
if (newDataObject == dataObject)
{
notifiedDataObject = newDataObject.Clone(false);
notifiedDataObject.IsUpdateImmediately = dataObject.IsUpdateImmediately;
}
NotifyDataUpdate(key, notifiedDataObject);
}
return newDataObject;
}
}

View File

@@ -208,14 +208,7 @@ namespace UVC.Data.Http
continue;
}
if (subMappedObject is DataObject dataObj)
{
dataObj.IsUpdateImmediately = isUpdateImmediately;
}
else if (subMappedObject is DataArray dataArray)
{
dataArray.IsUpdateImmediately = isUpdateImmediately;
}
subMappedObject.IsUpdateImmediately = isUpdateImmediately;
// 분할된 데이터를 `subKey`를 키로 사용하여 DataRepository에 저장합니다.
var repoObject = DataRepository.Instance.AddOrUpdateData(subKey, subMappedObject, info.UpdatedDataOnly);

View File

@@ -243,7 +243,9 @@ namespace UVC.Data.Mqtt
firstMessageReceived[topic] = true; // 첫 번째 메시지를 수신했음을 기록합니다.
isFirstMessage = true; // 첫 번째 메시지로 처리합니다.
}
IDataObject? mappedObject = null;
message = message.Trim();
LastMessage = message; // 마지막 메시지를 저장하여 나중에 사용할 수 있습니다.
@@ -263,15 +265,8 @@ namespace UVC.Data.Mqtt
if (mappedObject == null) return;
//즉시 업데이트 여부를 설정합니다.
if (mappedObject is DataObject dataObj)
{
dataObj.IsUpdateImmediately = isFirstMessage;
}
else if (mappedObject is DataArray dataArray)
{
dataArray.IsUpdateImmediately = isFirstMessage;
}
mappedObject.IsUpdateImmediately = isFirstMessage;
// DataRepository는 내부적으로 데이터를 복사/업데이트하므로, mappedObject는 여기서 임시 객체가 됩니다.
var repoObject = DataRepository.Instance.AddOrUpdateData(topic, mappedObject, config.UpdatedDataOnly);
if (repoObject == mappedObject) repoObject = mappedObject.Clone(fromPool: false);
@@ -280,6 +275,7 @@ namespace UVC.Data.Mqtt
if (shouldInvoke && config.Handler != null)
{
var handlerData = repoObject;
handlerData.IsUpdateImmediately = isFirstMessage; // 첫 번째 메시지 여부를 핸들러 데이터에 설정합니다.
// 핸들러를 메인 스레드에서 안전하게 호출
UniTask.Post(() => config.Handler?.Invoke(handlerData));
}

View File

@@ -163,6 +163,7 @@ namespace UVC.Factory.Component
DataArray? arr = data as DataArray;
if (arr == null || arr.Count == 0) return;
// 데이터 배열에서 추가, 제거, 수정된 항목 리스트를 가져옵니다.
var AddedItems = arr.AddedItems;
var RemovedItems = arr.RemovedItems;