코드 개선
This commit is contained in:
@@ -57,7 +57,7 @@ namespace UVC.Data.Core
|
||||
/// 업데이트가 즉시 적용되어야 하는지 여부를 나타냅니다.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public bool IsUpdateImmediately { get; }
|
||||
public bool IsUpdateImmediately { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user