Exemple #1
0
        private void run()
        {
            Request response;
            Doctor  tempDoctor = null;

            while (true)
            {
                Console.Clear();

                Console.WriteLine("=================Hospital=================");
                Console.WriteLine($"Succeed {succeed}");
                Console.WriteLine($"Failed {failed}");
                Console.WriteLine("==========================================\n");

                Console.WriteLine("==================Doctors=================");
                foreach (var d in doctors.ToArray())
                {
                    Console.WriteLine($"Doctor id {d.Id} === Experience {d.Experience} === Availability {d.SurgeryAvailable}");
                }
                Console.WriteLine("==========================================\n");

                Console.WriteLine("==================Patients================");
                foreach (var p in patients.ToArray())
                {
                    Console.WriteLine($"Patient id {p.Id} === Complexity {p.Injury.Complexity}");
                }
                Console.WriteLine("==========================================\n");

                if (requests.Count > 0)
                {
                    if (requests.Peek().Source == "Patient")
                    {
                        if (doctors.Count > 0)
                        {
                            response = requests.Dequeue();

                            if (response.Result == Result.Accepted)
                            {
                                tempDoctor = doctors.Find(d => response.DoctorID == d.Id);
                            }
                            else if (response.Result == Result.Pending)
                            {
                                tempDoctor = doctors.Find(d => d.Experience >= response.Complexity);
                            }


                            if (tempDoctor == null)
                            {
                                response.Source = "Hospital";
                                response.Result = Result.NoDoctorAvailable;

                                patients.Find(i => i.Id == response.PatientID).Injury = response;
                            }
                            else if (tempDoctor.SurgeryAvailable > 0 && response.Result == Result.Accepted)
                            {
                                response.Source = "Doctor";
                                tempDoctor.surgery(ref response);
                            }
                            else if (tempDoctor.SurgeryAvailable > 0)
                            {
                                response.Source   = "Hospital";
                                response.Result   = Result.Offer;
                                response.Price    = tempDoctor.getPrice(response.Complexity);
                                response.DoctorID = tempDoctor.Id;

                                patients.Find(i => i.Id == response.PatientID).Injury = response;
                            }
                            else
                            {
                                response.Source = "Hospital";
                                response.Result = Result.NoDoctorAvailable;

                                patients.Find(i => i.Id == response.PatientID).Injury = response;
                            }
                        }
                        else
                        {
                            response        = requests.Dequeue();
                            response.Source = "Hospital";
                            response.Result = Result.NoDoctorAvailable;

                            patients.Find(i => i.Id == response.PatientID).Injury = response;
                        }
                    }
                    else if (requests.Peek().Source == "Doctor")
                    {
                        response = requests.Dequeue();

                        if (response.Result == Result.Succeed)
                        {
                            succeed++;
                        }
                        else
                        {
                            failed++;
                        }

                        var tempPatient = patients.Find(i => i.Id == response.PatientID);

                        tempPatient.Injury = response;
                        dischargePatient(tempPatient.Id);
                    }
                }
                else
                {
                    Thread.Sleep(2000);
                }
                response = null;
            }
        }