From 4b2fdc91d42a438193d15840e10851c3847fbe80 Mon Sep 17 00:00:00 2001 From: scratko Date: Sat, 17 Aug 2024 02:42:19 +0300 Subject: Global fixes v3.0 Fixed bug when entering cards incorrectly. Added recognition of disconnection from the server. Added welcome screen and update screen. --- server/server.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) (limited to 'server/server.c') diff --git a/server/server.c b/server/server.c index 1655448..f842a70 100644 --- a/server/server.c +++ b/server/server.c @@ -56,6 +56,18 @@ static int accept_client(struct server *serv) static void close_connection(struct server *serv) { + int i; + + for(i = 0; i < serv->max_sess_arr_size; ++i) { + if(!serv->sess_arr[i]) + continue; + serv->sess_arr[i]->state = disconnect; + send_disconnect_status(serv->sess_arr[i]->fd); + close(serv->sess_arr[i]->fd); + free(serv->sess_arr[i]); + serv->sess_arr[i] = NULL; + } + serv->connected_players_counter = 0; } static int check_playable_player_number(struct server *serv) @@ -76,6 +88,7 @@ static void init_new_game(struct server *serv) who_attack = -1; lowest_trump = 0; + serv->shuffled_deck_size = max_shuffled_deck_size; serv->shuffled_deck = get_shuffled_deck(); serv->trump_card = extract_trump_card(serv->shuffled_deck, &serv->shuffled_deck_size); @@ -609,11 +622,6 @@ static void set_up_player_tracking(struct server *serv, fd_set *readfds, switch(serv->state) { case first_player: - if(serv->sess_arr[i]->record) { - FD_SET(i, writefds); - *maxfd = i > *maxfd ? i : *maxfd; - } - break; case confirmation_waiting: FD_SET(i, readfds); *maxfd = i > *maxfd ? i : *maxfd; @@ -695,6 +703,9 @@ static void make_data_transfer(struct server *serv, fd_set *readfds, result = print_message_for_first_player(i); serv->sess_arr[i]->record = 0; } + /* connection was closed? (result == 0) */ + if(FD_ISSET(i, readfds)) + result = read(i, serv->sess_arr[i]->buffer, max_buffer_size); break; case confirmation_waiting: if(FD_ISSET(i, writefds) && serv->sess_arr[i]->record) { @@ -755,13 +766,17 @@ static void make_data_transfer(struct server *serv, fd_set *readfds, break; } } - if(serv->state == start_game || serv->state == table) + if(serv->state == start_game || serv->state == table || + serv->state == end_game) sleep(2); if(check_server_state_change_conditions(serv)) serv->change_server_state = 1; /* connection is closed */ - if(!result) + if(!result) { close_connection(serv); + serv->change_server_state = 0; + serv->state = no_players; + } } int main_loop(struct server *serv) -- cgit v1.2.3