public void restaurant()
        {
            //Instiate the table controller
            TableController.GetTableController().createListTable(tables);
            //Instiate the Maitre d'Hotel
            StaffController.GetStaffController().addMaitreHotel(1);
            //Instiate all the chef de rang
            StaffController.GetStaffController().addChefRang(2);
            //Instiate all the waiters
            StaffController.GetStaffController().addServer(waiters);
            Console.WriteLine("Le restaurant possède : " + waiters + " serveurs et " + tables);
            Task task = Task.Factory.StartNew(() => clientArrival());

            while (true)
            {
                //while (Console.ReadKey().KeyChar != 'a')
                //{
                //    Thread.Sleep(500);
                //}
                //if (stop == true)
                //{
                //    TableController.GetTableController().MyManualResetEvent.Reset();
                //    stop = false;
                //}
                //else if (stop == false)
                //{
                //    TableController.GetTableController().MyManualResetEvent.Set();
                //    stop = true;
                //}
                //else
                //{
                //    Console.WriteLine("error");
                //}
            }
        }
        public void callChefRang(int idTable)
        {
            TableController.GetTableController().MyManualResetEvent.WaitOne(Timeout.Infinite);
            if ((idTable == 1) || (idTable == 2))
            {
                for (int i = 0; i < StaffController.GetStaffController().MylistStaff.Count(); i++)
                {
                    if (StaffController.GetStaffController().MylistStaff.ElementAt(i).ToString() == "ControleurRestaurant.ChefRang")
                    {
                        if (StaffController.GetStaffController().MylistStaff.ElementAt(i).returnID() == 1)
                        {
                            Console.WriteLine("j'appelle chef rang :" + StaffController.GetStaffController().MylistStaff.ElementAt(i).returnID() + "pour la table :" + idTable);
                            StaffController.GetStaffController().MylistStaff.ElementAt(i).doStuff(idTable);
                        }
                    }
                }
            }

            if ((idTable == 3) || (idTable == 4))
            {
                for (int i = 0; i < StaffController.GetStaffController().MylistStaff.Count(); i++)
                {
                    if (StaffController.GetStaffController().MylistStaff.ElementAt(i).ToString() == "ControleurRestaurant.ChefRang")
                    {
                        if (StaffController.GetStaffController().MylistStaff.ElementAt(i).returnID() == 2)
                        {
                            Console.WriteLine("j'appelle chef rang :" + StaffController.GetStaffController().MylistStaff.ElementAt(i).returnID() + "pour la table :" + idTable);
                            StaffController.GetStaffController().MylistStaff.ElementAt(i).doStuff(idTable);
                        }
                    }
                }
            }
        }
        public void callMaitreHotel(int idTable)
        {
            TableController.GetTableController().MyManualResetEvent.WaitOne(Timeout.Infinite);
            Console.WriteLine("Les clients vont payer" + idTable);

            int  indexMaitreHotel = 0;
            bool test             = false;

            for (int i = 0; (i < StaffController.GetStaffController().MylistStaff.Count) && (test == false); i++)
            {
                if (StaffController.GetStaffController().MylistStaff.ElementAt(i).ToString() == "ControleurRestaurant.MaitreHotel")
                {
                    test             = true;
                    indexMaitreHotel = i;
                }
            }


            if (test == false)
            {
                Console.WriteLine("le maitre d'hotel est occupé");
                Thread.Sleep(10000);
                callMaitreHotel(idTable);
            }

            StaffController.GetStaffController().MylistStaff.ElementAt(indexMaitreHotel).doStuff2(idTable);
        }
 public void commandeComplete(int idTable)
 {
     TableController.GetTableController().MyManualResetEvent.WaitOne(Timeout.Infinite);
     Console.WriteLine("commande complète pour la table :" + idTable);
     for (int i = 0; i < StaffController.GetStaffController().MylistStaff.Count; i++)
     {
         if (StaffController.GetStaffController().MylistStaff.ElementAt(i).ToString() == "ControleurRestaurant.Serveur")
         {
             StaffController.GetStaffController().MylistStaff.ElementAt(i).doStuff(idTable);
             break;
         }
     }
 }
 public void groupLeaves(int idTable)
 {
     TableController.GetTableController().MyManualResetEvent.WaitOne(Timeout.Infinite);
     Console.WriteLine("le groupe de la table " + idTable + " part");
     for (int i = 0; i < StaffController.GetStaffController().MylistStaff.Count; i++)
     {
         if (StaffController.GetStaffController().MylistStaff.ElementAt(i).ToString() == "ControleurRestaurant.Serveur")
         {
             if (StaffController.GetStaffController().MylistStaff.ElementAt(i).getAvailability() == Availability.waiting)
             {
                 StaffController.GetStaffController().MylistStaff.ElementAt(i).doStuff2(idTable);
                 break;
             }
         }
     }
 }
        public void clientArrival()
        {
            TableController.GetTableController().MyManualResetEvent.WaitOne(Timeout.Infinite);
            Group groupe = new Group();

            Console.WriteLine("j'ai accueilli un groupe de :" + groupe.MySizeGroup);

            int i = 0;

            while (StaffController.GetStaffController().MylistStaff.ElementAt(i).ToString() != "ControleurRestaurant.MaitreHotel")
            {
                i++;
            }

            Thread thread = new Thread(() =>
            {
                StaffController.GetStaffController().MylistStaff.ElementAt(i).doStuff3(groupe);
            });

            thread.Start();
            appelClients();
        }