//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; }
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); }
internal void EnqueueForMember(Hour currentHour, CaseWorker worker, AllocatedCase allocatedCase) { _checkMemberIsRegistered(worker.Member); _memberQueues[worker.Member].Enqueue(currentHour, allocatedCase, worker.Role); }
internal void EnqueueForWorker(Hour currentHour, CaseWorker nextWorker, AllocatedCase allocatedCase) { _boardQueue.EnqueueForMember(currentHour, nextWorker, allocatedCase); }