summaryrefslogtreecommitdiff
path: root/src/net_client.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/net_client.c')
-rw-r--r--src/net_client.c141
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;
}