public void Process() { if (client == null) { return; } client.Process(); if (client.IsConnected && DateTime.Now.Subtract(lastRefreshTime) > new TimeSpan(0, 0, 10)) { int addCount = 0; foreach (DaemonLogic.CloudObject cloudObject in Objects) { if (!InjectedObjects.Contains(cloudObject.CloudObjectId)) { InjectOrUpdateObject(cloudObject); addCount++; if (addCount > 10) { break; } } } List <DaemonLogic.CloudObject> modifiedOjects = (from o in entityContext.CloudObject where o.Bubble.BubbleId == bubble.BubbleId && o.Modified > lastRefreshTime select o).ToList <DaemonLogic.CloudObject>(); foreach (DaemonLogic.CloudObject cloudObject in modifiedOjects) { entityContext.Refresh(System.Data.Objects.RefreshMode.StoreWins, cloudObject); if (cloudObject.Enabled) { DaemonLogic.ObjectType objectType = QueryUtil.First <DaemonLogic.ObjectType>(from o in entityContext.CloudObject where o.CloudObjectId == cloudObject.CloudObjectId select o.ObjectType); DaemonLogic.Participant participant = QueryUtil.First <DaemonLogic.Participant>(from o in entityContext.CloudObject where o.CloudObjectId == cloudObject.CloudObjectId select o.Participant); InjectOrUpdateObject(cloudObject); } else { if (Objects.Contains(cloudObject)) { EjectObject(cloudObject); } } } lastRefreshTime = DateTime.Now; } }
public void Process() { lock (this) { service.Process(); foreach (DaemonParticipant daemonParticipant in bubbleDaemons.Values) { if (daemonParticipant.IsConnected) { daemonParticipant.Process(); } } // Updating process state info to database. if (DateTime.Now.Subtract(lastUpdate) > new TimeSpan(0, 0, 10)) { localProcessStateEntity.Cpu = OnGetProcessingTime(); localProcessStateEntity.Mem = (System.Diagnostics.Process.GetCurrentProcess().WorkingSet64) / 1024; localProcessStateEntity.Modified = DateTime.Now; entityContext.SaveChanges(); lastUpdate = DateTime.Now; // Check whether process has been disabled in database. entityContext.Refresh(RefreshMode.StoreWins, localProcessEntity); if (localProcessEntity.Enabled == false) { RequestShutdown(); } // Adding missing daemons foreach (Bubble bubble in bubbleEntities) { if (!bubbleDaemons.ContainsKey(bubble.BubbleId)) { DaemonParticipant daemonParticipant = new DaemonParticipant(localProcessEntity.Address.Equals("0.0.0.0") ? "127.0.0.1" : localProcessEntity.Address, localProcessEntity.ServerPort, bubble.BubbleId, bubble.BubbleId.ToString("N"), Guid.NewGuid().ToString("N")); bubbleDaemons.Add(bubble.BubbleId, daemonParticipant); daemonParticipant.Startup(); } } // Listing disconnected daemons List <DaemonParticipant> disconnectedDaemons = new List <DaemonParticipant>(); foreach (DaemonParticipant daemonParticipant in bubbleDaemons.Values) { if (!daemonParticipant.IsConnected) { disconnectedDaemons.Add(daemonParticipant); } } // Discarding disconnected daemonst foreach (DaemonParticipant daemonParticipant in disconnectedDaemons) { bubbleDaemons.Remove(daemonParticipant.BubbleId); } } } }