From 9e9919b897b00ff23aee6581471b4d7b4567bf4a Mon Sep 17 00:00:00 2001 From: scratko Date: Sat, 3 Aug 2024 03:39:46 +0300 Subject: Compilation succeeds --- server_data_processing.c | 83 ++++++++++++++++++++++-------------------------- 1 file changed, 38 insertions(+), 45 deletions(-) (limited to 'server_data_processing.c') diff --git a/server_data_processing.c b/server_data_processing.c index c313013..5c78f78 100644 --- a/server_data_processing.c +++ b/server_data_processing.c @@ -1,12 +1,13 @@ #include "server_data_processing.h" #include "server.h" +#include #include #include #include enum { - output_buffer_size = 1024; + output_buffer_size = 1024 }; static char output_buffer[output_buffer_size]; @@ -25,12 +26,12 @@ static int read_from_client(int fd, char *buffer, int max_buffer_size) /* buffer overflow */ if(read_result >= max_buffer_size) return 0; + return read_result; } int print_message_for_first_player(int fd) { - char *str_end; - str_end = stpcpy(output_buffer, "first\n"); + stpcpy(output_buffer, "first\n"); return write_to_client(fd, strlen("first\n")); } @@ -46,7 +47,7 @@ int print_connected_players(int fd, int number) * 0 - buffer overflow or player closed session * -1 - not ready */ -int check_readiness(const struct session *client) +int check_readiness(struct session *client) { int read_result; read_result = read_from_client(client->fd, client->buffer, max_buffer_size); @@ -68,21 +69,21 @@ static void copy_card_queue(int *offset, struct card_queue *cq) length = strlen(next_attack_card->str); for(i = 0; i < length; ++i, ++*offset) *(output_buffer + *offset) = (next_attack_card->str)[i]; - *(output_buffer + *offset) = '\'; + *(output_buffer + *offset) = '\\'; ++*offset; } *(output_buffer + *offset-1) = ':'; } -static void copy_cards_on_table(int *offset, struct cards_on_table *cot) +static void copy_cards_on_table(int *offset, struct cards_on_table cot) { int i, j, length; - for(i = 0; i <= cot->card_arr_idx; ++i) { - length = strlen(cot->card_arr[i]); + for(i = 0; i <= cot.card_arr_idx; ++i) { + length = strlen(cot.card_arr[i]); for(j = 0; j < length; ++j, ++*offset) - *(output_buffer + *offset) = cot->card_arr[i][j]; + *(output_buffer + *offset) = cot.card_arr[i][j]; #if 0 - *(output_buffer + *offset) = '\'; + *(output_buffer + *offset) = '\\'; #endif } *(output_buffer + *offset) = ':'; @@ -100,7 +101,7 @@ static void copy_own_deck(int *offset, player_cards deck) length = strlen(card); for(i = 0; i < length; ++i, ++*offset) *(output_buffer + *offset) = card[i]; - *(output_buffer + *offset) = '\'; + *(output_buffer + *offset) = '\\'; deck = deck->next; } *(output_buffer + *offset) = ':'; @@ -108,8 +109,11 @@ static void copy_own_deck(int *offset, player_cards deck) } static void copy_base_info(int *free_pos, struct game_info *gi, - player_cards deck, int player_position) + enum client_game_states state, player_cards deck, + int player_position) { + int i; + *free_pos = sprintf(output_buffer, "%u:%u:%u:%u:%s:", state, gi->players_number, gi->shuffled_cards_left, player_position, gi->trump_suit); @@ -120,56 +124,43 @@ static void copy_base_info(int *free_pos, struct game_info *gi, gi->card_quantity_arr[i]); } if(gi->cot->card_arr_idx != -1) - copy_cards_on_table(free_pos, gi->cot); + copy_cards_on_table(free_pos, *gi->cot); if(!is_empty_stack(deck)) copy_own_deck(free_pos, deck); } int print_game_part(const struct session *client, struct game_info *gi) { - int free_pos, i; /* free_pos == data length */ + int free_pos; /* free_pos == data length */ + + copy_base_info(&free_pos, gi, client->state, client->deck, + client->player_position); switch(client->state) { case display_only_table: - copy_base_info(&free_pos, gi, client->deck, client->player_position); - *(output_buffer + free_pos-1) = '\n'; - break; + /* let the client print card tips and wait for input */ case attack: - /* let the client print card tips and wait for input */ - copy_base_info(&free_pos, gi, client->deck, client->player_position); + case defense: + /* + * who haven't got tossing card (including defender) must wait + * when other players make moves + */ + case tossing_expectation: + case tossing: + /* instead of last ':' */ *(output_buffer + free_pos-1) = '\n'; break; + /* other clents will be waiting particular player */ case attack_expectation: - /* other clents will be waiting particular player */ - copy_base_info(&free_pos, gi, deck, player_position); free_pos += sprintf(output_buffer + free_pos, "%u:", gi->position_whose_turn); - /* instead of last ':' */ - *(output_buffer + free_pos-1) = '\n'; - break; - case defense: - copy_base_info(&free_pos, gi, client->deck, client->player_position); *(output_buffer + free_pos-1) = '\n'; break; case defense_expectation: - copy_base_info(&free_pos, gi, client->deck, client->player_position); free_pos += sprintf(output_buffer + free_pos, "%u:", gi->position_whose_turn); copy_card_queue(&free_pos, gi->cq); *(output_buffer + free_pos-1) = '\n'; - break; - /* - * who haven't got tossing card (including defender) must wait - * when other players make moves - */ - case tossing_expectation: - copy_base_info(&free_pos, gi, client->deck, client->player_position); - *(output_buffer + free_pos-1) = '\n'; - break; - case tossing: - copy_base_info(&free_pos, gi, client->deck, client->player_position); - *(output_buffer + free_pos-1) = '\n'; - break; } return write_to_client(client->fd, free_pos); } @@ -184,7 +175,7 @@ int get_cards_from_attacker(struct session *client, struct card_queue *cq) if(!read_result) return read_result; for(i = 0, j = 0; i < read_result && client->buffer[i] != '\n'; ++i) { - if(read_result[i] == '\') { + if(client->buffer[i] == '\\') { given_card[j] = '\0'; j = 0; stack_card = remove_card_from_stack(&client->deck, given_card); @@ -194,6 +185,7 @@ int get_cards_from_attacker(struct session *client, struct card_queue *cq) given_card[j] = client->buffer[i]; ++j; } + return read_result; } /* @@ -202,7 +194,8 @@ int get_cards_from_attacker(struct session *client, struct card_queue *cq) * defender didn't want to continue defense phase * */ -int get_card_from_defender(struct session *client, struct cards_on_table *cot) +int get_card_from_defender(struct session *client, struct cards_on_table *cot, + const char * trump_suit) { int read_result, i; char given_card[4]; @@ -216,7 +209,7 @@ int get_card_from_defender(struct session *client, struct cards_on_table *cot) if(given_card[0] == '\n') return 1; given_card[i] = '\0'; - if(is_card_bit(cot->card_arr[card_arr_idx-2], given_card)) { + if(is_card_bit(cot->card_arr[cot->card_arr_idx-2], given_card, trump_suit)){ stack_card = remove_card_from_stack(&client->deck, given_card); put_defender_card_on_table(cot, stack_card); return 1; @@ -260,7 +253,7 @@ int get_cards_from_tossing_player(struct session *client, total_defense_cards += find_out_card_quantity_in_deck(defense_deck); for(i = 0, j = 0; i < read_result; ++i) { - if(read_result[i] == '\') { + if(client->buffer[i] == '\\') { /* cancellation */ if(given_card[0] == '\n') return 3; @@ -287,7 +280,7 @@ int get_cards_from_tossing_player(struct session *client, } continue; } - given_card[j] = buffer[i]; + given_card[j] = client->buffer[i]; ++j; } /* 7 -- state for result of received cards */ -- cgit v1.2.3