From 2bd0e560986c66406bae90ff44f2dd6d3fec17be Mon Sep 17 00:00:00 2001 From: Reiner Herrmann Date: Sun, 23 Jan 2011 22:46:29 +0100 Subject: added generic net_send function and adapted functions it is using --- src/net.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) (limited to 'src/net.c') diff --git a/src/net.c b/src/net.c index f3945a0..f1b7e43 100644 --- a/src/net.c +++ b/src/net.c @@ -5,10 +5,10 @@ #include #include "net.h" -void *net_recv(int sock, msg_type_t type) +bool net_recv(int sock, const msg_type_t type) { msg_t m; - void *result; + bool result; ssize_t len = recv(sock, &m.hdr, sizeof(msg_header_t), MSG_PEEK); // just peek into packet to determine message header assert(len != -1); @@ -16,7 +16,7 @@ void *net_recv(int sock, msg_type_t type) if(m.hdr.type != type) { printf("net_recv: received message type %d instead of %d", m.hdr.type, type); - return NULL; + return false; } m.payload = malloc(m.hdr.payload_length); // Allocate space for message payload @@ -57,3 +57,48 @@ void *net_recv(int sock, msg_type_t type) return result; } + +bool net_send(int sock, const msg_type_t type, void* param) +{ + bool result = true; + uint8_t payload_len = 255; + uint8_t buf[payload_len+2]; // should be enough for all packet types + + buf[0] = type; + + switch(type) + { + case msg_type_hello: + payload_len = client_send_hello(&buf[2], payload_len); + break; + case msg_type_selected_card: + payload_len = client_send_selected_card(&buf[2], payload_len); + break; + case msg_type_selected_stack_c: + payload_len = client_send_selected_stack(&buf[2], payload_len); + break; + case msg_type_start_game: + payload_len = server_send_start_game(&buf[2], payload_len); + break; + case msg_type_selected_stack_s: + payload_len = server_send_selected_stack(&buf[2], payload_len); + break; + case msg_type_deal_cards: + payload_len = server_send_deal_cards(&buf[2], payload_len, param); + break; + case msg_type_initial_stack: + payload_len = server_send_initial_stack(&buf[2], payload_len, param); + break; + default: + printf("net_send: Unknown message type %d received\n", type); + exit(EXIT_FAILURE); + break; + } + + buf[1] = payload_len; + + send(sock, buf, payload_len+2, 0); + + return result; +} + -- cgit v1.2.3