GAITC Dokumentacja projektu

background image

Analizator poleceń

służących do obsługi

serwera do gry w

ruletkę

Projekt z przedmiotu Gramatyki,

Automaty i Techniki Translacji

Mateusz Macięga

informatyka

gr. 42

background image

Spis treści

1.Wstęp...........................................................................................................3
2.Cel projektu...................................................................................................3

3.Technologia...................................................................................................3
4.Projekt modułu..............................................................................................3

4.1Algorytm działania.....................................................................................3
4.2Dostępne polecenia...................................................................................4

4.2.1Wyświetlenie informacji o wszystkich poleceniach....................................4
4.2.2Wyrzucenie gracza z serwera................................................................4

4.2.3Zablokowanie adresu IP gracza.............................................................5
4.2.4Wyświetlenie listy zbanowanych adresów IP............................................5

4.2.5Usunięcie zablokowania adresu IP gracza...............................................6
4.2.6Wyświetlenie aktualnej lub zmiana na nową startowej liczby pieniędzy.......6

4.2.7Zmiana trybu gry................................................................................6
4.2.8Zresetowanie serwera gry....................................................................7

4.2.9Wyświetlenie aktualnej lub zmiana na nową maksymalną liczbę klientów....7
4.2.10Wyświetlenie aktualnej lub zmiana na nową wartość czasu na ruch..........8

5.Realizacja modułu..........................................................................................8
6.Propozycje rozbudowy projektu........................................................................9

7.Literatura......................................................................................................9

background image

1. Wstęp

Praca inżynierska „Aplikacja umożliwiająca wieloosobową grę w ruletkę” wiąże

się ze stworzeniem projektu aplikacji opartej na architekturze klient-serwer,

stworzeniu serwera gry, który będzie zarządzał rozgrywką, klienta gry, który będzie się
łączył z serwerem i protokołu komunikującego serwer z klientami i na odwrót. Serwer

gry jest serwerem nasłuchującym co oznacza, że serwer działa w tym samym procesie
co klient gry. Gracz, który będzie zarazem serwerem musi mieć możliwość

konfigurowania ustawień serwera wpływających na rozgrywkę.

2. Cel projektu

Celem projektu jest stworzenie modułu w mojej aplikacji z grą pozwalającego

na interpretacje poleceń wydawanych przez gracza będącego serwerem oraz translacje
na konkretne działania aplikacji. Możliwość wydawania poleceń serwerowych będzie

miał jedynie gracz prowadzący rozgrywkę. Możliwe polecenia zostaną zdefiniowane w
aplikacji.

3. Technologia

Cała aplikacja ruletki zaimplementowana została w języku Java. Z tego powodu

moduł również został napisany w języku Java. Do stworzenia interfejsu graficznego

wykorzystane zostały biblioteki graficzne AWT i Swing, natomiast do komunikacji
sieciowej wykorzystałem bibliotekę NIO udostępniającą nieblokujące operacje

wejścia/wyjścia i selektory, które umożliwiają obsługę wielu gniazd sieciowych za
pomocą jednego wątku.

4.

Projekt modułu

Moduł składa się z paru klas odpowiedzialnych za interpretacje wprowadzonego

polecenia, translacje na konkretne działanie aplikacji i ewentualnie przekazanie

pakietów do klientów.

4.1

Algorytm działania

Interpretacja wprowadzonego tekstu przez gracza. Są dwie możliwości: gracz
wprowadza wiadomość, która ma trafić do innych graczy lub wprowadza

polecenie, które ma zostać obsłużone przez serwer. Nas interesuje jedynie ta
druga opcja. Każde polecenie poprzedzone jest znakiem „/”. Na tej podstawie

decydujemy czy wprowadzony tekst jest poleceniem.

Polecenie trafia do klasy obsługującej polecenia (klasa „ObslugaPolecen”). W
metodzie tej klasy każde polecenie jest parsowane. Jeśli otrzymane polecenie

nie jest jednym ze zdefiniowanych poleceń zostaje odrzucone, zostanie
wyświetlony odpowiedni komunikat.

3/9

background image

Polecenie jest analizowane pod kątem jego typu. Dla każdego typu zdefiniowana

jest metoda, która wykonuje odpowiednie działanie w zależności od
otrzymanych argumentów.

Jeśli istnieje taka potrzeba to przesyłane są pakiety do klientów i wykonywane

są odpowiednie działania.

4.2 Dostępne polecenia

Wszystkie polecenia zdefiniowane są w typie wyliczeniowym (enum) dzięki

czemu jesteśmy w stanie w łatwy sposób dodać kolejne polecenia do obsłużenia.
Każde polecenie zawiera prawidłowy format wywołania oraz opis polecenia. Obecnie

zdefiniowanych jest 10 poleceń.

4.2.1 Wyświetlenie informacji o wszystkich poleceniach

Polecenie odpowiedzialne jest za wyświetlenie wszystkich zdefiniowanych

poleceń wraz z poprawną konstrukcją oraz opisem polecenia. Poprawna konstrukcja

oraz opis polecenia zapisany jest w typie wyliczeniowym.

Budowa polecenia:

/info

Wypisanie wszystkich poleceń oraz informacji o tych poleceniach odbywa się za

pomocą pętli for:

for(ObslugaPolecen.TypyPolecen p : ObslugaPolecen.TypyPolecen.values())

{

wiadomosc += "- " + p + ", format: " + p.dajBudowePolecenia() + "\n opis: " +

p.dajOpisPolecenia() + "\n";

}

4.2.2 Wyrzucenie gracza z serwera

Polecenie odpowiedzialne za wyrzucenie gracza z serwera. Polecenie przyjmuje

dwa argumenty z czego drugi jest opcjonalny. Pierwszym argumentem jest nazwa
gracza obecnego na serwerze, a drugim jest powód, dla którego gracz zostanie

usunięty. Po otrzymaniu takiego polecenia serwer sprawdza czy połączony jest klient o
podanej nazwie gracza. Jeśli taki gracz istnieje to gracz zostaje usunięty z listy graczy

połączonych oraz do pozostałych klientów zostaje wysłany pakiet informujący o
wyrzuceniu gracza z serwera.

Budowa polecenia:

/kick nazwaGracza [powódWyrzucenia]

Z tym poleceniem związany jest pakiet o nazwie „Pakiet05KickPlayer”. Budowa tego
pakietu jest następująca:

05nazwaGracza,RpowódWyrzuceniaK

Pierwsze dwa bajty określają typ pakietu. Następne bajty aż do znaku „,”

4/9

background image

przeznaczone są na nazwę gracza, którego chcemy wyrzucić z serwera. Następnie jest

litera „R” (reason, powód), po literce „R” podany jest powód wyrzucenia gracza. Każdy
pakiet zakończony jest literą „K”.
Klient po otrzymaniu takiego pakietu usuwa z listy graczy gracza z podaną nazwa oraz

wyświetla komunikat wraz z powodem wyrzucenia.

4.2.3 Zablokowanie adresu IP gracza

Polecenie odpowiedzialne za zablokowanie dostępu dla adresu IP gracza.

Przyjmuje dwa argumenty: pierwszy oznacza nazwę gracza, a drugi powód

zbanowania gracza. Drugi argument jest opcjonalny. Serwer po otrzymaniu takiego
polecenia sprawdza czy klient o podanej nazwie jest z nim połączony. Jeśli jest

połączony to wyciągany jest adres IP tego gracza z listy klientów. Adres IP gracza
zostaje dodany do listy zablokowanych adresów IP serwera wraz z nazwą gracza.

Każdy klient, który chce się połączyć z serwerem jest sprawdzany pod kątem
obecności jego adresu IP na liście adresów zablokowanych. Żeby klient był w stanie

dołączyć do gry jego adres IP nie może znajdować się na liście adresów
zablokowanych.

Budowa polecenia:

/ban nazwaGracza [powódZablokowania]

Z poleceniem tym związane są dwa pakiety. Pierwszy z nich to pakiet
Pakiet06BanPlayer”, który odpowiedzialny jest za poinformowanie klientów o

zablokowaniu gracza. Pakiet trafi również do klienta, który zostanie zablokowany. Po
odebraniu takiego pakietu pojawi mu się okienko z informacją a następnie zostanie

rozłączony z serwerem.
Budowa pakietu „Pakiet06BanPlayer”:

06nazwaGracza,RpowódZablokowaniaK

Drugim pakietem, który jest powiązany z tym poleceniem jest pakiet

Pakiet07LoginDenied”. Jest to pakiet, który zostaje wysłany graczowi, który
próbuje dołączyć do gry, informujący o zaniechaniu próby dołączenia. Mogą być trzy

powody otrzymania takiego pakietu: adres IP klienta jest zablokowany, nazwa gracza
jest już w użyciu lub serwer jest prywatny i należy podać hasło dostępu.

4.2.4 Wyświetlenie listy zbanowanych adresów IP

Polecenie wyświetlające listę zbanowanych adresów IP. Lista składa się z dwóch

kolumn. W pierwszej znajduje się zbanowany adres IP, a w drugiej nazwa gracza,
który korzystał z tego adresu IP.

Budowa polecenia:

/banlist

Podobnie jak w przypadku polecenia „/info” wyświetlanie odbywa się za pomocą pętli
for:

5/9

background image

String wiadomosc;
if(((List) gra.gniazdoSerwera.zbanowaniGracze).size() == 0) {

wiadomosc = "Brak zbanowanych adresów IP";

}

else {
wiadomosc = "Zbanowane adresy IP:\n";

for(GraczMP g : gra.gniazdoSerwera.zbanowaniGracze){
wiadomosc += "- " + g.dajAdres().getHostName() + " (nazwa gracza: " +

g.dajPseudonim() + ")\n";
}

wiadomosc = wiadomosc.substring(0, wiadomosc.lastIndexOf("\n"));
}

4.2.5 Usunięcie zablokowania adresu IP gracza

Polecenie umożliwiające usunięcie żądanego adresu IP z listy zablokowanych

adresów. Możemy to wykonać na dwa sposoby. Pierwszy sposób polega na
przekazaniu adresu IP, który chcemy usunąć, natomiast drugi na przekazaniu nazwy

gracza, który posługiwał się adresem IP w momencie zablokowania.

Budowa polecenia:

/unban adresIP|nazwaGracza

Jeśli dany adres IP lub nazwa gracza znajdują się na liście zablokowanych adresów to

adres zostanie usunięty z tej listy i gracze korzystający z tego adresu znów będą mogli
uczestniczyć w rozgrywce.

4.2.6 Wyświetlenie aktualnej lub zmiana na nową startowej liczby

pieniędzy

Polecenie pozwalające na wyświetlenie aktualnej startowej liczby pieniędzy lub

zmianę na nową wartość. Każdy gracz dołączają do gry rozpoczyna rozgrywkę z
początkową liczbą pieniędzy zdefiniowaną przez serwer. Informacja ta przekazywana

jest w jednym z pakietów konfiguracyjnych. Polecenie przyjmuje opcjonalnie jeden
argument z nową wartością startową. Jeśli nie podamy tego argumentu to zostanie

wyświetlona aktualna wartość.

Budowa polecenia:

/startmoney [nowaWartośćStartowa]

Dokonana zmiana wartości zostaje wprowadzona dopiero po dokonaniu restartu

serwera za pomocą polecenia „/restart”.

4.2.7 Zmiana trybu gry

Polecenie pozwala nam wyświetlić aktualny oraz zmienić tryb rozgrywki.

Dostępne są dwa tryby: public – publiczny lub private – prywatny, dostęp do serwera

jedynie po wpisaniu hasła dostępu. Polecenie przyjmuje opcjonalnie jeden argument
oznaczający nowy tryb. Jeśli nie podamy argumentu to zostanie wyświetlony

komunikat o aktualnym trybie. Jeśli wybranym trybem będzie tryb prywatny to wtedy
wyświetlone zostanie okno dialogowe gdzie należy podać nowe hasło dostępu do

6/9

background image

serwera. Tryb zostaje zmieniony po wprowadzeniu polecenia.
Budowa polecenia:

/changemode [public|private]

4.2.8 Zresetowanie serwera gry

Polecenie umożliwiające zresetowanie serwera gry. Zresetowanie serwera

oznacza rozpoczęcie od nowa rozgrywki z początkową wartością pieniężną oraz

określonym czasem na ruch. Jeśli dokonaliśmy wcześniej zmiany początkowej wartości
pieniężnej lub czasu na ruch to zmiany te są wprowadzane. Polecenie nie przyjmuje

żadnych argumentów.
Budowa polecenia:

/restart

Z poleceniem „restart” związany jest pakiet „Pakiet08Restart”, który zostaje

przesłany do wszystkich klientów. Pakiet zawiera ustawienia serwera. Klient po
otrzymaniu takiego pakietu wie, że serwer został zresetowany.

Budowa pakietu „Pakiet08Restart”:

08MkwotaStartowaK

Pierwsze dwa bajty (08) oznaczają typ polecenia. Po literze „M” zapisana jest wartość
początkowa pieniędzy. Litera „K” jest znakiem końca pakietu.

4.2.9 Wyświetlenie aktualnej lub zmiana na nową maksymalną

liczbę klientów

Serwer ma możliwość określenia maksymalnej liczby klientów. Jeśli liczba

klientów będzie równa liczbie maksymalnej liczby klientów to żaden nowy klient nie
będzie w stanie dostać się do gry. Polecenie umożliwiające wyświetlenie aktualnej

maksymalnej liczby klientów lub zmiana na nową wartość. Polecenie przyjmuje
opcjonalnie jeden argument oznaczający nową maksymalną liczbę klientów. Jeśli nie

podamy argumentu wyświetlona zostanie aktualna wartość.
Budowa polecenia:

/maxclients [maksLiczbaKlientow]

Dokonana zmiana wartości zostaje wprowadzona dopiero po dokonaniu restartu

serwera za pomocą polecenia „/restart”.

7/9

background image

4.2.10

Wyświetlenie aktualnej lub zmiana na nową wartość

czasu na ruch

Serwer gry ma możliwość określenia czasu na ruch w rundzie. Runda może

zostać zakończona na dwa sposoby. Pierwszy sposób polega na zakończeniu stawiania
zakładów przez wszystkich graczy, natomiast drugi polega na minięciu czasu

przeznaczonego na zakłady. Polecenie umożliwia wyświetlenie aktualnej lub zmianę na
nową wartość czasu na ruch. Polecenie przyjmuje opcjonalnie jeden argument będący

nową wartością czasu na ruch. Jeśli argument nie zostanie podany serwer wyświetli
aktualną wartość.
Budowa polecenia:

/bettime [czasNaRuch]

5. Realizacja modułu

Okno aplikacji Ruletka:

Moduł wykorzystuje dolną część okna. W dolnej części okna znajduje się czat, za
pomocą którego możemy komunikować się z innymi graczami oraz wpisywać polecenia

serwerowe.
Moduł uruchamiany jest w momencie wpisania wiadomości, ze znakiem początkowym
„/”.

8/9

background image

6. Propozycje rozbudowy projektu

Projekt może zostać rozbudowany poprzez dodanie kolejnych poleceń. Każde

polecenie powinno posiadać odpowiadającą procedurę, która wykonuje działania
serwerowe. Dodatkowo możemy rozbudować o dodatkowe funkcjonalności istniejące

już polecenia.

7. Literatura

Ron Hitchens, „Java NIO”, First Edition, O’Reilly, 2002

javax.swing (Java Platform SE 7 ) - Oracle Documentation
http://docs.oracle.com/javase/7/docs/api/java/nio/package-summary.html

java.awt (Java Platform SE 7 ) - Oracle Documentation

http://docs.oracle.com/javase/7/docs/api/java/awt/package-summary.html

9/9


Document Outline


Wyszukiwarka

Podobne podstrony:
GAITC Dokumentacja projektu
Wykład 3 Dokumentacja projektowa i STWiOR
DU202poz2072 Szczegółowy zakres i forma dokumentacji projektowej
Tomaszewicz,projektowanie urbanistyczne, DOKUMENTACJA PROJEKTOWA NORMY I PRZEPISY PRAWNE W PROJEKTOW
Rozp w sprawie geodezyjnej ewidencji sieci uzbrojenia terenu oraz zespołów uzgadniania dokumentacji
wniosek o koordynacje dokumentacji projektowej
50 w sprawie geodezyjnej ewidencji sieci uzbrojenia terenu oraz zespołów uzgadniania dokumentacji pr
dokumentacja projektowa
Rodzaje dokumentacji projektowych Etapy ich powstawania
DOKUMENTACJA PROJEKTOWO-BUDOWLANA, Podstawy projektowania inżynierskiego
Protokół odbioru dokumentacji projektowej, BUDOWNICTWO, potrzebne druki
Dokumentacyjna Projektowanie 2
Programowanie obiektowe dokumentacja projektu

więcej podobnych podstron