diff options
| author | Reiner Herrmann <reiner@reiner-h.de> | 2011-01-23 19:26:59 +0100 |
|---|---|---|
| committer | Reiner Herrmann <reiner@reiner-h.de> | 2011-01-23 19:26:59 +0100 |
| commit | fff390715fff73f05639d3e5f96612a5a4fa82e8 (patch) | |
| tree | a703da26082e974f2f07b4af8dafb9904075b7ee | |
| parent | 6d306058415fec04f5e56421af1d95abb4620767 (diff) | |
adapt player_list receive function to data store
| -rw-r--r-- | src/game.c | 3 | ||||
| -rw-r--r-- | src/net.c | 4 | ||||
| -rw-r--r-- | src/net.h | 9 | ||||
| -rw-r--r-- | src/net_client.c | 30 | ||||
| -rw-r--r-- | src/net_server.c | 6 |
5 files changed, 28 insertions, 24 deletions
@@ -256,9 +256,10 @@ void start_game(const bool servermode, const char* addr, const char* port) sleep(1); // TODO make sure server process is listening sock = client_connect_server(addr, port); - client_hello(sock, "nickname_client"); + client_hello(sock, "nickname1"); net_recv(sock, msg_type_start_game); net_recv(sock, msg_type_deal_cards); + net_recv(sock, msg_type_init_stacks); ui_init(); @@ -34,6 +34,10 @@ void *net_recv(int sock, msg_type_t type) case msg_type_deal_cards: result = client_recv_deal_cards(m.payload, m.hdr.payload_length); break; + case msg_type_init_stacks: + printf("not yet implemented: msg_type_init_stacks\n"); + exit(EXIT_FAILURE); + break; case msg_type_selected_card: result = server_recv_selected_card(m.payload, m.hdr.payload_length); break; @@ -17,9 +17,10 @@ typedef enum msg_type_hello = 0x0, msg_type_start_game = 0x1, msg_type_deal_cards = 0x2, - msg_type_selected_card = 0x3, - msg_type_selected_stack_c = 0x4, - msg_type_selected_stack_s = 0x5 + msg_type_init_stacks = 0x3, + msg_type_selected_card = 0x4, + msg_type_selected_stack_c = 0x5, + msg_type_selected_stack_s = 0x6 } msg_type_t; // Header format @@ -54,7 +55,7 @@ int client_connect_server(const char* host, const char* port); void client_hello(int sock, const char* username); void client_selected_card(int sock, const card c); void client_send_selected_stack(int sock, const uint8_t stackindex); -player_list* client_recv_player_list(const uint8_t* payload, const uint8_t data_len); +void* client_recv_player_list(const uint8_t* payload, const uint8_t data_len); hand_t *client_recv_deal_cards(const uint8_t* payload, const uint8_t payload_len); uint8_t* client_recv_selected_stack(const uint8_t* payload, const uint8_t payload_len); diff --git a/src/net_client.c b/src/net_client.c index e90e583..6b5fa60 100644 --- a/src/net_client.c +++ b/src/net_client.c @@ -9,6 +9,7 @@ #include "net.h" #include "player.h" #include "game.h" +#include "global.h" /** * Client side function; Send hello to server @@ -125,33 +126,28 @@ int client_connect_server(const char* host, const char* port) return sock; } -player_list* client_recv_player_list(const uint8_t* payload, const uint8_t data_len) +void* client_recv_player_list(const uint8_t* payload, const uint8_t data_len) { assert(payload != NULL); - player_list* players; + data_store* ds = datamodel(); uint32_t pos = 0; - players = create_playerlist(); - if(players == NULL) - { - printf("client_recv_player_list: Out of memory\n"); - exit(EXIT_FAILURE); - } - - players->count = payload[pos++]; + ds->players.count = payload[pos++]; // read usernames from buffer - for(int i=0; i<players->count; i++) + for(int i=0; i<ds->players.count; i++) { - /*uint8_t namelen = payload[pos++]; - players->names[i] = malloc(namelen+1); - memcpy(players->names[i], payload+pos, namelen); - players->names[i][namelen] = '\0'; - pos += namelen;*/ + uint8_t namelen; + 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); + ds->players.players[i].player_name[namelen] = '\0'; + pos += namelen; } - return players; + return NULL; // TODO return boolean (for success indication) } hand_t *client_recv_deal_cards(const uint8_t* payload, const uint8_t payload_len) diff --git a/src/net_server.c b/src/net_server.c index e8ecb4f..52dca17 100644 --- a/src/net_server.c +++ b/src/net_server.c @@ -127,7 +127,7 @@ void server_start_game(int* clients, const uint8_t clientcount, const player_lis uint8_t* buf; uint8_t usercount = players->count; uint32_t pos; - uint32_t buflen = 3 + usercount; // type + packetlen + usercount + (usercount * len) + uint32_t buflen = 3 + 2*usercount; // type + packetlen + usercount + (usercount * player_id) + (usercount * len) //for(int i=0; i<usercount; i++) // buflen += strlen(players->names[i]); @@ -145,7 +145,9 @@ void server_start_game(int* clients, const uint8_t clientcount, const player_lis // copy usernames with length to buffer for(int i=0; i<usercount; i++) { - /*uint8_t len = strlen(players->names[i]); + /* + buf[pos++] = i; // player_id + uint8_t len = strlen(players->names[i]); buf[pos++] = len; memcpy(buf+pos, players->names[i], len); pos += len;*/ |
