1.2. Architektura aplikacji - 189764/OneArmBandit GitHub Wiki
W naszym programie wykorzystaliśmy desktop-ową architekturę typu klient-serwer. Aplikacja składa się de facto z dwóch programów - konsolowej aplikacji serwera, która obsługuje dane oraz odpowiada za logikę biznesową oraz aplikacji okienkowej klienta, która odbiera od użytkownika dane i przekazuje serwerowi oraz wyświetla informacje otrzymane od serwera. Aplikacja kliencka nie przechowuje żadnych danych, ponieważ wszystkie dane są trzymane na serwerze.
Aby zrealizować komunikację między klientem, a serwerem wykorzystujemy opracowany przez nas pakiet, który jest przesyłany pomiędzy biblioteką sieciową, a serwerem. Do zestawienia połączenia używamy Socketów.
Biblioteka sieciowa to z kolei łącznik między działaniami użytkownika a reakcją serwera. Umożliwia przekazanie danych do serwera oraz otrzymanie takich odpowiedzi, które można przedstawić użytkownikowi, aby wiedział co się dzieje w programie Biblioteka sieciowa współdzieli z serwerem Package. Jest to obiekt, który będzie przekazywany między tymi komponentami. Rozszerzenie pakietu – Data – zawiera między innymi pole instrukcja informujące o tym, które z żądań użytkownika serwer ma wykonać.
Przy uruchomieniu programu zostanie utworzony obiekt klasy ServerConnector, który nawiąże połączenie z serwerem. Od tego momentu żądania użytkownika mogą być obsługiwane. Klasa DeliverToServer udostępnia metody, które wywołane będą jako reakcja na decyzje użytkownika. Przekazywane parametry będą dodawane do nowego obiektu typu Package. Obiekt ten zostanie przekazany do metody sendToServer, w której (jak wskazuje nazwa) wiadomość zostanie przekazana do serwera. Z kolei metoda listenFromServer będzie nasłuchiwała obiektów przychodzących z serwera (osobny wątek). Odebrany obiekt zostanie rozpakowany do Package. Wiedząc to wywołamy odpowiednią metodę z klasy pickUpFromServer. Przy wywołaniu metod reagujących na odpowiedź z serwera każdy element na odpowiedniej liście obserwatora zostanie poinformowany o efekcie żądania i o tym co to było za żądanie. Takie dane będą później służyły do wyświetlenia stosownego komunikatu dla użytkownika i podjęcia odpowiednich kroków przez inne komponenty aplikacji.