summaryrefslogtreecommitdiff
path: root/src/net.c
diff options
context:
space:
mode:
authorReiner Herrmann <reiner@reiner-h.de>2011-01-23 22:46:29 +0100
committerReiner Herrmann <reiner@reiner-h.de>2011-01-23 22:46:29 +0100
commit2bd0e560986c66406bae90ff44f2dd6d3fec17be (patch)
tree29aa4b7cb1831d7781a1a75f1db8ee2850a2a7ac /src/net.c
parentfff390715fff73f05639d3e5f96612a5a4fa82e8 (diff)
added generic net_send function and adapted functions it is using
Diffstat (limited to 'src/net.c')
-rw-r--r--src/net.c51
1 files changed, 48 insertions, 3 deletions
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 <assert.h>
#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;
+}
+