86 lines
2.9 KiB
C#
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
|
|
|
|
}
|
|
}
|