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
message.h - konstantes =
#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