Zadanie 1
---------

Należy utworzyć dwa programy obsługujące serwis do gry w kółko i krzyżyk.

Program 1: Serwer uczestników
-----------------------------

Serwer uczestników stanowi punkt rejestracji klienta w systemie. Każdy
gracz na początku łączy się z serwerem uczestników w celu dowiedzenia
się, gdzie znajdują się pozostali gracze. Serwer uczestników utrzymuje
aktualną listę uczestników. Dodaje do niej klienta, jeśli się klient
zgłosi. Usuwa klienta, jeśli klient zgłosi, że kończy pracę. Dodatkowo
okresowo rozsyła zapytanie do wszystkich klientów, prosząc o
informację, czy dalej funkcjonują. Brak odpowiedzi od klienta w
wyznaczonym czasie oznacza usunięcie klienta z listy. Każdy klient w
każdej chwili ma prawo pobrać od serwera uczestników aktualną listę
uczestników.

Klient zgłasza się do serwera uczestników za pomocą protokołu TCP, za
pomocą protokołu TCP jest też pobierana lista uczestników
gry. Komunikacja w związku z okresowym zapytaniem od serwera do
klientów realizowane jest za pomocą protokołu UDP.

Program 2: Klient
-----------------

Klient po uruchomieniu zgłasza się do znanego mu (umieszczonego w
pliku konfiguracyjnym lub podanego z wiersza wywołania) serwera
uczestników. Pobiera od niego listę graczy. Wyświetla listę na ekranie
użytkownika. Użytkownik może wybrać klienta, z którym rozpoczyna się
rozgrywka w kółko i krzyżyk. Każdy klient utrzymuje w swojej pamięci
aktualny stan gry (żeby nie było możliwe oszukanie przez wymuszenie
stanu). Po zakończonej rozgrywce klient łączy się znowu z serwerem
rozgrywek i pobiera z niego aktualną listę klientów, dzięki której
może się odbyć kolejna runda.

Jeśli dany klient zażąda rozgrywki z klientem, który już jakąś
rozgrywkę prowadzi, to musi dostać od tego klienta informację, iż
rozgrywka nie może zostać podjęta. W tej sytuacji klient, któremu
odmówiono rozgrywki może się zgłosić do serwera uczestników po listę
uczestników.

Klient wysyła do serwera informację o zakończeniu pracy na życzenie
użytkownika, gdy ten kończy granie i zamierza zakończyć program
klienta.

Dopuszczalne jest dowolne rozwiązanie problemu pewności przesyłania
pakietów między klientami. Na przykład można przyjąć, że jeśli w ciągu
10 minut nie nadeszła odpowiedź, to uznajemy, że pakiet nie został
dostarczony. 

Komunikacja z serwerem uczestników odbywa się za pomocą TCP (za
wyjątkiem sytuacji wskazanych w opisie serwera). Komunikacja z innymi
klientami odbywa się za pomocą UDP.

Termin: 27.02.2004
Ostatnia modyfikacja: 06.02.2004

Valid HTML 4.01!