diff options
Diffstat (limited to 'src/net')
| -rw-r--r-- | src/net/client.c | 11 | ||||
| -rw-r--r-- | src/net/client.h | 1 | ||||
| -rw-r--r-- | src/net/comm.c | 6 | ||||
| -rw-r--r-- | src/net/comm.h | 1 | ||||
| -rw-r--r-- | src/net/server.c | 25 | ||||
| -rw-r--r-- | src/net/server.h | 2 |
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); |
