Difference between revisions of "LU-LKP-B10:PD client server"
(→message.h - konstantes) |
|||
(4 intermediate revisions by the same user not shown) | |||
Line 22: | 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 28: | 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 34: | 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 "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 ==== |
|||
Autentifikācija notiek ar MD5. |
|||
{| 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 = |
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