Documentation
This commit is contained in:
+64
@@ -0,0 +1,64 @@
|
||||
# Protokół Komunikacyjny IPC
|
||||
|
||||
## Struktura Wiadomości
|
||||
|
||||
Wszystkie komunikaty opierają się na strukturze `msgbuf_t` zdefiniowanej w pliku `commands.h`.
|
||||
|
||||
```c
|
||||
typedef struct msgbuf {
|
||||
long mtype; // Typ wiadomości (Komenda)
|
||||
int stype; // Podtyp / Status
|
||||
char sender[16]; // ID/Nick nadawcy
|
||||
char command[16]; // ID celu, nazwa grupy lub inny argument
|
||||
char message[256]; // Treść wiadomości
|
||||
} msgbuf_t;
|
||||
```
|
||||
z
|
||||
### Pola
|
||||
* **mtype**: Enum określający główną akcję
|
||||
* **stype**: Używany do kodów statusu lub podkomend
|
||||
* **sender**: Unikalny identyfikator klienta inicjującego żądanie.
|
||||
* **command**: Metadane zależne od kontekstu (np. użytkownik docelowy dla wiadomości prywatnej, nazwa grupy dla żądania dołączenia).
|
||||
* **message**: Właściwa treść wiadomości czatu lub powiadomienia systemowego.
|
||||
|
||||
## Przebieg Połączenia
|
||||
|
||||
### 1. Nawiązywanie Połączenia i Logowanie
|
||||
1. **Inicjalizacja Serwera**: Serwer tworzy publiczną kolejkę komunikatów i zapisuje jej ID do znanego pliku (domyślnie `server_queue_id` w katalogu roboczym).
|
||||
2. **Inicjalizacja Klienta**: Klient odczytuje ID kolejki serwera i tworzy własną, prywatną kolejkę komunikatów.
|
||||
3. **Żądanie Logowania**:
|
||||
* Klient wysyła wiadomość `Login` na publiczną kolejkę serwera.
|
||||
* Treść zawiera ID Klienta oraz ID prywatnej kolejki Klienta.
|
||||
4. **Walidacja**:
|
||||
* Serwer sprawdza na danych wczytanych z pliku konfiguracyjnego, czy podane ID Klienta istnieje.
|
||||
* Serwer wysyła odpowiedź na prywatną kolejkę Klienta (Sukces lub Błąd).
|
||||
|
||||
## Komendy oraz sygnały
|
||||
|
||||
```c
|
||||
typedef enum {
|
||||
Message = 1,
|
||||
Login,
|
||||
Logout,
|
||||
Hearbeat,
|
||||
List,
|
||||
JoinGroup,
|
||||
LeaveGroup,
|
||||
Mute,
|
||||
Unmute,
|
||||
Signal,
|
||||
Inbox
|
||||
} Command_t;
|
||||
|
||||
typedef enum {
|
||||
ACK_ACCEPTED = 0,
|
||||
ACK_DELIVERED,
|
||||
ERR_UNKNOWN_COMMAND, // Błąd niepoprawnej komendy
|
||||
ERR_NOT_LOGGED_IN, // Błąd odmowy bez zalogowania
|
||||
ERR_ALREADY_LOGGED_IN, // Błąd logowania dla przy logoowaniu zalogowanego już użytkownika
|
||||
ERR_ALREADY_IN_GROUP,
|
||||
ERR_NOT_FOUND, // Błąd ogólny zwracany przy nieznalezieniu użytkownika/grupy
|
||||
ERR_ALREADY_MUTED,
|
||||
ERR_INVALID_FORMAT
|
||||
} Signal_t;
|
||||
```
|
||||
Reference in New Issue
Block a user