diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-11-13 03:13:31 +0200 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-11-13 03:13:31 +0200 |
| commit | 8651169fac81e34685f52f8bb9147115f7ac8765 (patch) | |
| tree | 9f9cdb4438005a2c298f96120bc0e02d4628a9b9 /Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore | |
| parent | 14e4bd850fa6730eecd7d15bd7044f364b41c986 (diff) | |
| download | Tango-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.cs | 56 |
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); } } } |
