diff options
Diffstat (limited to 'src/net')
| -rw-r--r-- | src/net/client.c | 16 | ||||
| -rw-r--r-- | src/net/client.h | 1 | ||||
| -rw-r--r-- | src/net/comm.c | 6 | ||||
| -rw-r--r-- | src/net/comm.h | 5 | ||||
| -rw-r--r-- | src/net/server.c | 20 | ||||
| -rw-r--r-- | src/net/server.h | 1 |
6 files changed, 47 insertions, 2 deletions
diff --git a/src/net/client.c b/src/net/client.c index bcbaf9a..73d889a 100644 --- a/src/net/client.c +++ b/src/net/client.c @@ -124,6 +124,22 @@ bool client_parse_initial_stacks(const msg_t *m) return true; } +bool client_parse_selected_card_all(const msg_t *m) +{ + assert(m != NULL); + assert(m->hdr.payload_length % 2 == 0); // payload: n times id+card + + data_store* ds = datamodel(); + for(int i=0; i<m->hdr.payload_length; i+=2) + { + uint8_t pid = m->payload[i]; + pnoc_t* pnoc = get_pnoc_from_playerid(&ds->players, pid); + pnoc->open_card = m->payload[i+1]; + } + + return true; +} + void client_prep_hello(msg_t *m) { data_store* ds = datamodel(); diff --git a/src/net/client.h b/src/net/client.h index 918b98f..56b9839 100644 --- a/src/net/client.h +++ b/src/net/client.h @@ -15,5 +15,6 @@ 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); bool client_parse_initial_stacks(const msg_t *m); +bool client_parse_selected_card_all(const msg_t *m); #endif // OXEN_CLIENT_H diff --git a/src/net/comm.c b/src/net/comm.c index 042cb00..ab9f34b 100644 --- a/src/net/comm.c +++ b/src/net/comm.c @@ -44,6 +44,9 @@ bool net_recv(const int sock, const msg_type_t type) case msg_type_selected_card: result = server_parse_selected_card(&m); break; + case msg_type_selected_card_all: + result = client_parse_selected_card_all(&m); + break; case msg_type_selected_stack_c: result = server_parse_selected_stack(&m); break; @@ -91,6 +94,9 @@ bool net_send(const int sock, const msg_type_t type, const void *data) case msg_type_initial_stacks: server_prep_initial_stacks(&m); break; + case msg_type_selected_card_all: + server_prep_selected_card_all(&m); + break; default: printf("net_send: Unknown message type %d given\n", type); exit(EXIT_FAILURE); diff --git a/src/net/comm.h b/src/net/comm.h index c7174ff..0cc5cd2 100644 --- a/src/net/comm.h +++ b/src/net/comm.h @@ -20,8 +20,9 @@ typedef enum msg_type_deal_hand = 0x2, msg_type_initial_stacks = 0x3, msg_type_selected_card = 0x4, - msg_type_selected_stack_c = 0x5, - msg_type_selected_stack_s = 0x6, + msg_type_selected_card_all = 0x5, + msg_type_selected_stack_c = 0x6, + msg_type_selected_stack_s = 0x7, } msg_type_t; // Header format diff --git a/src/net/server.c b/src/net/server.c index b0cd5e2..c5a0cc1 100644 --- a/src/net/server.c +++ b/src/net/server.c @@ -205,3 +205,23 @@ void server_prep_initial_stacks(msg_t *m) m->hdr.payload_length = NUM_TABLE_STACKS; } + +void server_prep_selected_card_all(msg_t *m) +{ + uint8_t pos = 0; + data_store* ds = datamodel(); + + m->hdr.type = msg_type_selected_card_all; + + for(int i=0; i<MAX_PLAYERS; i++) + { + pnoc_t* pnoc = &ds->players.players[i]; + if(pnoc->player_id == 0) // invalid player + continue; + m->payload[pos++] = pnoc->player_id; + m->payload[pos++] = pnoc->open_card; + } + + m->hdr.payload_length = pos; +} + diff --git a/src/net/server.h b/src/net/server.h index 196700c..8c2d195 100644 --- a/src/net/server.h +++ b/src/net/server.h @@ -22,6 +22,7 @@ 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); void server_prep_initial_stacks(msg_t *m); +void server_prep_selected_card_all(msg_t *m); bool server_parse_hello(const msg_t *m); bool server_parse_selected_card(const msg_t *m); |
