diff options
| -rw-r--r-- | src/net.c | 3 | ||||
| -rw-r--r-- | src/net.h | 5 | ||||
| -rw-r--r-- | src/net_client.c | 19 | ||||
| -rw-r--r-- | src/net_server.c | 11 |
4 files changed, 37 insertions, 1 deletions
@@ -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); @@ -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 |
