diff options
author | scratko <m@scratko.xyz> | 2024-08-18 01:33:08 +0300 |
---|---|---|
committer | scratko <m@scratko.xyz> | 2024-08-18 01:33:08 +0300 |
commit | 9970a2275a56d7835ba0c12a8586dc25cf7ec1cf (patch) | |
tree | 914b9353b2df1ba9dec5481fa3e7e6a8462dea5d /server/server_data_processing.c | |
parent | 4b2fdc91d42a438193d15840e10851c3847fbe80 (diff) | |
download | durak-9970a2275a56d7835ba0c12a8586dc25cf7ec1cf.tar.gz durak-9970a2275a56d7835ba0c12a8586dc25cf7ec1cf.tar.bz2 durak-9970a2275a56d7835ba0c12a8586dc25cf7ec1cf.zip |
Global fixes v4.0
Removed unnecessary comments.
Added resource cleanup for client and server.
Changed queue display.
Added player indicator.
It's possible to quit the game while typing or waiting for a connection.
Fixed a bug with determining the limit of card tossing.
Diffstat (limited to 'server/server_data_processing.c')
-rw-r--r-- | server/server_data_processing.c | 38 |
1 files changed, 13 insertions, 25 deletions
diff --git a/server/server_data_processing.c b/server/server_data_processing.c index df95b7f..99ac579 100644 --- a/server/server_data_processing.c +++ b/server/server_data_processing.c @@ -177,6 +177,12 @@ int print_game_part(const struct session *client, /* let the client print card tips and wait for input */ case attack: case defense: + /* other clents will be waiting particular player */ + case attack_expectation: + free_pos += sprintf(output_buffer + free_pos, "%u:", + gi->position_whose_turn); + *(output_buffer + free_pos-1) = '\n'; + break; /* * who haven't got tossing card (including defender) must wait * when other players make moves @@ -186,12 +192,6 @@ int print_game_part(const struct session *client, /* instead of last ':' */ *(output_buffer + free_pos-1) = '\n'; break; - /* other clents will be waiting particular player */ - case attack_expectation: - free_pos += sprintf(output_buffer + free_pos, "%u:", - gi->position_whose_turn); - *(output_buffer + free_pos-1) = '\n'; - break; case defense_expectation: case spectator: /* copying whose turn */ @@ -219,18 +219,6 @@ int print_game_part(const struct session *client, } return write_to_client(client->fd, free_pos); } -#if 0 -static int is_receiving_cards_limit(int total_defense_cards, int total_attack_cards) -{ - if(total_defense_cards >= start_deck_size && - total_attack_cards == start_deck_size) { - return 1; - } else if(total_defense_cards == total_attack_cards) - return 1; - return 0; -} -#endif - /* * example: 7v\2#\A^\'\n' @@ -313,9 +301,10 @@ int get_card_from_defender(struct session *client, struct cards_on_table *cot, /* * 0 - buffer overflow or client closed connection - * 1 - some number of cards added to card queue + * 1 - some number of cards added to card queue (answer_got) * 2 - card toss limit was reached when accepting cards from this player - * 3 - player refused to toss the card + * (anwer_got_with_limit) + * 3 - player refused to toss the card (cancel) * * example: 10#\A^\7v\'\n' * or: '\n' @@ -341,7 +330,7 @@ int get_cards_from_tossing_player(struct session *client, /* cancellation */ if(client->buffer[0] == '\n') - return 3; + return cancel; for(i = 0, j = 0; i < read_result; ++i) { if(client->buffer[i] == '\\') { @@ -351,7 +340,7 @@ int get_cards_from_tossing_player(struct session *client, data_length = sprintf(output_buffer, "%d\n", tossing_limit_status); write_to_client(client->fd, data_length); - return 3; + return cancel; } given_card[j] = '\0'; j = 0; @@ -371,14 +360,13 @@ int get_cards_from_tossing_player(struct session *client, ++j; } - /* 7 -- state for result of received cards */ data_length = sprintf(output_buffer, "%d:%s\n", card_acceptance_status, all_cards_received_status ? "all" : "not all"); write_to_client(client->fd, data_length); if(all_cards_received_status) - return 1; + return answer_got; else - return 2; + return anwer_got_with_limit; } void print_game_result(const struct session *client, int durak_position) |