From 49a31a58e1b77ed0d88c0271247d4f707cf8b641 Mon Sep 17 00:00:00 2001 From: Reiner Herrmann Date: Tue, 25 Jan 2011 14:36:47 +0100 Subject: implement part of state_client_play_cards(); added new message type: hello reply from server which notifies clients of their player-ids --- src/net/client.c | 13 ++++++++++++- src/net/client.h | 1 + src/net/comm.c | 10 ++++++++-- src/net/comm.h | 17 +++++++++-------- src/net/server.c | 7 +++++++ src/net/server.h | 1 + 6 files changed, 38 insertions(+), 11 deletions(-) (limited to 'src/net') diff --git a/src/net/client.c b/src/net/client.c index ae0c828..1768926 100644 --- a/src/net/client.c +++ b/src/net/client.c @@ -140,11 +140,22 @@ bool client_parse_selected_card_all(const msg_t *m) return true; } +bool client_parse_hello(const msg_t *m) +{ + assert(m != NULL); + assert(m->hdr.payload_length == 1); + + data_store_t *ds = data_store(); + ds->own_player_id = m->payload[0]; + + return true; +} + void client_prep_hello(msg_t *m) { data_store_t *ds = data_store(); uint8_t namelen = strlen(ds->nickname); - m->hdr.type = msg_type_hello; + m->hdr.type = msg_type_hello_c; memcpy(m->payload, ds->nickname, namelen); m->hdr.payload_length = namelen; } diff --git a/src/net/client.h b/src/net/client.h index 56b9839..b15e329 100644 --- a/src/net/client.h +++ b/src/net/client.h @@ -11,6 +11,7 @@ void client_prep_hello(msg_t *m); void client_prep_selected_card(msg_t *m); void client_prep_selected_stack(msg_t *m); +bool client_parse_hello(const msg_t *m); bool client_parse_player_list(const msg_t *m); bool client_parse_deal_hand(const msg_t *m); bool client_parse_selected_stack(const msg_t *m); diff --git a/src/net/comm.c b/src/net/comm.c index ab9f34b..000c96f 100644 --- a/src/net/comm.c +++ b/src/net/comm.c @@ -29,9 +29,12 @@ bool net_recv(const int sock, const msg_type_t type) switch(type) { - case msg_type_hello: + case msg_type_hello_c: result = server_parse_hello(&m); break; + case msg_type_hello_s: + result = client_parse_hello(&m); + break; case msg_type_start_game: result = client_parse_player_list(&m); break; @@ -73,9 +76,12 @@ bool net_send(const int sock, const msg_type_t type, const void *data) switch(type) { - case msg_type_hello: + case msg_type_hello_c: client_prep_hello(&m); break; + case msg_type_hello_s: + server_prep_hello(&m, data); + break; case msg_type_selected_card: client_prep_selected_card(&m); break; diff --git a/src/net/comm.h b/src/net/comm.h index 0cc5cd2..a014c6d 100644 --- a/src/net/comm.h +++ b/src/net/comm.h @@ -15,14 +15,15 @@ typedef enum { // Specify message type identifiers here - msg_type_hello = 0x0, - msg_type_start_game = 0x1, - msg_type_deal_hand = 0x2, - msg_type_initial_stacks = 0x3, - msg_type_selected_card = 0x4, - msg_type_selected_card_all = 0x5, - msg_type_selected_stack_c = 0x6, - msg_type_selected_stack_s = 0x7, + msg_type_hello_c = 0x0, + msg_type_hello_s = 0x1, + msg_type_start_game = 0x2, + msg_type_deal_hand = 0x3, + msg_type_initial_stacks = 0x4, + msg_type_selected_card = 0x5, + msg_type_selected_card_all = 0x6, + msg_type_selected_stack_c = 0x7, + msg_type_selected_stack_s = 0x8, } msg_type_t; // Header format diff --git a/src/net/server.c b/src/net/server.c index 2e186d0..7e9a111 100644 --- a/src/net/server.c +++ b/src/net/server.c @@ -173,6 +173,13 @@ void server_prep_start_game(msg_t *m) m->hdr.payload_length = pos; } +void server_prep_hello(msg_t *m, const player_list_entry_t* player) +{ + m->hdr.type = msg_type_hello_s; + m->payload[0] = player->player_id; + m->hdr.payload_length = 1; +} + void server_prep_selected_stack(msg_t *m) { data_store_t *ds = data_store(); diff --git a/src/net/server.h b/src/net/server.h index 3522e14..625f24f 100644 --- a/src/net/server.h +++ b/src/net/server.h @@ -18,6 +18,7 @@ typedef struct int server_start(const char* port); void server_get_players(int serversock, socket_list_t* client_socks, const uint8_t count); +void server_prep_hello(msg_t *m, const player_list_entry_t* player); void server_prep_start_game(msg_t *m); void server_prep_deal_hand(msg_t *m, const hand_t *h); void server_prep_selected_stack(msg_t *m); -- cgit v1.2.3