Difference between revisions of "LU-LKP-B10:PD client server"

From DiLab
Jump to: navigation, search
(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 19: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)
  • 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

Sinhronizācija

Drošība, godīgums

Klientu autentifikācija un identifikācija