ShirkeJR / Blog-Web-Socket

C# begins... WebSockets, server, students project

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Blog

Założenia

  • 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

Opis protokołu

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 komunikatu
  • Y - komenda określająca żądanie
  • ZZZZZZZZ... - 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 serwera
  • janbonkowski@umcs.pl TestTest123# to parametry żądania (tutaj login i hasło)

Komunikaty


Serwer

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 rozpoznane
  • 12 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żytkownika
  • 12 LOGIN FAILED - gdy logowanie się nie powiedzie

Klient

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

Szyfrowanie

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.

About

C# begins... WebSockets, server, students project


Languages

Language:C# 99.0%Language:TSQL 1.0%