- Klienci posiadają konto na serwerze.
- Każdy klient ma własnego bloga, na który może dodawać posty.
- Serwer zarządza blogami klientów
Komunikaty pomiędzy serwerem a klientem wymieniane są w formie tekstowej. Pojedynczy pakiet ma następującą budowę:
X Y ZZZZZZZZZ... END
gdzie:
X
- całkowita długość prawidłowo odebranego pakietu liczona od pierwszego znaku Y do końca komunikatuY
- komenda określająca żądanieZZZZZZZZ...
- dane składające się na zapytanie (w przypadku klienta) bądź odpowiedź (w przypadku serwera)END
- ciąg znaków oznaczający koniec komunikatu, /rn/rn/rn$$
Pola te są rozdzielone tabulatorem.
W odniesieniu do przykładu:
39\tLOGIN\tjanbonkowski@umcs.pl\tTestTest123#\t/rn/rn/rn$$
- 40 to liczba znaków licząc od
L
do ostatniego\t
. LOGIN
to żądanie wysyłane do serwerajanbonkowski@umcs.pl TestTest123#
to parametry żądania (tutaj login i hasło)
W przypadku wystąpienia błędu serwer powinien odpowiedzieć:
4 QUE?
- jeśli występuje niezgodność rozmiaru pakietu odebranego z zadeklarowaną, komunikat był za duży lub żądanie nie zostało rozpoznane12 IDENTIFY_PLS
- jeśli żądanie wymaga autentykacji ze strony użytkownika, a do niej nie doszło
Serwer po przetworzeniu każdego żądania odpowiada tym samym komunikatem, jednak przesłane parametry zostają zastąpione odpowiedzią na żądanie. W odniesieniu do przykładu:
39 LOGIN janbonkowski@umcs.pl TestTest123#
odpowiedź na żądanie może przyjąć jedną z dwóch postaci:
11 LOGIN OK 14
- gdy logowanie się powiedzie, 14 to przykładowe ID bloga zalogowanego użytkownika12 LOGIN FAILED
- gdy logowanie się nie powiedzie
Ogólny format opisu pakietu:
- Nazwa:
- Treść pakietu:
- Ilość parametrów:
- Opis parametru 1:
- Opis parametru 2:
- Opis parametru 3:
- ...
- Odpowiedź serwera:
- Opis odpowiedzi:
- Ilość parametrów odpowiedzi:
- Opis parametru 1:
- Opis parametru 2:
- Opis parametru 3:
- ...
- Nazwa: Pakiet tworzenia konta
- Treść pakietu:
REGISTER janbonkowski@umcs.pl TestTest123#
- Ilość parametrów: 2
- Opis parametru 1: string zawierający login tworzonego konta
- Opis parametru 2: string zawierający hasło tworzonego konta
- Odpowiedź serwera:
REGISTER OK
- Opis odpowiedzi: status utworzenia konta
- Ilość parametrów odpowiedzi: 1
- Opis parametru 1: string określający czy konto zostało utworzone pomyślnie (OK) czy wystąpił błąd (INVALID)
- Nazwa: Pakiet logowania
- Treść pakietu:
LOGIN janbonkowski@umcs.pl TestTest123#
- Ilość parametrów: 2
- Opis parametru 1: string zawierający login konta
- Opis parametru 2: string zawierający hasło konta
- Odpowiedź serwera:
LOGIN OK 14
- Opis odpowiedzi: zalogowano pomyślnie i przesłano ID bloga
- Ilość parametrów odpowiedzi: 2
- Opis parametru 1: string informujący o pomyślnym logowaniu
- Opis parametru 2: int będący ID bloga w systemie
- Odpowiedź serwera:
LOGIN FAILED INVALID
- Opis odpowiedzi: logowanie się nie powiodło z powodu niepoprawnych danych
- Ilość parametrów odpowiedzi: 2
- Opis parametru 1: string informujący o statusie logowania
- Opis parametru 2: string informujący o nieprawidłowych danych
- Odpowiedź serwera:
LOGIN FAILED LOCKED
- Opis odpowiedzi: logowanie się nie powiodło z powodu zablokowania konta
- Ilość parametrów odpowiedzi: 2
- Opis parametru 1: string informujący o statusie logowania
- Opis parametru 2: string informujący o zablokowaniu konta
- Odpowiedź serwera:
LOGIN FAILED LOGGED
- Opis odpowiedzi: logowanie się nie powiodło, gdyż konto jest w użyciu
- Ilość parametrów odpowiedzi: 2
- Opis parametru 1: string informujący o statusie logowania
- Opis parametru 2: string informujący o użytym koncie
- Nazwa: Pakiet pobierania listy blogów
- Treść pakietu:
DISPLAY_BLOGS
- Ilość parametrów: 0
- Odpowiedź serwera:
DISPLAY_BLOGS 1|Testowy Blog 2|Blog Programistyczny 3|Elektronika dla każdego ...
- Opis odpowiedzi: lista blogów na serwerze
- Ilość parametrów odpowiedzi: n
- Opis parametru 1: int określający ID bloga + string określający nazwę bloga. Nazwa bloga nie może zawierać tabulacji w nazwie i separatora pionowego |!
- Nazwa: Pakiet pobierania listy wpisów na blogu
- Treść pakietu:
DISPLAY_BLOG X
- Ilość parametrów: 1
- Opis parametru 1: int zawierający id bloga
- Odpowiedź serwera:
DISPLAY_BLOG 1|Powitanie 2|Kurs programowania 3|Czym są zmienne 4|Wyświetlanie danych w konsoli ...
- Opis odpowiedzi: lista wpisów na blogu
- Ilość parametrów odpowiedzi: n
- Opis parametru 1: int określający ID wpisu|string określający tytuł wpisu na blogu.
- Odpowiedź serwera:
DISPLAY_BLOG FAILED
- Opis odpowiedzi: nie można było pobrać listy wpisów na blogu, bo np. nie istnieje
- Ilość parametrów odpowiedzi: 1
- Opis parametru 1: string informujący o niepowodzeniu przy pobieraniu listy
- Nazwa: Pakiet dodawania wpisu do bloga
- Treść pakietu:
ADD_ENTRY To jest tytuł wpisu To jest treść wpisu
- Ilość parametrów: 2
- Opis parametru 1: tytuł wpisu
- Opis parametru 2: treść wpisu
- Odpowiedź serwera:
ADD_ENTRY OK 15
- Opis odpowiedzi: komunikat informujący o sukcesie dodawania wpisu i zawierający ID utworzonego wpisu
- Ilość parametrów odpowiedzi: 2
- Opis parametru 1: string określający sukces przy dodawaniu wpisu
- Opis parametru 2: int określający ID dodanego wpisu
- Odpowiedź serwera:
ADD_ENTRY INVALID TITLE
- Opis odpowiedzi: Tytuł był zbyt długi lub zawierał niedozwolone znaki
- Ilość parametrów odpowiedzi: 2
- Opis parametru 1: string informujący o niepowodzeniu przy dodawaniu treści na bloga
- Opis parametru 2: string informujący o błędzie w tytule
- Odpowiedź serwera:
ADD_ENTRY INVALID CONTENT
- Opis odpowiedzi: Treść była zbyt długa lub zawierała niedozwolone znaki
- Ilość parametrów odpowiedzi: 2
- Opis parametru 1: string informujący o niepowodzeniu przy dodawaniu treści na bloga
- Opis parametru 2: string informujący o błędzie w treści
- Nazwa: Pakiet pobierania wpisu na blogu
- Treść pakietu:
DISPLAY_ENTRY 1
- Ilość parametrów: 1
- Odpowiedź serwera:
DISPLAY_ENTRY 15 Tytuł notatki Treść notatki
- Opis odpowiedzi: odpowiedź zawierająca ID notatki, jej tytuł i treść
- Ilość parametrów odpowiedzi: 3
- Opis parametru 1: int określający ID wpisu
- Opis parametru 2: string określający tytuł wpisu
- Opis parametru 3: string określający treść wpisu
- Odpowiedź serwera:
DISPLAY_ENTRY FAILED NOTEXIST
- Opis odpowiedzi: Wpis nie istnieje
- Ilość parametrów odpowiedzi: 2
- Opis parametru 1: string informujący o błędzie
- Opis parametru 2: string informujący o braku posta
- Nazwa: Pakiet usuwania wpisu z bloga
- Treść pakietu:
DELETE_ENTRY 15
- Ilość parametrów: 1
- Opis parametru 1: ID usuwanego wpisu
- Odpowiedź serwera:
DELETE_ENTRY OK 15
- Opis odpowiedzi: komunikat informujący o sukcesie usuwania wpisu i zawierający ID usuniętego wpisu
- Ilość parametrów odpowiedzi: 2
- Opis parametru 1: string określający sukces przy usuwaniu wpisu
- Opis parametru 2: int określający ID usuniętego wpisu
- Odpowiedź serwera:
DELETE_ENTRY FAILED NOTEXIST
- Opis odpowiedzi: wpis o podanym ID nie istnieje
- Ilość parametrów odpowiedzi: 1
- Opis parametru 1: string informujący o niepowodzeniu przy usuwaniu wpisu
- Odpowiedź serwera:
DELETE_ENTRY FAILED NOTOWNER
- Opis odpowiedzi: Użytkownik nie jest właścicielem bloga, z którego próbuje usunąć wpis
- Ilość parametrów odpowiedzi: 1
- Opis parametru 1: string informujący o niepowodzeniu przy usuwaniu treści z nie swojego bloga
- Nazwa: Pakiet wylogowania
- Treść pakietu:
THX_BYE
- Ilość parametrów: 0
- Odpowiedź serwera:
THX_BYE
- Opis odpowiedzi: komunikat informujący o pomyślnym wylogowaniu
- Ilość parametrów odpowiedzi: 0
- Nazwa: Pakiet zmiany nazwy bloga
- Treść pakietu:
CHANGE_BLOG_NAME Id Nowa nazwa bloga
- Ilość parametrów: 2
- Opis parametru 1: id bloga którego nazwa ma zostać zmieniona
- Opis parametru 2: string zawierający nową nazwę bloga
- Odpowiedź serwera:
CHANGE_BLOG_NAME OK
- Opis odpowiedzi: komunikat informujący o pomyślnej zmianie nazwy bloga
- Ilość parametrów odpowiedzi: 1
- Odpowiedź serwera:
CHANGE_BLOG_NAME FAILED
- Opis odpowiedzi: komunikat informujący o niepomyślnej zmianie nazwy bloga z powodu nieprawidłowości w nowej nazwie
- Ilość parametrów odpowiedzi: 1
- Odpowiedź serwera:
CHANGE_BLOG_NAME NOTOWNER
- Opis odpowiedzi: komunikat informujący o niepomyślnej zmianie nazwy bloga ze względu na nie bycie jego właścicielem
- Ilość parametrów odpowiedzi: 1
- Opis parametru 1: string informujący o niepowodzeniu przy zmianie nazwy bloga ze względu na nie bycie jego właścicielem
- Nazwa: Pakiet zakończenia transmisji
- Treść pakietu:
EOT
- Ilość parametrów: 0
- Odpowiedź serwera: brak
- Nazwa: Pakiet benchmarkowy połączenia
- Treść pakietu:
PING
- Ilość parametrów: 0
- Odpowiedź serwera:
PONG
- Ilość parametrów odpowiedzi: 0
Pakiety używane w komunikacji są szyfrowane algorytmem AES. Szyfrowanie można wyłączyć zakomentowując na górze plików ConnectionService (w kliencie) i ClientData (w serwerze) linijkę #define IMPROVED_PACKET_ENCRYPTION
.