diff options
| author | Reiner Herrmann <reiner@reiner-h.de> | 2011-01-23 22:46:29 +0100 |
|---|---|---|
| committer | Reiner Herrmann <reiner@reiner-h.de> | 2011-01-23 22:46:29 +0100 |
| commit | 2bd0e560986c66406bae90ff44f2dd6d3fec17be (patch) | |
| tree | 29aa4b7cb1831d7781a1a75f1db8ee2850a2a7ac /src/net_client.c | |
| parent | fff390715fff73f05639d3e5f96612a5a4fa82e8 (diff) | |
added generic net_send function and adapted functions it is using
Diffstat (limited to 'src/net_client.c')
| -rw-r--r-- | src/net_client.c | 141 |
1 files changed, 58 insertions, 83 deletions
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 <unistd.h> #include <assert.h> #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; i<MAX_HAND_CARDS; i++) - { - h->cards[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; i<NUM_TABLE_STACKS; i++) + ds->table_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; } |
