summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/net.c3
-rw-r--r--src/net.h5
-rw-r--r--src/net_client.c19
-rw-r--r--src/net_server.c11
4 files changed, 37 insertions, 1 deletions
diff --git a/src/net.c b/src/net.c
index 44c9e9a..9897224 100644
--- a/src/net.c
+++ b/src/net.c
@@ -34,6 +34,9 @@ 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_selected_card:
+ result = server_recv_selected_card(m.payload, m.hdr.payload_length);
+ break;
default:
printf("net_recv: Unknown message type %d received!\n", type);
exit(EXIT_FAILURE);
diff --git a/src/net.h b/src/net.h
index 1ef87ff..aca2423 100644
--- a/src/net.h
+++ b/src/net.h
@@ -15,7 +15,8 @@ typedef enum
// Specify message type identifiers here
msg_type_hello = 0x0,
msg_type_start_game = 0x1,
- msg_type_deal_cards = 0x2
+ msg_type_deal_cards = 0x2,
+ msg_type_selected_card = 0x3
} msg_type_t;
// Header format
@@ -41,10 +42,12 @@ int* server_get_players(int serversock, const uint8_t count);
void server_start_game(int* clients, const uint8_t clientcount, const player_list* players);
void server_deal_cards(int sock, const hand_t *h);
char* server_recv_hello(const uint8_t* payload, const uint8_t payload_len);
+card* server_recv_selected_card(const uint8_t* payload, const uint8_t payload_len);
// Client side functions
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);
player_list* 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);
diff --git a/src/net_client.c b/src/net_client.c
index 895041e..b51c7a0 100644
--- a/src/net_client.c
+++ b/src/net_client.c
@@ -8,6 +8,7 @@
#include <assert.h>
#include "net.h"
#include "player.h"
+#include "game.h"
/**
* Client side function; Send hello to server
@@ -38,6 +39,24 @@ void client_hello(int sock, const char* username)
}
/**
+ * 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; connects to specified host:port
* @param[in] host Hostname of server
* @param[in] port Port of server
diff --git a/src/net_server.c b/src/net_server.c
index a0dc0e2..0cba08c 100644
--- a/src/net_server.c
+++ b/src/net_server.c
@@ -182,6 +182,17 @@ char* server_recv_hello(const uint8_t* payload, const uint8_t payload_len)
return name;
}
+card* server_recv_selected_card(const uint8_t* payload, const uint8_t payload_len)
+{
+ assert(payload != NULL && payload_len == 1);
+
+ card* c = malloc(sizeof(card));
+ assert(c != NULL);
+ *c = payload[0];
+
+ return c;
+}
+
/**
* Server side function; deal cards to a client (send hand)
* @param[in] sock Socket to use