From 5ab5af3b1472fe93eb164f5bbece798a402eea65 Mon Sep 17 00:00:00 2001 From: Mario Kilies Date: Mon, 24 Jan 2011 14:41:52 +0100 Subject: Second part of huge refactoring of networking related code. --- src/net/client.c | 34 ++++++++++++++++++---------------- src/net/client.h | 8 +++++--- src/net/comm.c | 12 ++++++------ src/net/server.c | 24 ++++++++++++++---------- src/net/server.h | 8 ++++---- 5 files changed, 47 insertions(+), 39 deletions(-) (limited to 'src/net') diff --git a/src/net/client.c b/src/net/client.c index 46b4ec3..bcbaf9a 100644 --- a/src/net/client.c +++ b/src/net/client.c @@ -62,23 +62,23 @@ int client_connect_server(const char* host, const char* port) return sock; } -bool client_parse_player_list(const uint8_t* payload, const uint8_t data_len) +bool client_parse_player_list(const msg_t *m) { - assert(payload != NULL); + assert(m != NULL); data_store* ds = datamodel(); uint32_t pos = 0; - ds->players.count = payload[pos++]; + ds->players.count = m->payload[pos++]; // read usernames from buffer for(int i=0; iplayers.count; i++) { uint8_t namelen; - ds->players.players[i].player_id = payload[pos++]; - namelen = payload[pos++]; + ds->players.players[i].player_id = m->payload[pos++]; + namelen = m->payload[pos++]; assert(namelen <= MAX_PLAYER_NAME_LENGTH); - strncpy(ds->players.players[i].player_name, (const char*) payload+pos, namelen); + strncpy(ds->players.players[i].player_name, (const char*) m->payload+pos, namelen); ds->players.players[i].player_name[namelen] = '\0'; pos += namelen; } @@ -86,38 +86,40 @@ bool client_parse_player_list(const uint8_t* payload, const uint8_t data_len) return true; } -bool client_parse_deal_hand(const uint8_t* payload, const uint8_t payload_len) +bool client_parse_deal_hand(const msg_t *m) { - assert(payload != NULL); - assert(payload_len == MAX_HAND_CARDS); // deal_cards packet have fixed size + assert(m != NULL); + assert(m->hdr.payload_length == MAX_HAND_CARDS); // deal_cards packet have fixed size data_store* ds = datamodel(); for(int i=0; ihand.cards[i] = payload[i]; + ds->hand.cards[i] = m->payload[i]; return true; } -bool client_parse_selected_stack(const uint8_t* payload, const uint8_t payload_len) +bool client_parse_selected_stack(const msg_t *m) { - assert(payload != NULL && payload_len == 1); + assert(m != NULL); + assert(m->hdr.payload_length == 1); data_store* ds = datamodel(); - ds->stack_index = payload[0]; + ds->stack_index = m->payload[0]; assert(ds->stack_index <= NUM_TABLE_STACKS); return true; } -bool client_parse_initial_stacks(const uint8_t* payload, const uint8_t payload_len) +bool client_parse_initial_stacks(const msg_t *m) { - assert(payload != NULL && payload_len == NUM_TABLE_STACKS); + assert(m != NULL); + assert(m->hdr.payload_length == NUM_TABLE_STACKS); data_store* ds = datamodel(); for(int i=0; itable_stacks.stacks[i].cards[0] = payload[i]; + ds->table_stacks.stacks[i].cards[0] = m->payload[i]; return true; } diff --git a/src/net/client.h b/src/net/client.h index deda2c0..29f9720 100644 --- a/src/net/client.h +++ b/src/net/client.h @@ -6,11 +6,13 @@ #include "comm.h" int client_connect_server(const char* host, const char* port); + 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_player_list(const uint8_t* payload, const uint8_t data_len); -bool client_parse_deal_hand(const uint8_t* payload, const uint8_t payload_len); -bool client_parse_selected_stack(const uint8_t* payload, const uint8_t payload_len); + +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); #endif // OXEN_CLIENT_H diff --git a/src/net/comm.c b/src/net/comm.c index bd078da..0cb6233 100644 --- a/src/net/comm.c +++ b/src/net/comm.c @@ -30,26 +30,26 @@ bool net_recv(const int sock, const msg_type_t type) switch(type) { case msg_type_hello: - result = server_parse_hello(m.payload, m.hdr.payload_length); + result = server_parse_hello(&m); break; case msg_type_start_game: - result = client_parse_player_list(m.payload, m.hdr.payload_length); + result = client_parse_player_list(&m); break; case msg_type_deal_hand: - result = client_parse_deal_hand(m.payload, m.hdr.payload_length); + result = client_parse_deal_hand(&m); break; case msg_type_initial_stacks: printf("not yet implemented: msg_type_initial_stacks\n"); exit(EXIT_FAILURE); break; case msg_type_selected_card: - result = server_parse_selected_card(m.payload, m.hdr.payload_length); + result = server_parse_selected_card(&m); break; case msg_type_selected_stack_c: - result = server_parse_selected_stack(m.payload, m.hdr.payload_length); + result = server_parse_selected_stack(&m); break; case msg_type_selected_stack_s: - result = client_parse_selected_stack(m.payload, m.hdr.payload_length); + result = client_parse_selected_stack(&m); break; default: printf("net_recv: Unknown message type %d received!\n", type); diff --git a/src/net/server.c b/src/net/server.c index 6154f98..1e35efd 100644 --- a/src/net/server.c +++ b/src/net/server.c @@ -107,9 +107,11 @@ void server_get_players(int serversock, socket_list_t* client_socks, const uint8 * @param[in] sock Socket to use * @return Username of client */ -bool server_parse_hello(const uint8_t* payload, const uint8_t payload_len) +bool server_parse_hello(const msg_t *m) { - assert(payload != NULL && payload_len < MAX_PLAYER_NAME_LENGTH && payload_len > 0); + assert(m != NULL); + assert(m->hdr.payload_length > 0); + assert(m->hdr.payload_length < MAX_PLAYER_NAME_LENGTH); data_store* ds = datamodel(); @@ -117,31 +119,33 @@ bool server_parse_hello(const uint8_t* payload, const uint8_t payload_len) { if(strlen(ds->players.players[i].player_name) > 0) // search for first empty (not yet assigned) slot continue; - memcpy(ds->players.players[i].player_name, payload, payload_len); - ds->players.players[i].player_name[payload_len] = '\0'; + memcpy(ds->players.players[i].player_name, m->payload, m->hdr.payload_length); + ds->players.players[i].player_name[m->hdr.payload_length] = '\0'; } return true; } -card* server_parse_selected_card(const uint8_t* payload, const uint8_t payload_len) +card* server_parse_selected_card(const msg_t *m) { - assert(payload != NULL && payload_len == 1); + assert(m != NULL); + assert(m->hdr.payload_length == 1); card* c = malloc(sizeof(card)); assert(c != NULL); - *c = payload[0]; + *c = m->payload[0]; return c; } -uint8_t* server_parse_selected_stack(const uint8_t* payload, const uint8_t payload_len) +uint8_t* server_parse_selected_stack(const msg_t *m) { - assert(payload != NULL && payload_len == 1); + assert(m != NULL); + assert(m->hdr.payload_length == 1); uint8_t* index = malloc(sizeof(uint8_t)); assert(index != NULL); - *index = payload[0]; + *index = m->payload[0]; return index; } diff --git a/src/net/server.h b/src/net/server.h index 7856cee..9d7dcf5 100644 --- a/src/net/server.h +++ b/src/net/server.h @@ -17,13 +17,13 @@ typedef struct int server_start(const char* port); void server_get_players(int serversock, socket_list_t* client_socks, const uint8_t count); -bool server_parse_hello(const uint8_t* payload, const uint8_t payload_len); -card* server_parse_selected_card(const uint8_t* payload, const uint8_t payload_len); -uint8_t* server_parse_selected_stack(const uint8_t* payload, const uint8_t payload_len); - 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); +bool server_parse_hello(const msg_t *m); +card* server_parse_selected_card(const msg_t *m); +uint8_t* server_parse_selected_stack(const msg_t *m); + #endif // OXEN_SERVER_H -- cgit v1.2.3