Moduły systemu

Nazwa modułuTechnologiaOpis
Serwer aplikacjiJava 2 SE Moduł nadrzędny. Pozwala na przyłączenie modułów podrzędnych. Steruje przepływem danych.
GraJava 2 SEAplikacja uruchamiana na serwerze. Otrzymuje dane o akcjach graczy. Kontroluje ich poprawność i przebieg rozgrywki. Wysyła dane o akcjach graczy do ich przeciwników (o ile są poprawne) i dane o stanie gry do modułu obserwatora.
Gracz/Zawodnikszkieletowe API komunikacyjne w CPrzyłącza się do gry. Otrzymuje dane o akcji przeciwnika i odpowiada swoją akcją.
Obserwator stacjonarnyJava 2 SE (Swing)Przyłącza się do gry. Otrzymuje dane o stanie gry. Wizualizuje lub loguje przebieg rozgrywki.

Funkcje systemu

Nazwa modułuFunkcje
Serwer aplikacji
  • zestawianie połączeń
  • uruchamianie gier
  • przekazywanie komunikatów
  • zamykanie połączeń
Gra
  • budowa środowiska gry
  • akceptacja graczy (po nazwie)
  • przesłanie parametrów rozgrywki (do graczy)
  • analiza akcji graczy w kontekście logiki gry
  • przesyłanie poprawnych akcji (do przeciwnika lub/i obserwatora)
  • przesyłanie informacji o błędnych akcjach
  • przesłanie komunikatu o zakończeniu gry
Gracz/Zawodnik
  • przyłączenie do gry
  • odbiór parametrów rozgrywki
  • wybieranie odpowiedniego posunięcia (akcji) w środowisku gry
  • przesyłanie własnych akcji
  • odbieranie komunikatów serwera (akcje przeciwnika, błędy, informacja o końcu gry)
Obserwator stacjonarny
  • przyłączenie do gry
  • jednorazowy odbiór dotychczasowej historii przebiegu rozgrywki (po przyłączeniu)
  • odbieranie komunikatów o przebiegu rozgrywki (w czasie rzeczywistym)
  • wizualizacja środowiska gry
    • rysowanie boiska
    • wyświetlanie akcji gracza na boisku
    • prezentacja informacji o czasie ruchów
    • statystyki gry (nazwy graczy, liczba ruchów, średnia długość ruchu)
    • informacja o błędach
  • zapis historii rozgrywki do pliku
  • odtwarzanie przebiegu rozgrywki z pliku

Protokół

Powitanie

Nazwa modułuSposób powitania
Gra Jest uruchamiana przez administratora systemu lub automatycznie przez serwer, gdy pojawia się żądanie przyłączenia do gry od gracza i serwer nie ma wolnych gier.
Gracz
<message type="hello" id="12345">
  <mod-type>player</mod-type>
  <name>Wymiatacz</name>
</message>
Obserwator
<message type="hello" id="12345">
  <mod-type>observer</mod-type>
  <name>Logger</name>
</message>

Akcja

<message type="move" id="12345">
  <type>1</type>
  <type>2</type>
  <type>3</type>
</message>

Parametry planszy

<message type="params" id="12345">
  <map width="10" height="8" goal="2"/>
  <attack side="-1" begin="true"/>
</message>

Stan gry

<message type="log" id="12345">
  <name>Zabijaka</name>
  <name>Wymiatacz</name>

  <map width="10" height="8" goal="2"/>

  <begin>Wymiatacz</begin>

  <move time="15:37.45">
   <type>1</type>
   <type>2</type>
   <type>3</type>
  </move>
  ...
  <error name="Wymiatacz">Niepoprawny komunikat</error>
  ...
  <move time="15:38.45">
   <type>1</type>
   <type>2</type>
   <type>3</type>
  </move>
  ...
  <winner>Wymiatacz</winner>
</message>

Wiadomości specjalne

Typ wiadomościOpis
Koniec gry
<message type="game-over" id="12345">
  <name>Wymiatacz</name>
</message>
Odrzucenie/zaakceptowanie wiadomości Serwer potwierdza badz odrzuca każdą wiadomość od klienta (gracza lub obserwatora). Jeżeli wiadomość zostanie odrzucona, klient powinien ja zmienić zależnie od podanego przez serwer powodu odrzucenia i wysłać ponownie. W przypadku otrzymania trzech kolejnych niepoprawych wiadomości, serwer zamyka połącznie z klientem, który je wysłał. Podobnie w sytuacji nadejścia wiadomości w momencie gdy serwer się jej nie spodziewa (np. koniec gry).

<message type="confirmation" id="12345">
  <accepted/>
</message>

<message type="confirmation" id="12345">
  <refused>
    Niepoprawny ruch.
  </refused>
</message>
Lista gier/Wybór gry do obserwacji
<message type="games" id="12345">
  <name>Red vs. Blue</name>
  <name>Freddy vs. Jason</name>
</message>

<message type="game" id="12345">
  <name>RotoZoomer vs. PlasmaCloud</name>
</message>

Komunikacja i pomiar czasu

GRACZ_1         GRA            GRACZ_2
   |-----\   H   |                |
   |      \---->>|   H    /-------|
   |  Ack /------|<<-----/        |
   |<<---/       |-------\  Ack   |
   |   P  /------|-------\\----->>|
   |<<---/       |   P    \----->>|
   |-----\  Ack  |  Ack   /-------|
   |      \---->>|<<-----/        |
   |       [T1b] |                |
   |             |                |
   |-----\   A1  |                |
   |      \---->>| [T1e]          |
   | Ack  /------|-------\   A1   |
   |<<---/       |        \----->>|
   |             |  Ack   /-------|
   |       [T2b] |<<-----/        |
   |             |                |
   |             |   A2   /-------|
   |       [T2e] |<<-----/        |
   |  A2  /------|                |
   |<<---/       |                |
   |-----\  Ack  |                |
   |      \---->>| [T1b]          |

                ...

   |-----\   An  |                |
   |      \---->>| [T1e]          |
   | Ack  /------|                |
   |<<---/       |                |
   |  GO  /------|-------\   GO   |
   |<<---/       |        \----->>|
   |             |                |
   X             X                X