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-13 03:13:31 +0200
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-11-13 03:13:31 +0200
commit8651169fac81e34685f52f8bb9147115f7ac8765 (patch)
tree9f9cdb4438005a2c298f96120bc0e02d4628a9b9 /Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore
parent14e4bd850fa6730eecd7d15bd7044f364b41c986 (diff)
downloadTango-8651169fac81e34685f52f8bb9147115f7ac8765.tar.gz
Tango-8651169fac81e34685f52f8bb9147115f7ac8765.zip
Working on data store !
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore')
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore/DefaultDataStoreService.cs56
1 files changed, 54 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 6cae220aa..ce8e42e35 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore/DefaultDataStoreService.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore/DefaultDataStoreService.cs
@@ -20,20 +20,29 @@ using Newtonsoft.Json.Linq;
using Tango.BL;
using Tango.DataStore.Editing;
using Newtonsoft.Json;
+using Tango.Core;
namespace Tango.PPC.Common.DataStore
{
[TangoCreateWhenRegistered]
- public class DefaultDataStoreService : IDataStoreService, IExternalBridgeRequestHandler
+ public class DefaultDataStoreService : ExtendedObject, IDataStoreService, IExternalBridgeRequestHandler
{
private IDataStoreManager _manager;
private IMachineProvider _machineProvider;
+ private List<ListerReceiver> _listenerReceivers;
+
+ private class ListerReceiver
+ {
+ public String Token { get; set; }
+ public ExternalBridgeReceiver Receiver { get; set; }
+ }
public DefaultDataStoreService(IPPCExternalBridgeService externalBridge, IMachineProvider machineProvider)
{
externalBridge.RegisterRequestHandler(this);
+ _listenerReceivers = new List<ListerReceiver>();
_machineProvider = machineProvider;
machineProvider.MachineOperator.RegisterRequestHandler<PutDataStoreItemRequest>(OnPutDataStoreItemRequest);
machineProvider.MachineOperator.RegisterRequestHandler<GetDataStoreItemRequest>(OnGetDataStoreItemRequest);
@@ -186,7 +195,7 @@ namespace Tango.PPC.Common.DataStore
foreach (var item in request.ToUpsert)
{
- var itemDb = allItems.FirstOrDefault(x => x.Guid == item.Guid);
+ var itemDb = allItems.FirstOrDefault(x => x.CollectionName == item.CollectionName && x.Key == item.Key);
if (itemDb == null)
{
@@ -232,6 +241,18 @@ namespace Tango.PPC.Common.DataStore
await receiver.SendGenericResponse(new UpdateDataStoreResponse(), token);
}
+ [ExternalBridgeRequestHandlerMethod(typeof(RemoteDataStoreStartListenRequest), RequestHandlerLoggingMode.LogRequestName)]
+ public async Task OnRemoteDataStoreStartListenRequest(RemoteDataStoreStartListenRequest request, String token, ExternalBridgeReceiver receiver)
+ {
+ _listenerReceivers.Add(new ListerReceiver() { Receiver = receiver, Token = token });
+
+ await receiver.SendGenericResponse(new RemoteDataStoreStartListenResponse()
+ {
+ ChangeType = RemoteDataStoreChangeType.None,
+ Item = null
+ }, token);
+ }
+
private RemoteDataStoreItem CreateRemoteItem(IDataStoreItem item)
{
RemoteDataStoreItem remote = new RemoteDataStoreItem();
@@ -251,6 +272,36 @@ namespace Tango.PPC.Common.DataStore
{
GetManager().GetCollection(request.Collection).Put(request.Key, GetPMRValue(request.Item));
await transporter.SendResponse(new PutDataStoreItemResponse(), token);
+
+ try
+ {
+ if (_listenerReceivers.Count > 0)
+ {
+ var item = GetManager().GetCollection(request.Collection).GetItem(request.Key);
+ var remoteItem = CreateRemoteItem(item);
+
+ foreach (var listener in _listenerReceivers.ToList())
+ {
+ try
+ {
+ await listener.Receiver.SendGenericResponse(new RemoteDataStoreStartListenResponse()
+ {
+ ChangeType = RemoteDataStoreChangeType.Modified,
+ CollectionName = request.Collection,
+ Item = remoteItem
+ }, listener.Token);
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, $"Error sending data store item notification to receiver '{listener.Receiver.Adapter.ToString()}'");
+ }
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error generating data store item notifications.");
+ }
}
catch (Exception ex)
{
@@ -381,6 +432,7 @@ namespace Tango.PPC.Common.DataStore
public void OnReceiverDisconnected(ExternalBridgeReceiver receiver)
{
//Do nothing.
+ _listenerReceivers.RemoveAll(x => x.Receiver == receiver);
}
}
}