Projekt na programowanie systemowe i współbieżne – Treść zadania
np.
gcc inf145233_s.c -o serwer -Wall
gcc inf145233_k.c -o klient -Wall -lncursesw
Wymaga biblioteki ncursesw (ewentualnie ncurses, ale nie będą działać polskie znaki)
na początku – uruchomienie serwera: ./serwer
uruchomienie klientów (dowolna ilość): ./klient
Plik zawiera wszystkie funkcje niezbędne do działania serwera:
main
– odbiór wiadomości i przekierowanie jej do odpowiedniej funkcjilogin
– przyjęcie logowania nowego klientaadd topic
– utworzenie nowego tematuadd_sub
– dodanie klienta do listy subskrybentów danego tematusend_msgs
– rozgłoszenie wiadomościsend_topics
– wysłanie klientowi listy tematów dostępnych na serwerzesend_subed_topics
– wysłanie klientowi listy subskrybowanych przez niego tematówshutdown
– usunięcie wszystkich kolejek komunikatów (serwera i klientów)
ponadto funkcje pomocnicze:
send_feedback
– wysłanie wiadomości zwrotnej do klientaprint_subs
– wyświetlenie listy subskrybcji w danym temacie (do debugowania)decrement_sub_length
– zmniejszenie długości subskrybcji przy subskrybcji przejściowej. Usunięcie suskrybcji o długości 0 i przesłanie wiadomości o tym do klienta.
Plik zawiera wszystkie funkcje niezbędne do komunikacji z serwerem:
login
– wysłanie wiadomości dotyczącej logowania na serwerregister topic
– wysłanie wiadomości dotyczącej tworzenia nowego tematu na serwerregister_sub
– wysłanie wiadomości dotyczącej nowej subskrybcji na serwersend_msg
– wysłanie wiadomości do rozgłoszenia na serwerreceive_msg_async
– odbiór wiadomości z danego tematu (jeśli dostępne) i wyświetlenie ichreceive_msg_sync
– odbiór wiadomości z danego tematu (jeśli dostępne), posortowanie ich po priorytecie i wyświetlenieget_topics
– wysłanie zapytania na serwer i wyświetlenie listy tematów dostępnych na serwerze (lub subskrybowanych przez użytkownika)get_zombie_subs
– odebranie wiadomości o subskrybcjach, które niedawno się zakończyłyshutdown
– wysłanie polecenia wyłączenia serwera
oraz użytkownikiem:
gui_menu
– wyświetlenie graficznego menu i jego obsługalogin_menu
– wprowadzenie danych logowania i obsługa błędówtopic_menu
– wprowadzenie danych do rejestracji tematu i obsługa błędówsub_menu
– wprowadzenie danych do rejestracji subskrybcji i obsługa błędówmsg_menu
– wprowadzenie nowej wiadomości i obsługa błędówreceive_msg_sync_menu
– wprowadzenie danych wiadomości do odebrania i obsługa błędówreceive_msg_async_menu
– włączenie lub wyłączenie asynchronicznego odbioru wiadomości z konkretnego tematu przez użytkownika
ponadto funkcje pomocnicze:
main
– inicjalizacja, utworzenie procesu potomnego, przekierowywanie do odpowiednich funkcjichild
– pętla procesu potomnego – asynchroniczne odczytywanie wiadomości i komunikacja z użytkownikiem w sprawach ich dotyczącychtake_feedback
– odebranie wiadomości zwrotnej o powodzeniu lub błędzieprint_error
,print_info
,print_success
,print_long
– wyświetlenie odpowiednio sformatowanej wiadomościget_int_from_user
,get_string_from_user
– pobranie odpowiedniej wartości od użytkownikaclose_window
– czekanie na naciśnięcie dowolnego klawisza, wyczyszczenie oknaclean_window
– wyczyszczenie okna, narysowanie ramki z jego nazwą i umieszczenie kursora w lewym górnym rogu
© Anna Panfil 2020-2021