private void AddDeviceSubscriptionToCollection(ushort address, IDeviceSubscription deviceDataMemorySubscription, Dictionary <ushort, MemorySubscriptionCollection <IDeviceSubscription> > memoryDataObservers) { if (!memoryDataObservers.ContainsKey(address)) { memoryDataObservers.Add(address, new MemorySubscriptionCollection <IDeviceSubscription>(deviceDataMemorySubscription)); } else { if (memoryDataObservers[address].Collection .All(subscription => subscription != deviceDataMemorySubscription)) { memoryDataObservers[address].Collection.Add(deviceDataMemorySubscription); } } }
public Result AddSubscriptionById(IDeviceSubscription subscription, Guid id) { if (_idObservers.ContainsKey(id)) { if (_idObservers[id].Collection .Any(subscriptionExisting => subscriptionExisting == subscription)) { return(Result.Create(true)); } else { _idObservers[id].Collection .Add(subscription); return(Result.Create(true)); } } _idObservers.Add(id, new MemorySubscriptionCollection <IDeviceSubscription>(subscription)); return(Result.Create(true)); }
private Result AddAddressSubscription(ushort start, ushort length, IDeviceSubscription memorySubscription, Dictionary <ushort, MemorySubscriptionCollection <IDeviceSubscription> > memoryObservers) { var addresses = GetAddressesRelated(start, length); if (addresses.All(address => memoryObservers.ContainsKey(address) && memoryObservers[address].Collection.Any( subscription => subscription == memorySubscription))) { return(Result.Create(true)); } foreach (var address in addresses) { AddDeviceSubscriptionToCollection(address, memorySubscription, memoryObservers); } return(Result.Create(true)); }
public Result AddLocalAddressSubscription(ushort start, ushort length, IDeviceSubscription memorySubscription, MemoryKind memoryKind = MemoryKind.UshortMemory) { return(AddAddressSubscription(start, length, memorySubscription, _localMemoryDataObservers)); }