2026-01-26 18:56:53 +09:00

86 lines
2.9 KiB
C#

using Aurora.Api;
using Aurora.Api.Devices;
using DataHub;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reactive.Linq;
using System.Threading.Tasks;
namespace VisionCommon.DB {
/// <summary>
/// 제너릭 타입의 공변성 미지원을 해결하기 위한 공통 인터페이스
/// </summary>
public interface IVisionDBAgent { }
public abstract class VisionDBAgentBase<T> : IVisionDBAgent where T : IMongoItemEntity {
internal eVisionDBKey _Key;
internal readonly DataHubService<T> _Service;
internal static Logger _Logger;
private static IDisposable _EventDisposable;
public VisionDBAgentBase(eVisionDBKey dbKey) {
_Key = dbKey;
_Logger = new Logger("DB_"+ dbKey.ToString());
_Service = VisionEnv.AuroraEnv.DeviceManager.GetDevice(dbKey.ToString()) as DataHubService<T>;
SetObservable();
}
#region EventObservables
internal virtual void SetObservable() {
if (_Service != null) {
VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_DEVICE_ACTIVATED)
.Select(x => x.Param as string).Where(x=> x==_Key.ToString()).Subscribe(x => OnDBActivated());
VisionEnv.AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_DEVICE_DEACTIVATED)
.Select(x => x.Param as string).Where(x => x == _Key.ToString()).Subscribe(x => OnDBDeActivated());
}
}
internal virtual void OnDBActivated() { }
internal virtual void OnDBDeActivated() { }
#endregion
#region UtilMethods
public void SetDataAsync(T data) {
if (CheckServiceActivate()) {
_Service.AddItemAsync(data);
}
}
public void SetData(T data) {
if (CheckServiceActivate()) {
_Service.AddItem(data);
}
}
public async Task<IEnumerable<T>> GetDataAsync(T data, QueryOption queryOption) {
if (CheckServiceActivate()) {
return await _Service.GetDataAsync(queryOption);
}
return null;
}
public IEnumerable<T> GetData(T data, QueryOption queryOption) {
if (CheckServiceActivate()) {
return _Service.GetData(queryOption);
}
return null;
}
#endregion
#region private util methods
internal bool CheckServiceActivate() {
if(_Service == null) {
_Logger.E("Service is null, Not Register Service. Check the registerService key");
return false;
}
else if(!_Service.IsActivated) {
_Logger.E("Service is not activated!!");
return false;
}else {
return true;
}
}
#endregion
}
}