From 2bd0e560986c66406bae90ff44f2dd6d3fec17be Mon Sep 17 00:00:00 2001 From: Reiner Herrmann Date: Sun, 23 Jan 2011 22:46:29 +0100 Subject: added generic net_send function and adapted functions it is using --- src/net_client.c | 141 +++++++++++++++++++++++-------------------------------- 1 file changed, 58 insertions(+), 83 deletions(-) (limited to 'src/net_client.c') diff --git a/src/net_client.c b/src/net_client.c index 6b5fa60..e742e7a 100644 --- a/src/net_client.c +++ b/src/net_client.c @@ -7,73 +7,9 @@ #include #include #include "net.h" +#include "global.h" #include "player.h" #include "game.h" -#include "global.h" - -/** - * Client side function; Send hello to server - * @param[in] sock Socket to use - * @param[in] username Username of player - */ -void client_hello(int sock, const char* username) -{ - assert(username != NULL); - - uint8_t* buf; - uint8_t namelen = strlen(username); - - buf = malloc(namelen+2); // type + len + username - if(buf == NULL) - { - printf("client_hello: Out of memory\n"); - exit(EXIT_FAILURE); - } - - buf[NET_MSG_OFFSET_TYPE] = msg_type_hello; - buf[NET_MSG_OFFSET_PAYLOAD_LENGTH] = namelen; - memcpy(buf+NET_MSG_OFFSET_PAYLOAD, username, namelen); - - send(sock, buf, namelen+2, 0); - - free(buf); -} - -/** - * Client side function; Send selected card to server - * @param[in] sock Socket to use - * @param[in] c Selected card - */ -void client_selected_card(int sock, const card c) -{ - assert(c >= MIN_CARD && c <= MAX_CARD); - - uint8_t buf[3]; - - buf[NET_MSG_OFFSET_TYPE] = msg_type_selected_card; - buf[NET_MSG_OFFSET_PAYLOAD_LENGTH] = 1; - buf[NET_MSG_OFFSET_PAYLOAD] = c; - - send(sock, buf, 3, 0); -} - -/** - * Client side function; Send selected table stack to server - * @param[in] sock Socket to use - * @param[in] stackindex Index of selected stack - */ -void client_send_selected_stack(int sock, const uint8_t stackindex) -{ - assert(stackindex <= NUM_TABLE_STACKS); - - uint8_t buf[3]; - - buf[NET_MSG_OFFSET_TYPE] = msg_type_selected_stack_c; - buf[NET_MSG_OFFSET_PAYLOAD_LENGTH] = 1; - buf[NET_MSG_OFFSET_PAYLOAD] = stackindex; - - send(sock, buf, 3, 0); -} /** * Client side function; connects to specified host:port @@ -126,7 +62,7 @@ int client_connect_server(const char* host, const char* port) return sock; } -void* client_recv_player_list(const uint8_t* payload, const uint8_t data_len) +bool client_recv_player_list(const uint8_t* payload, const uint8_t data_len) { assert(payload != NULL); @@ -142,40 +78,79 @@ void* client_recv_player_list(const uint8_t* payload, const uint8_t data_len) ds->players.players[i].player_id = payload[pos++]; namelen = payload[pos++]; assert(namelen <= MAX_PLAYER_NAME_LENGTH); - strncpy(ds->players.players[i].player_name, payload+pos, namelen); + strncpy(ds->players.players[i].player_name, (const char*) payload+pos, namelen); ds->players.players[i].player_name[namelen] = '\0'; pos += namelen; } - return NULL; // TODO return boolean (for success indication) + return true; } -hand_t *client_recv_deal_cards(const uint8_t* payload, const uint8_t payload_len) +bool client_recv_deal_cards(const uint8_t* payload, const uint8_t payload_len) { assert(payload != NULL); - - hand_t *h = malloc(sizeof(hand_t)); - assert(payload_len == MAX_HAND_CARDS); // deal_cards packet have fixed size + data_store* ds = datamodel(); + for(int i=0; icards[i] = payload[i]; - } + ds->hand.cards[i] = payload[i]; - return h; + return true; } -uint8_t* client_recv_selected_stack(const uint8_t* payload, const uint8_t payload_len) +bool client_recv_selected_stack(const uint8_t* payload, const uint8_t payload_len) { - assert(payload != NULL); - assert(payload_len == 1); + assert(payload != NULL && payload_len == 1); + + data_store* ds = datamodel(); + ds->stack_index = payload[0]; + + assert(ds->stack_index <= NUM_TABLE_STACKS); + + return true; +} + +bool client_recv_initial_stacks(const uint8_t* payload, const uint8_t payload_len) +{ + assert(payload != NULL && payload_len == NUM_TABLE_STACKS); + + data_store* ds = datamodel(); + for(int i=0; itable_stacks.stacks[i].cards[0] = payload[i]; + + return true; +} + +uint8_t client_send_hello(uint8_t* payload, const uint8_t payload_len) +{ + data_store* ds = datamodel(); + uint8_t namelen = strlen(ds->nickname); + + memcpy(payload, ds->nickname, namelen); + + return namelen; +} + +uint8_t client_send_selected_card(uint8_t* payload, const uint8_t payload_len) +{ + data_store* ds = datamodel(); + card c = ds->selected_card; + + assert(c >= MIN_CARD && c <= MAX_CARD); + + payload[0] = c; - uint8_t* stackindex = malloc(sizeof(uint8_t)); - *stackindex = payload[0]; + return 1; +} + +uint8_t client_send_selected_stack(uint8_t* payload, const uint8_t payload_len) +{ + data_store* ds = datamodel(); - assert(*stackindex <= NUM_TABLE_STACKS); + payload[0] = ds->stack_index; + assert(ds->stack_index <= NUM_TABLE_STACKS); - return stackindex; + return 1; } -- cgit v1.2.3