Documentation

This commit is contained in:
2026-01-26 23:55:41 +01:00
parent 20df30ace8
commit 2576a50108
4 changed files with 128 additions and 2 deletions
+64
View File
@@ -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;
```