summaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
Diffstat (limited to 'src/net')
-rw-r--r--src/net/client.c11
-rw-r--r--src/net/client.h1
-rw-r--r--src/net/comm.c6
-rw-r--r--src/net/comm.h1
-rw-r--r--src/net/server.c25
-rw-r--r--src/net/server.h2
6 files changed, 46 insertions, 0 deletions
diff --git a/src/net/client.c b/src/net/client.c
index 1768926..0d1686c 100644
--- a/src/net/client.c
+++ b/src/net/client.c
@@ -140,6 +140,17 @@ bool client_parse_selected_card_all(const msg_t *m)
return true;
}
+bool client_parse_next_action(const msg_t *m)
+{
+ assert(m != NULL);
+ assert(m->hdr.payload_length == 1);
+
+ data_store_t *ds = data_store();
+ ds->game_finished = m->payload[0];
+
+ return true;
+}
+
bool client_parse_hello(const msg_t *m)
{
assert(m != NULL);
diff --git a/src/net/client.h b/src/net/client.h
index b15e329..f0ec810 100644
--- a/src/net/client.h
+++ b/src/net/client.h
@@ -17,5 +17,6 @@ bool client_parse_deal_hand(const msg_t *m);
bool client_parse_selected_stack(const msg_t *m);
bool client_parse_initial_stacks(const msg_t *m);
bool client_parse_selected_card_all(const msg_t *m);
+bool client_parse_next_action(const msg_t *m);
#endif // OXEN_CLIENT_H
diff --git a/src/net/comm.c b/src/net/comm.c
index 000c96f..0c7d8e9 100644
--- a/src/net/comm.c
+++ b/src/net/comm.c
@@ -56,6 +56,9 @@ bool net_recv(const int sock, const msg_type_t type)
case msg_type_selected_stack_s:
result = client_parse_selected_stack(&m);
break;
+ case msg_type_next_action:
+ result = client_parse_next_action(&m);
+ break;
default:
printf("net_recv: Unknown message type %d received!\n", type);
exit(EXIT_FAILURE);
@@ -103,6 +106,9 @@ bool net_send(const int sock, const msg_type_t type, const void *data)
case msg_type_selected_card_all:
server_prep_selected_card_all(&m);
break;
+ case msg_type_next_action:
+ server_prep_next_action(&m);
+ break;
default:
printf("net_send: Unknown message type %d given\n", type);
exit(EXIT_FAILURE);
diff --git a/src/net/comm.h b/src/net/comm.h
index a014c6d..b9fff41 100644
--- a/src/net/comm.h
+++ b/src/net/comm.h
@@ -24,6 +24,7 @@ typedef enum
msg_type_selected_card_all = 0x6,
msg_type_selected_stack_c = 0x7,
msg_type_selected_stack_s = 0x8,
+ msg_type_next_action = 0x9,
} msg_type_t;
// Header format
diff --git a/src/net/server.c b/src/net/server.c
index 7e9a111..335cea6 100644
--- a/src/net/server.c
+++ b/src/net/server.c
@@ -9,6 +9,21 @@
#include "server.h"
#include "../data_store.h"
+
+/**
+ * Return socket with connection to player with specified player id
+ */
+int socket_for_player_id(const socket_list_t *client_socks, const player_id_t pid)
+{
+ for(int i=0; i<client_socks->count; i++)
+ {
+ if(client_socks->player_ids[i] == pid)
+ return client_socks->sockets[i];
+ }
+ assert(false);
+ return 0;
+}
+
/**
* Server side function; start server on specified port
* @param[in] port Port on which server should listen
@@ -231,3 +246,13 @@ void server_prep_selected_card_all(msg_t *m)
m->hdr.payload_length = pos;
}
+
+void server_prep_next_action(msg_t *m)
+{
+ data_store_t *ds = data_store();
+
+ m->hdr.type = msg_type_next_action;
+ m->payload[0] = ds->game_finished;
+ m->hdr.payload_length = 1;
+}
+
diff --git a/src/net/server.h b/src/net/server.h
index 625f24f..fb1d30b 100644
--- a/src/net/server.h
+++ b/src/net/server.h
@@ -15,6 +15,7 @@ typedef struct
uint8_t player_ids[MAX_PLAYERS];
} socket_list_t;
+int socket_for_player_id(const socket_list_t *client_socks, const player_id_t pid);
int server_start(const char* port);
void server_get_players(int serversock, socket_list_t* client_socks, const uint8_t count);
@@ -24,6 +25,7 @@ void server_prep_deal_hand(msg_t *m, const hand_t *h);
void server_prep_selected_stack(msg_t *m);
void server_prep_initial_stacks(msg_t *m);
void server_prep_selected_card_all(msg_t *m);
+void server_prep_next_action(msg_t *m);
bool server_parse_hello(const msg_t *m);
bool server_parse_selected_card(const msg_t *m);