Difference between revisions of "LU-LKP-B10:PD client server"
(→message.h - konstantes) |
|||
(3 intermediate revisions by the same user not shown) | |||
Line 79: | Line 79: | ||
* Say text - broadcast text - client to all, or server to client. |
* 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 = |
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