From 246e1678c54bedc7d0d0276654e5205647ff5360 Mon Sep 17 00:00:00 2001 From: Reiner Herrmann Date: Thu, 20 Jan 2011 18:10:39 +0100 Subject: implemented functions for sending/receiving cards selected by a player --- src/net.c | 3 +++ src/net.h | 5 ++++- src/net_client.c | 19 +++++++++++++++++++ src/net_server.c | 11 +++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) 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 #include "net.h" #include "player.h" +#include "game.h" /** * Client side function; Send hello to server @@ -37,6 +38,24 @@ void client_hello(int sock, const char* username) 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; connects to specified host:port * @param[in] host Hostname 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 -- cgit v1.2.3