Beispiel #1
0
        private void StartThread()
        {
            if (!_IsAlive)
            {
                lock (StartThreadLocker)
                {
                    if (!_IsAlive)
                    {
                        new ThreadObject(() =>
                        {
                            while (true)
                            {
                                while (_Items.Count > 0)
                                {
                                    Item item;
                                    if (_Items.TryDequeue(out item))
                                    {
                                        Flush(item);
                                    }
                                }

                                ThreadBridging.Sleep(3000);
                            }
                        }).Start();

                        _IsAlive = true;
                    }
                }
            }
        }
Beispiel #2
0
        protected JobStatus CheckTransitionalStatus()
        {
            if (Status == JobStatus.Suspending)
            {
                OnSuspending();
                ChangeStatus(JobStatus.Suspended);

                while (Status != JobStatus.Resuming)
                {
                    ThreadBridging.Sleep(1000);
                }
            }

            if (Status == JobStatus.Resuming)
            {
                OnResuming();
                ChangeStatus(JobStatus.Executing);
            }

            if (Status == JobStatus.Terminating)
            {
                OnTerminating();
                ChangeStatus(JobStatus.Stopped);
            }

            return(Status);
        }
Beispiel #3
0
        public DbJob(string name, string description, int interval, string parameters)
            : base(name, description)
        {
            Interval = interval;

            foreach (var parameter in parameters.SplitByChar(';'))
            {
                var kv = parameter.SplitByChar(':');
                if (kv.Length == 3)
                {
                    Parameters.Add(new DbParameter()
                    {
                        Name  = kv[0],
                        Type  = kv[1],
                        Value = kv[2],
                    });
                }
            }

            Implement = (t) =>
            {
                while (true)
                {
                    var startTime = DateTime.Now;

                    ThreadBridging.Retry(3, () =>
                    {
                        try
                        {
                            AppDomainContainer.Instance.Resolve <IJob>(Name).Execute();
                        }
                        catch (Exception e)
                        {
                            LoggerManager.GetLogger().LogEvent("DbJob", LoggerLevel.Error, string.Format("job {0} failed to execute.", Name), e);
                            return(false);
                        }

                        return(true);
                    });

                    LoggerManager.GetLogger().LogEvent("DbJob", LoggerLevel.Info, string.Format("job {0} finish to execute. cost: {1}", Name, (DateTime.Now - startTime).TotalSeconds));

                    if (CheckTransitionalStatus() == TaskObjectStatus.Sleep)
                    {
                        break;
                    }

                    ThreadBridging.Sleep(interval);
                }

                return(true);
            };
        }
Beispiel #4
0
        protected override void Implement()
        {
            while (true)
            {
                Console.WriteLine(string.Format("{0}: {1}", Name, Status));

                ThreadBridging.Sleep(2000);

                var status = CheckTransitionalStatus();
                if (status == JobStatus.Stopped)
                {
                    break;
                }
            }
        }
Beispiel #5
0
        private void TryChangeStatus(JobStatus fromStatus, JobStatus toStatus)
        {
            var previousStatus = Status;

            ChangeStatus(fromStatus);

            ThreadBridging.Retry(10, () => Status == toStatus);

            if (Status != toStatus)
            {
                // TODO: log here

                if (Status == fromStatus)
                {
                    ChangeStatus(previousStatus);
                }
            }
        }
Beispiel #6
0
        public Deamon(string name, string description, int interval)
            : base(name, description)
        {
            StatusChangedTo += Deamon_StatusChangedTo;

            Implement = (t) =>
            {
                while (true)
                {
                    var startTime = DateTime.Now;

                    ThreadBridging.Retry(3, () =>
                    {
                        try
                        {
                            AppDomainContainer.Instance.Resolve <IDeviceDataSource>(Name).Execute();
                        }
                        catch (Exception e)
                        {
                            LoggerManager.GetLogger().LogEvent("Deamon", LoggerLevel.Error, string.Format("deamon {0} failed to execute.", Name), e);
                            return(false);
                        }

                        return(true);
                    });

                    LoggerManager.GetLogger().LogEvent("Deamon", LoggerLevel.Info, string.Format("deamon {0} finish to execute. cost: {1}", Name, (DateTime.Now - startTime).TotalSeconds));

                    if (CheckTransitionalStatus() == TaskObjectStatus.Sleep)
                    {
                        break;
                    }

                    ThreadBridging.Sleep(interval);
                }

                return(true);
            };
        }
Beispiel #7
0
        static void AddDevices(int count)
        {
            var startTime = DateTime.Now;

            var i = 0;

            for (; i < count; i++)
            {
                var response = new RestTest().AddDevice();
                if (response.HasError)
                {
                    foreach (var error in response.Errors)
                    {
                        ConsoleBridging.WriteLine("Error: " + error.ErrorMessage);
                    }
                }

                ThreadBridging.Sleep(20);
            }

            ConsoleBridging.WriteLine("count: " + i + "; cost: " + (DateTime.Now - startTime).TotalSeconds + "s");
            ConsoleBridging.ReadAnyKey();
        }