Beispiel #1
0
        public static List <TestWork> GetTestWorks(IEnumerable <User> users)
        {
            var testWorks  = new List <TestWork>();
            var testNumber = 0;

            foreach (var user in users)
            {
                var testWork = new TestWork()
                {
                    User   = user,
                    Time   = new TimeSpan(_Random.Next(2), _Random.Next(60), _Random.Next(60)),
                    Result = _Random.Next(100),
                    Test   = new Test()
                    {
                        Category     = _Categories[_Random.Next(_Categories.Count())],
                        MaxTime      = new TimeSpan(1, 0, 0),
                        Name         = String.Format("Test number {0}", testNumber.ToString()),
                        PassingScore = 50,
                        Questions    = GetQuestions(40)
                    }
                };
                testWorks.Add(testWork);
            }
            return(testWorks);
        }
Beispiel #2
0
        public void EntityBaseIClone_ShouldBeNormal()
        {
            var work         = new TestWork();
            var deepClone    = work.DeepClone() as TestWork;
            var shallowClone = work.ShallowClone() as TestWork;

            deepClone.Creator    = "gainorloss";
            shallowClone.Creator = "gainorloss";
        }
        public async Task <ActionResult <Result <string> > > SaveTestWork(TestWorkDTO testWorkDTO)
        {
            _logger.Information($"Enter into method.");
            try
            {
                TestWork testWork = new TestWork();
                if (testWorkDTO.Attributes != null && testWorkDTO.Attributes.Count() > 0)
                {
                    foreach (var item in testWorkDTO.Attributes)
                    {
                        if (_testRepository.ValidInsertAttributeByEmailAddress(testWorkDTO.Email, item))
                        {
                            _testRepository.Add(new TestWork()
                            {
                                Key        = testWorkDTO.Key,
                                Email      = testWorkDTO.Email,
                                CrDate     = DateTime.Now,
                                Attributes = item
                            });
                        }
                    }
                    var result = await _testRepository.UnitOfWork.SaveChangesAsync();

                    var listAttributes = _testRepository.Get10AttributeByEmailAddress(testWorkDTO.Email);
                    if (listAttributes.Count() == 10)
                    {
                        Common.SendMail(testWorkDTO.Email, listAttributes);
                    }
                    _logger.Information($"After save information: {result.ToString()}");
                }
                testWorkDTO.Email = Common.CalculateHash(testWorkDTO.Email);
                _logger.Error($"Input object content: {JsonConvert.SerializeObject(testWorkDTO)}");
            }
            catch (Exception ex)
            {
                _logger.Error($"Exception. Message: {ex.Message}");
            }
            return(Ok("success"));
        }
 public void Remove(TestWork testModel)
 {
     _context.TestWorkModel.Remove(testModel);
 }
 public void Update(TestWork testModel)
 {
     _context.Entry(testModel).State = EntityState.Modified;
 }
 public TestWork Add(TestWork testModel)
 {
     return(_context.TestWorkModel.Add(testModel).Entity);
 }
        //LeaderThread取工作->指派新的Leader->開始工作->回到idleQueue
        private int LeaderWork(object ThisThreadItem)
        {
            if (Controller.IsRunning && ((ThreadItem)ThisThreadItem).IsRunning)
            {
                //從WorkQueue取工作
                WorkItem Work;

                if (WorkQueue.Count != 0)
                {
                    lock (WorkQueueLock)
                        Work = WorkQueue.Dequeue();
                }
                else
                {
                    return(0);
                }

                //從IdleThread Queue指派Thread成為新領導,沒有Thread就新增Thread或設為null
                lock (Controller.ThreadVariableChangeLock)
                    if (IdleThreadQueue.Count != 0)
                    {
                        LeaderThread = IdleThreadQueue.Dequeue();
                        Debug.WriteLine("指派Thread[{0}]為新領導", LeaderThread._Thread.ManagedThreadId);
                        LeaderThread._AutoResetEvent.Set();
                    }
                    else
                    {
                        LeaderThread = Controller.CreateThread(new ParameterizedThreadStart(ThreadWork));
#if (LeaderThread != null)
                        Debug.WriteLine("Thread[{0}] is Leader Create Done", LeaderThread._Thread.ManagedThreadId);
#else
                        Debug.WriteLine("沒有閒置的Thread");
#endif
                    }

                //做從WorkQueue取出的工作
                //如果工作的程式碼有Thread.CurrentThread.Abort,會把被Abort的Thread重置
                try
                {
                    switch (Work.GroupName)
                    {
                    case FunctionGroupName.TestFunctionGroup:
                        TestWork.TestFunctionGroup(Work);
                        break;

                    case FunctionGroupName.FeaturesFunctionGroup:
                        TestWork.FeaturesFunctionGroup(Work);
                        break;
                    }
                }
                catch
                {
                    if (Thread.CurrentThread.ThreadState == ThreadState.AbortRequested || Thread.CurrentThread.ThreadState.ToString() == "Background, AbortRequested")
                    {
                        Debug.WriteLine("Thread[{0}] 被Abort,重置Thread[{0}]", Thread.CurrentThread.ManagedThreadId);
                        Thread.ResetAbort();
                    }
                }

                //工作做完如果沒有LeaderThread會自動成為Leader,不然加入IdleThread Queue,
                lock (Controller.ThreadVariableChangeLock)
                    if (LeaderThread == null)
                    {
                        Debug.WriteLine("Thread[{0}] 成為新領導", Thread.CurrentThread.ManagedThreadId);
                        LeaderThread = ((ThreadItem)ThisThreadItem);
                    }
                    else
                    {
                        Debug.WriteLine("Thread[{0}] 進入閒置佇列", Thread.CurrentThread.ManagedThreadId);
                        IdleThreadQueue.Enqueue((ThreadItem)ThisThreadItem);
                    }
            }
            return(0);
        }