Difference between revisions of "LU-LKP-B10:PD client server"
(→Protokola komandas) |
(→Protokola komandas) |
||
Line 88: | Line 88: | ||
* params - char [0 - *] - atkarīgs no komandas |
* params - char [0 - *] - atkarīgs no komandas |
||
* FSTOP - char[1] = FSTOP |
* 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 ==== |
==== Ziņojumu tipi ==== |
||
Line 103: | Line 116: | ||
* uint4_t usec |
* uint4_t usec |
||
| PONG |
| PONG |
||
| |
| any-any |
||
|- |
|- |
||
| PONG (P+128) |
| PONG (P+128) |
||
Line 110: | Line 123: | ||
* uint4_t usec |
* uint4_t usec |
||
| |
| |
||
| |
| any-any |
||
|- |
|- |
||
| REGSERVER() |
| REGSERVER (R) |
||
| |
| |
||
* uint4_t ip |
* uint4_t ip |
||
Line 120: | Line 133: | ||
| |
| |
||
|- |
|- |
||
| REGSERVERREPLY (R+128) |
|||
| X() |
|||
| |
| |
||
* |
* |
||
Line 126: | Line 139: | ||
| |
| |
||
|- |
|- |
||
| |
| REGCLIENT (L) |
||
| |
| |
||
* |
* |
||
Line 132: | Line 145: | ||
| |
| |
||
|- |
|- |
||
| REGCLIENTREPLY (L+128) |
|||
| X() |
|||
| |
| |
||
* |
* |
||
Line 138: | Line 151: | ||
| |
| |
||
|- |
|- |
||
| |
| DIRINFO (D) |
||
| |
| |
||
* |
* |
||
Line 144: | Line 157: | ||
| |
| |
||
|- |
|- |
||
| DIRINFOREPLY (D+128) |
|||
| X() |
|||
| |
| |
||
* |
* |
Revision as of 18:27, 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
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