summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorReiner Herrmann <reiner@reiner-h.de>2011-01-23 19:26:59 +0100
committerReiner Herrmann <reiner@reiner-h.de>2011-01-23 19:26:59 +0100
commitfff390715fff73f05639d3e5f96612a5a4fa82e8 (patch)
treea703da26082e974f2f07b4af8dafb9904075b7ee /src
parent6d306058415fec04f5e56421af1d95abb4620767 (diff)
adapt player_list receive function to data store
Diffstat (limited to 'src')
-rw-r--r--src/game.c3
-rw-r--r--src/net.c4
-rw-r--r--src/net.h9
-rw-r--r--src/net_client.c30
-rw-r--r--src/net_server.c6
5 files changed, 28 insertions, 24 deletions
diff --git a/src/game.c b/src/game.c
index 7d4f666..0da39e4 100644
--- a/src/game.c
+++ b/src/game.c
@@ -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();
diff --git a/src/net.c b/src/net.c
index 8540df5..f3945a0 100644
--- a/src/net.c
+++ b/src/net.c
@@ -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;
diff --git a/src/net.h b/src/net.h
index bebbc6f..52bb855 100644
--- a/src/net.h
+++ b/src/net.h
@@ -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;*/