summaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
Diffstat (limited to 'src/net')
-rw-r--r--src/net/client.c16
-rw-r--r--src/net/client.h1
-rw-r--r--src/net/comm.c6
-rw-r--r--src/net/comm.h5
-rw-r--r--src/net/server.c20
-rw-r--r--src/net/server.h1
6 files changed, 47 insertions, 2 deletions
diff --git a/src/net/client.c b/src/net/client.c
index bcbaf9a..73d889a 100644
--- a/src/net/client.c
+++ b/src/net/client.c
@@ -124,6 +124,22 @@ bool client_parse_initial_stacks(const msg_t *m)
return true;
}
+bool client_parse_selected_card_all(const msg_t *m)
+{
+ assert(m != NULL);
+ assert(m->hdr.payload_length % 2 == 0); // payload: n times id+card
+
+ data_store* ds = datamodel();
+ for(int i=0; i<m->hdr.payload_length; i+=2)
+ {
+ uint8_t pid = m->payload[i];
+ pnoc_t* pnoc = get_pnoc_from_playerid(&ds->players, pid);
+ pnoc->open_card = m->payload[i+1];
+ }
+
+ return true;
+}
+
void client_prep_hello(msg_t *m)
{
data_store* ds = datamodel();
diff --git a/src/net/client.h b/src/net/client.h
index 918b98f..56b9839 100644
--- a/src/net/client.h
+++ b/src/net/client.h
@@ -15,5 +15,6 @@ bool client_parse_player_list(const msg_t *m);
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);
#endif // OXEN_CLIENT_H
diff --git a/src/net/comm.c b/src/net/comm.c
index 042cb00..ab9f34b 100644
--- a/src/net/comm.c
+++ b/src/net/comm.c
@@ -44,6 +44,9 @@ bool net_recv(const int sock, const msg_type_t type)
case msg_type_selected_card:
result = server_parse_selected_card(&m);
break;
+ case msg_type_selected_card_all:
+ result = client_parse_selected_card_all(&m);
+ break;
case msg_type_selected_stack_c:
result = server_parse_selected_stack(&m);
break;
@@ -91,6 +94,9 @@ bool net_send(const int sock, const msg_type_t type, const void *data)
case msg_type_initial_stacks:
server_prep_initial_stacks(&m);
break;
+ case msg_type_selected_card_all:
+ server_prep_selected_card_all(&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 c7174ff..0cc5cd2 100644
--- a/src/net/comm.h
+++ b/src/net/comm.h
@@ -20,8 +20,9 @@ typedef enum
msg_type_deal_hand = 0x2,
msg_type_initial_stacks = 0x3,
msg_type_selected_card = 0x4,
- msg_type_selected_stack_c = 0x5,
- msg_type_selected_stack_s = 0x6,
+ msg_type_selected_card_all = 0x5,
+ msg_type_selected_stack_c = 0x6,
+ msg_type_selected_stack_s = 0x7,
} msg_type_t;
// Header format
diff --git a/src/net/server.c b/src/net/server.c
index b0cd5e2..c5a0cc1 100644
--- a/src/net/server.c
+++ b/src/net/server.c
@@ -205,3 +205,23 @@ void server_prep_initial_stacks(msg_t *m)
m->hdr.payload_length = NUM_TABLE_STACKS;
}
+
+void server_prep_selected_card_all(msg_t *m)
+{
+ uint8_t pos = 0;
+ data_store* ds = datamodel();
+
+ m->hdr.type = msg_type_selected_card_all;
+
+ for(int i=0; i<MAX_PLAYERS; i++)
+ {
+ pnoc_t* pnoc = &ds->players.players[i];
+ if(pnoc->player_id == 0) // invalid player
+ continue;
+ m->payload[pos++] = pnoc->player_id;
+ m->payload[pos++] = pnoc->open_card;
+ }
+
+ m->hdr.payload_length = pos;
+}
+
diff --git a/src/net/server.h b/src/net/server.h
index 196700c..8c2d195 100644
--- a/src/net/server.h
+++ b/src/net/server.h
@@ -22,6 +22,7 @@ void server_prep_start_game(msg_t *m);
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);
bool server_parse_hello(const msg_t *m);
bool server_parse_selected_card(const msg_t *m);