예제 #1
0
        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;
            }
        }
예제 #2
0
        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);
                    }
                }
            }
        }