/// <summary>
        /// Inicializar router
        /// </summary>
        /// <param name="devices">Gestor de dispositivos</param>
        /// <param name="users">Gestor de usuarios</param>
        public void Init(DeviceManager devices, UserManager users)
        {
            m_devicesDataService = new DevicesDataService();

            m_userManager = users;
            m_userManager.OnUserConnected    += UserManager_OnUserConnected;
            m_userManager.OnUserDisconnected += UserManager_OnUserDisconnected;
        }
예제 #2
0
        private static void AddInStoreDevices(SyncModel syncModel, int fromVersion)
        {
            IStoreDevicesDataService storeDevicesDataService = new StoreDevicesDataService();
            IDevicesDataService      devicesDataService      = new DevicesDataService();
            IExternalApiDataService  externalApiDataService  = new ExternalApiDataService();

            var updatedExternalApis    = externalApiDataService.List(e => e.DataVersion > fromVersion);
            var updatedDevices         = devicesDataService.List(e => e.DataVersion > fromVersion);
            var allUpdatedStoreDevices = storeDevicesDataService.Query(e => e.DataVersion > fromVersion);

            var model = syncModel.StoreDeviceModels ?? (syncModel.StoreDeviceModels = new StoreDevicesModels());

            //add or update
            model.ExternalApis = updatedExternalApis.Select(e => e.ToSyncModel()).ToList();
            model.Devices      = updatedDevices.Select(e => e.ToSyncModel()).ToList();
            model.SiteDevices  = new List <SiteDeviceScaffold>();
            //model.SiteDevices = storeDevices.Select(e => e.ToSyncModel()).ToList();

            //models to remove
            model.RemovedExternalApis = externalApiDataService
                                        .ListRemoved(e => e.DataVersion > fromVersion)
                                        .Select(e => e.ToSyncModel())
                                        .ToList();
            model.RemovedDevices = devicesDataService
                                   .ListRemoved(e => e.DataVersion > fromVersion)
                                   .Select(e => e.ToSyncModel())
                                   .ToList();

            model.RemovedSiteDevices = new List <SiteDeviceScaffold>();
            //model.RemovedSiteDevices = storeDevicesDataService
            //    .ListRemoved(e => e.DataVersion > fromVersion)
            //    .Select(e => e.ToSyncModel())
            //    .ToList();


            //a oddity arises if there is ever more than one device, and that store device is changed.
            foreach (var deviceGroup in allUpdatedStoreDevices.GroupBy(e => e.StoreId))
            {
                //ignore the above, just interested in the stores as we are going to send all of them up.
                var storeDevices = storeDevicesDataService.Query(e => e.StoreId == deviceGroup.Key).ToList();

                //remove all of them on ACS as its impossible to tell which item has switched on device changes.
                var remove = storeDevices.Select(e => e.ToSyncModel()).ToArray();

                //and ... then add all those which are still not removed
                var addOrUpdate = storeDevices.Where(e => !e.Removed).Select(e => e.ToSyncModel()).ToArray();

                //add to the export feed.
                model.RemovedSiteDevices.AddRange(remove);
                model.SiteDevices.AddRange(addOrUpdate);
            }
            //all done.
        }