Powrót na stronę UNIX

Tematyka zadania: gniazda tcp
Rodzaj sprawdzania: po zajęciach
Czas pisania: 90 minut
Sprawdzający: Marcin Borkowski
Autor Zadania: Waldemar Kurkowski

Napisz program serwer symulujący pizzerię na telefon. Jest ona wyposażona w jeden telefon, za pomocą którego pracownik przyjmuje zamówienia i wysyła doręczycieli do klientów.

Główny proces to pracownik odbierający zamówienia. Otwiera socket, na którym oczekuje na zamówienia. Gdy klient się podłączy czekamy, aż złoży on zamówienie (wyśle wiadomość). Podaje on tylko odległość w jakiej znajduje się jego dom od pizzeri (z przedziału [1,10]). Można przyjąć, że zamówienie składa się najwyżej z dwóch znaków (liczby dwucyfrowej). Jeśli złożone zamówienie jest poprawne, to pracownik wysyła doręczyciela z pizzą (tworzy proces potomny). Ma do dyspozycji K doręczycieli. Jeśli wszyscy doręczyciele są zajęci, to czekamy aż któryś będzie wolny.

Od momentu podłączenia się klienta do momentu wysłania doręczyciela (utworzenia procesu potomnego) inni klienci nie mogą się połączyć (telefon jest zajęty). Czyli podczas oczekiwania na wolnego doręczyciela nie odkładamy słuchawki.

Doręczyciel (proces potomny) na początku informuje klienta o tym, że pizza jest w drodze. Następnie jedzie do klienta (śpi taką ilość sekund jaką odległość podał klient przy składaniu zamówienia). Gdy dotrze wysyła klientowi informację, że dostarczono pizzę.

Pizzeria ma określoną ilość pizz jaką jest w stanie zrobić określonego dnia - L. Nie może zrealizować więcej zamówień. Program kończy się po dostarczeniu L pizz. Może skończyć się też w wyniku naciśnięcia CTRL+C. Wtedy nie przyjmujemy już nowych zamówień, czekamy na dokończenie trwających i kończymy program.

Jeżeli klient zamknie socket przed zrealizowaniem zamówienia, zamykamy socket i dalej realizujemy zamówienia. Od momentu wyruszenia doręczyciela (utworzenia procesu potomnego) zamówienie liczy się do zrobionych pizz.

Parametry wywołania programu : N - numer portu, K w przedziale [1,10], L w przedziale [5,50].

Za program klient będzie służył telnet.

Szczególną uwagę zwracamy na:

Powrót na stronę UNIX