aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2020-11-12 20:38:57 +0200
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-11-12 20:38:57 +0200
commit14e4bd850fa6730eecd7d15bd7044f364b41c986 (patch)
tree4e1945a18def6d1c91f239b2b4dbf6e11c0d51db /Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore
parent775f0015321f91aa5be3aca079e289e89d4719f5 (diff)
downloadTango-14e4bd850fa6730eecd7d15bd7044f364b41c986.tar.gz
Tango-14e4bd850fa6730eecd7d15bd7044f364b41c986.zip
Working on data store view.
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore')
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore/DefaultDataStoreService.cs75
1 files changed, 73 insertions, 2 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore/DefaultDataStoreService.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore/DefaultDataStoreService.cs
index 7c8cf4158..6cae220aa 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore/DefaultDataStoreService.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore/DefaultDataStoreService.cs
@@ -18,6 +18,8 @@ using Tango.Transport;
using Tango.Core.ExtensionMethods;
using Newtonsoft.Json.Linq;
using Tango.BL;
+using Tango.DataStore.Editing;
+using Newtonsoft.Json;
namespace Tango.PPC.Common.DataStore
{
@@ -25,11 +27,14 @@ namespace Tango.PPC.Common.DataStore
public class DefaultDataStoreService : IDataStoreService, IExternalBridgeRequestHandler
{
private IDataStoreManager _manager;
+ private IMachineProvider _machineProvider;
public DefaultDataStoreService(IPPCExternalBridgeService externalBridge, IMachineProvider machineProvider)
{
externalBridge.RegisterRequestHandler(this);
+
+ _machineProvider = machineProvider;
machineProvider.MachineOperator.RegisterRequestHandler<PutDataStoreItemRequest>(OnPutDataStoreItemRequest);
machineProvider.MachineOperator.RegisterRequestHandler<GetDataStoreItemRequest>(OnGetDataStoreItemRequest);
}
@@ -134,13 +139,13 @@ namespace Tango.PPC.Common.DataStore
}
[ExternalBridgeRequestHandlerMethod(typeof(RemoteDataStoreGetAllItemsRequest), RequestHandlerLoggingMode.LogRequestName)]
- public async Task RemoteDataStoreGetAllItemsRequest(RemoteDataStoreGetAllItemsRequest request, String token, ExternalBridgeReceiver receiver)
+ public async Task OnRemoteDataStoreGetAllItemsRequest(RemoteDataStoreGetAllItemsRequest request, String token, ExternalBridgeReceiver receiver)
{
List<RemoteDataStoreCollection> collections = new List<RemoteDataStoreCollection>();
using (ObservablesContext db = ObservablesContext.CreateDefault())
{
- var items = db.DataStoreItems.ToList();
+ var items = db.DataStoreItems.Where(x => !x.IsDeleted).ToList();
foreach (var itemsGroup in items.GroupBy(x => x.CollectionName))
{
@@ -161,6 +166,72 @@ namespace Tango.PPC.Common.DataStore
}, token);
}
+ [ExternalBridgeRequestHandlerMethod(typeof(UpdateDataStoreRequest), RequestHandlerLoggingMode.LogRequestName)]
+ public async Task OnUpdateDataStoreRequest(UpdateDataStoreRequest request, String token, ExternalBridgeReceiver receiver)
+ {
+ using (ObservablesContext db = ObservablesContext.CreateDefault())
+ {
+ var allItems = db.DataStoreItems.ToList();
+
+ foreach (var guid in request.ToDelete)
+ {
+ var item = allItems.FirstOrDefault(x => x.Guid == guid);
+ if (item != null)
+ {
+ item.IsDeleted = true;
+ item.IsSynchronized = true;
+ item.LastUpdated = DateTime.UtcNow;
+ }
+ }
+
+ foreach (var item in request.ToUpsert)
+ {
+ var itemDb = allItems.FirstOrDefault(x => x.Guid == item.Guid);
+
+ if (itemDb == null)
+ {
+ itemDb = new BL.Entities.DataStoreItem();
+ itemDb.Guid = item.Guid;
+ db.DataStoreItems.Add(itemDb);
+ }
+
+ itemDb.CollectionName = item.CollectionName;
+ itemDb.DataType = item.DataType;
+ itemDb.IsDeleted = item.IsDeleted;
+ itemDb.IsSynchronized = true;
+ itemDb.Key = item.Key;
+ itemDb.LastUpdated = item.LastUpdated;
+ itemDb.Value = item.Value;
+ }
+
+ db.SaveChanges();
+
+ if (_machineProvider.IsConnected)
+ {
+ Core.Threading.ThreadFactory.StartNew(() =>
+ {
+ foreach (var item in request.ToUpsert)
+ {
+ try
+ {
+ var response = _machineProvider.MachineOperator.SendRequest<DataStoreItemModifiedRequest, DataStoreItemModifiedResponse>(new DataStoreItemModifiedRequest()
+ {
+ Collection = item.CollectionName,
+ Key = item.Key
+ }).Result;
+ }
+ catch (Exception ex)
+ {
+ Logging.LogManager.Default.Log(ex, $"Error notifying firmware about data store item change '{item.CollectionName}.{item.Key}'.");
+ }
+ }
+ });
+ }
+ }
+
+ await receiver.SendGenericResponse(new UpdateDataStoreResponse(), token);
+ }
+
private RemoteDataStoreItem CreateRemoteItem(IDataStoreItem item)
{
RemoteDataStoreItem remote = new RemoteDataStoreItem();