summaryrefslogtreecommitdiff
path: root/src/net_server.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/net_server.c')
-rw-r--r--src/net_server.c29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/net_server.c b/src/net_server.c
index 39b6c51..716cc48 100644
--- a/src/net_server.c
+++ b/src/net_server.c
@@ -116,7 +116,7 @@ void server_start_game(int* clients, const uint8_t clientcount, const struct pla
uint8_t* buf;
uint8_t usercount = players->count;
uint32_t pos = 0;
- uint32_t buflen = 2 + usercount; // type + usercount + (usercount * len)
+ uint32_t buflen = 3 + usercount; // type + packetlen + usercount + (usercount * len)
for(int i=0; i<usercount; i++)
buflen += strlen(players->names[i]);
@@ -128,6 +128,7 @@ void server_start_game(int* clients, const uint8_t clientcount, const struct pla
exit(EXIT_FAILURE);
}
buf[pos++] = msg_type_start_game;
+ buf[pos++] = buflen;
buf[pos++] = players->count;
// copy usernames with length to buffer
for(int i=0; i<usercount; i++)
@@ -150,16 +151,16 @@ void server_start_game(int* clients, const uint8_t clientcount, const struct pla
* @param[in] sock Socket to use
* @return Username of client
*/
-static char* server_recv_hello(int sock)
+static char* server_recv_hello(int sock, uint8_t data_len)
{
- char buf[12], *name;
+ char buf[data_len], *name;
uint8_t namelen;
- recv(sock, buf, 12, 0);
+ recv(sock, buf, data_len, 0);
assert(buf[0] == msg_type_hello);
- namelen = buf[1];
+ namelen = buf[1] - 2;
name = malloc(namelen+1);
if(name == NULL)
{
@@ -182,22 +183,36 @@ static char* server_recv_hello(int sock)
void* server_recv(int sock, uint8_t wanted)
{
void* result = NULL;
- uint8_t buf[10], type;
+ uint8_t buf[10], type, data_len;
ssize_t len = recv(sock, buf, 10, MSG_PEEK); // just peek into packet to determine type
assert(len != -1);
type = buf[0];
+ data_len = buf[1];
if(type != wanted)
return NULL;
switch(type)
{
case msg_type_hello:
- result = server_recv_hello(sock);
+ result = server_recv_hello(sock, data_len);
break;
}
return result;
}
+void server_deal_cards(int sock, const hand h)
+{
+ uint8_t buf[2+MAX_HAND_CARDS];
+
+ buf[0] = msg_type_deal_cards;
+ buf[1] = 2+MAX_HAND_CARDS;
+ for(int i=0; i<MAX_HAND_CARDS; i++)
+ buf[2+i] = h[i];
+
+
+ send(sock, buf, 2+MAX_HAND_CARDS, 0);
+}
+