Difference between revisions of "LU-LKP-B10:PD client server"
|  (New page: 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...) |  (→message.h - konstantes) | ||
| (6 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
| {{TocRight}} | |||
| Uzdevums - izstrādāt koncepciju un arhitektūru klienta - servera sistēmai, kas realizē daudzlietotāju vidi datorspēlei. | Uzdevums - izstrādāt koncepciju un arhitektūru klienta - servera sistēmai, kas realizē daudzlietotāju vidi datorspēlei. | ||
| Line 7: | Line 8: | ||
| * Ferma | * Ferma | ||
| * Pilsētas simulators | * Pilsētas simulators | ||
| = Serveris =  | = Serveris =  | ||
| Line 20: | Line 22: | ||
| * apstrādājam automātiskos notikumus | * apstrādājam automātiskos notikumus | ||
| * Sūtam klientam atjaunotu informāciju | * 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. | |||
| Line 26: | Line 41: | ||
| Ir savs FIFO ar darbībām. | Ir savs FIFO ar darbībām. | ||
| Sūta serverim komandas | Sūta serverim komandas | ||
| = Direktorijas serveris = | |||
| Uztur informāciju par aktīvajiem serveriem: | |||
| * name | |||
| * ip | |||
| * port | |||
| * lastSeen | |||
| Line 32: | Line 56: | ||
| Client, Server: | Client, Server: | ||
| C=>S: darbības | * C=>S: darbības | ||
| S=>C: izmaiņas pasaulē | * S=>C: izmaiņas pasaulē | ||
| S=>C: tekošais pasaules stāvoklis | * S=>C: tekošais pasaules stāvoklis | ||
| S=>C: komandas | * S=>C: komandas | ||
| Autentifikācija notiek ar  | 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 ==== | |||
| {| border=1 cellspacing=0 cellpadding=4 | |||
| |- | |||
| ! Msg_type | |||
| ! Parm, type, size | |||
| ! Sagaidāmā atbilde | |||
| ! Komentāri, sūtītājs, saņēmējs. | |||
| |- | |||
| | PING (P) | |||
| |  | |||
| * uint4_t sec | |||
| * uint4_t usec | |||
| | PONG | |||
| | any-any | |||
| |- | |||
| | PONG (P+128) | |||
| |  | |||
| * uint4_t sec | |||
| * uint4_t usec | |||
| |  | |||
| | any-any | |||
| |- | |||
| | REGSERVER (R) | |||
| |  | |||
| * uint4_t ip | |||
| * uint2_t port | |||
| * MAGIC_SIZE magic | |||
| |  | |||
| |  | |||
| |- | |||
| | REGSERVERREPLY (R+128) | |||
| |  | |||
| * | |||
| |  | |||
| |  | |||
| |- | |||
| | REGCLIENT (L) | |||
| |  | |||
| * | |||
| |  | |||
| |  | |||
| |- | |||
| | REGCLIENTREPLY (L+128) | |||
| |  | |||
| * | |||
| |  | |||
| |  | |||
| |- | |||
| | DIRINFO (D) | |||
| |  | |||
| * | |||
| |  | |||
| |  | |||
| |- | |||
| | DIRINFOREPLY (D+128) | |||
| |  | |||
| * | |||
| |  | |||
| |  | |||
| |- | |||
| | X() | |||
| |  | |||
| * | |||
| |  | |||
| |  | |||
| |- | |||
| |} | |||
| = Problēmas = | = Problēmas = | ||
| Line 44: | Line 177: | ||
| Drošība, godīgums | Drošība, godīgums | ||
| Klientu autentifikācija un identifikācija | |||
Latest revision as of 18:28, 21 December 2010
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
