LU-LKP-B10:PD client server
Uzdevums - izstrādāt koncepciju un arhitektūru klienta - servera sistēmai, kas realizē daudzlietotāju vidi datorspēlei.
Diskusiju piezīmes.
Iespējamie spēles konteksti:
- Ceļošana kosmosā
 - Ferma
 - Pilsētas simulators
 
Serveris
Asinhroni saņemam klienta komandas un ieliekam FIFO buferī.
Ir pasaules karte ar AxB šūnām. Katrā šūnā var būt:
- objekta kods
 - norāde uz sarakstu ar objektiem
 
Ir dzīves cikls. tajā:
- apstrādājam FIFO ar klientu komandām
 - apstrādājam automātiskos notikumus
 - Sūtam klientam atjaunotu informāciju
 
Uztur informāciju par klientiem:
- Name
 - IP
 - port
 - lastSeen
 - X,Y
 - alive
 - score
 - ...
 
Konfigurācijas fails game-config define spēles noteikumus. Konfigurācijas apraksta sintaksei jābūt savietojamai ar citiem serveriem.
Klients
Ir savs FIFO ar darbībām. Sūta serverim komandas
Direktorijas serveris
Uztur informāciju par aktīvajiem serveriem:
- name
 - ip
 - port
 - lastSeen
 
Protokols
Client, Server:
- C=>S: darbības
 - S=>C: izmaiņas pasaulē
 - S=>C: tekošais pasaules stāvoklis
 - S=>C: komandas
 
Autentifikācija notiek ar "magic number". Alternatīvi autentifikācija notiek ar MD5.
Protokola komandas
Komanda, parametri un dati
- Ping
 - DirInfo - atgriež informāciju par serveriem no direktorijas
 - RegSer Name, ip,port, magic
 - RegClient Name, ip,port, magic
 - GetMap x,y,h,w
 - Go direction(degrees)
 - GetStat - serveris atgriež klienta statusa info
 - Stat - serveris sūta klienta statusu serverī (alive, dead, restart...)
 - Use tool parameters
 - GameInfo - spēles noteikumi, rīki un iespējas
 - Quit
 - Say text - broadcast text - client to all, or server to client.
 
Datu paketes struktūra
Katram ziņojumam ir sekojoša struktūra:
- FSTART - char[1] = FSTART
 - msg_id - char[ MSG_ID_SIZE ]
 - msg_type - char[ MSG_TYPE_SIZE ]
 - params - char [0 - *] - atkarīgs no komandas
 - FSTOP - char[1] = FSTOP
 
Pakešu datu tipi un konstantes
message.h
#define FSTART 0xff #define FSTOP 0xff #define MSG_ID_SIZE 2 #define MSG_TYPE_SIZE 1 #define MAGIC_SIZE 1 #define MAGIC_ID '?' #define SERVER_NAME_MAX 64 #define CLIENT_NAME_MAX 64
Ziņojumu tipi
| Msg_type | Parm, type, size | Sagaidāmā atbilde | Komentāri, sūtītājs, saņēmējs. | 
|---|---|---|---|
| PING (P) | 
  | 
PONG | any-any | 
| PONG (P+128) | 
  | 
any-any | |
| REGSERVER (R) | 
  | 
||
| REGSERVERREPLY (R+128) | 
 | 
||
| REGCLIENT (L) | 
 | 
||
| REGCLIENTREPLY (L+128) | 
 | 
||
| DIRINFO (D) | 
 | 
||
| DIRINFOREPLY (D+128) | 
 | 
||
| X() | 
 | 
Problēmas
Sinhronizācija
Drošība, godīgums
Klientu autentifikācija un identifikācija