예제 #1
0
        public void TakeClient(Client client)
        {
            bool wantManicure = client.manicure_wanted;
            bool entered = false;

            entered = CheckWaitingRoom(client);

            if (!entered)
            {
                Console.WriteLine("Klient " + client.name + " wychodzi.");
                ClientLeaves(out client);
            }
            else
            {
                if (lastBarber < barbers.Count - 1)
                    lastBarber++;
                else
                    lastBarber = 0;

                barbers[lastBarber].Haircut(client);

                if(wantManicure)
                {
                    if (lastManicurist < manicurists.Count - 1)
                        lastManicurist++;
                    else
                        lastManicurist = 0;
                    manicurists[lastManicurist].Manicure(client);
                }
            }
        }
예제 #2
0
        public void Haircut(Client client)
        {
            Random rand = new Random();
            int time = rand.Next(1000, 3001);
            Console.WriteLine("Klient " + client.name + " idzie do fryzjera " + name);

            lock (this)
            {
                Console.WriteLine("Fryzjer " + name + " rozpoczyna strzyzenie (spotkanie) klienta " + client.name);
                Console.WriteLine("Strzyzenie bedzie trwac " + time / 100 + " minut");

                if (boss.waiting_room.Contains(client))
                    boss.waiting_room.Remove(client);
                entryBegin.Set(); // sygnalizacja zdarzenia entryBegin (czyli rozpoczęcia spotkania Haircut)
                entryEnd.WaitOne(); //blokada wątku wywołującego do czasu zakończenia spotkania
                Thread.Sleep(time); //strzyżenie trwa między 10-30 minut (1-3 sek)
                Console.WriteLine("Fryzjer " + name + " koniec strzyżenia (spotkania) klienta " + client.name);
            } //opuszczenie sekcji krytycznej => następny wątek może rozpocząć spotkanie
            client.haircut_done = true;
            if ((client.manicure_wanted && client.manicure_done) || !client.manicure_wanted)
            {
                Console.WriteLine("Klient " + client.name + " wychodzi.");
                boss.ClientLeaves(out client);
            }
        }
예제 #3
0
        private static void CreateClient(Boss boss, int counter)
        {
            Client client = new Client(counter, boss);
            if (client.manicure_wanted)
                Console.WriteLine("Przybył klient " + client.name + " na strzyżenie i manicure");
            else
                Console.WriteLine("Przybył klient " + client.name + " tylko na strzyżenie");

            client.Start();
        }
예제 #4
0
 public bool CheckWaitingRoom(Client client)
 {
     Console.WriteLine(client.name + "  Sprawdzam dostępność poczekalni");
     if (waiting_room.Count < waiting_room.Capacity)
     {
         Console.WriteLine(client.name + "  Wolne miejsce. Wchodzę do poczekalni.");
         waiting_room.Add(client);
         return true;
     }
     else
     {
         Console.WriteLine(client.name + "  Nie ma miejsca w poczekalni.");
         return client.WaitForRoom(this);
     }
 }
예제 #5
0
        public void Manicure(Client client)
        {
            Console.WriteLine("Klient " + client.name + " idzie do manikiurzystki " + name);

            lock (this)
            {
                Console.WriteLine("Manikiurzystka " + name + " rozpoczyna manicure (spotkanie) klienta " + client.name);
                Console.WriteLine("Manicure bedzie trwac 15 minut");
                //client.manicure_wanted = false;
                if (boss.waiting_room.Contains(client))
                    boss.waiting_room.Remove(client);
                entryBegin.Set(); // sygnalizacja zdarzenia entryBegin (czyli rozpoczęcia spotkania Manicure)
                entryEnd.WaitOne(); //blokada wątku wywołującego do czasu zakończenia spotkania
                Thread.Sleep(1500); //manicure trwa 15 minut (1.5 sek)
                Console.WriteLine("Manikiurzystka " + name + " koniec manicure (spotkania) klienta " + client.name);

            } //opuszczenie sekcji krytycznej => następny wątek może rozpocząć spotkanie
            client.manicure_done = true;
            if (client.haircut_done)
            {
                Console.WriteLine("Klient " + client.name + " wychodzi.");
                boss.ClientLeaves(out client);
            }
        }
예제 #6
0
 bool CheckFreeBarbers(Client client)
 {
     return false;
 }
예제 #7
0
 public void ClientLeaves(out Client client)
 {
     client = null;
 }