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));
 }