예제 #1
0
        //private IEnumerable<CaseWorker> _membersAsCaseWorkers
        //{
        //    get
        //    {
        //        yield return Rapporteur;
        //        yield return OtherMember;
        //        yield return Chair;
        //    }
        //}

        //internal IEnumerable<Member> Members { get => _membersAsCaseWorkers.Select(x => x.Member); }
        #endregion


        #region construction
        internal CaseBoard(
            Member ch,
            Member rp,
            Member om,
            Registrar registrar)
        {
            Chair       = new CaseWorker(ch, WorkerRole.Chair);
            Rapporteur  = new CaseWorker(rp, WorkerRole.Rapporteur);
            OtherMember = new CaseWorker(om, WorkerRole.OtherMember);

            _workerQueues = new Dictionary <CaseStage, Queue <CaseWorker> >
            {
                [CaseStage.Summons]  = _makeQueue(),
                [CaseStage.Decision] = _makeQueue()
            };
            _registrar = registrar;
        }
예제 #2
0
        internal WorkerRole EnqueueForNextWorker(Hour currentHour, AllocatedCase allocatedCase)
        {
            CaseWorker nextWorker = null;

            if (_workerQueues[CaseStage.Summons].Count > 0)
            {
                nextWorker = _workerQueues[CaseStage.Summons].Dequeue();
            }
            else if (_workerQueues[CaseStage.Decision].Count > 0)
            {
                nextWorker = _workerQueues[CaseStage.Decision].Dequeue();
            }

            if (nextWorker == null)
            {
                return(WorkerRole.None);
            }

            _registrar.EnqueueForWorker(currentHour, nextWorker, allocatedCase);
            return(nextWorker.Role);
        }
예제 #3
0
 internal void EnqueueForMember(Hour currentHour, CaseWorker worker, AllocatedCase allocatedCase)
 {
     _checkMemberIsRegistered(worker.Member);
     _memberQueues[worker.Member].Enqueue(currentHour, allocatedCase, worker.Role);
 }
예제 #4
0
 internal void EnqueueForWorker(Hour currentHour, CaseWorker nextWorker, AllocatedCase allocatedCase)
 {
     _boardQueue.EnqueueForMember(currentHour, nextWorker, allocatedCase);
 }