From 831f9f01fbe4088eb6bd378c0e417d9996b676fd Mon Sep 17 00:00:00 2001 From: scratko Date: Fri, 30 Aug 2024 12:46:56 +0300 Subject: Final version v2.0 Added windows client. SIGPIPE signal was being sent to the server when the client was disconnected. Now there is handling of this signal. Added a delay when displaying some informational messages. --- server/server_data_processing.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'server/server_data_processing.c') diff --git a/server/server_data_processing.c b/server/server_data_processing.c index 41e4b08..40ce5e3 100644 --- a/server/server_data_processing.c +++ b/server/server_data_processing.c @@ -235,10 +235,14 @@ int get_cards_from_attacker(struct session *client, const char *stack_card = NULL; read_result = read_from_client(client->fd, client->buffer, max_buffer_size); + +#if DEBUG printf("%d\n", read_result); for(i = 0; i < read_result; ++i) putchar(client->buffer[i]); putchar('\n'); +#endif + if(!read_result) return read_result; for(i = 0, j = 0; i < read_result; ++i) { @@ -261,6 +265,7 @@ int get_cards_from_attacker(struct session *client, 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); + sleep(2); return read_result; } @@ -280,14 +285,21 @@ int get_card_from_defender(struct session *client, struct cards_on_table *cot, const char *stack_card = NULL; read_result = read_from_client(client->fd, client->buffer, max_buffer_size); + +#if DEBUG printf("%d\n", read_result); for(i = 0; i < read_result; ++i) putchar(client->buffer[i]); putchar('\n'); +#endif + if(!read_result) return read_result; - if(client->buffer[0] == '\n') + if(client->buffer[0] == '\n') { + /* the client sees “accepting cards” at the same time */ + sleep(2); return 1; + } for(i = 0; i < read_result && client->buffer[i] != '\n'; ++i) given_card[i] = client->buffer[i]; given_card[i] = '\0'; @@ -321,16 +333,23 @@ int get_cards_from_tossing_player(struct session *client, const char *stack_card = NULL; read_result = read_from_client(client->fd, client->buffer, max_buffer_size); + +#if DEBUG printf("%d\n", read_result); for(i = 0; i < read_result; ++i) putchar(client->buffer[i]); putchar('\n'); +#endif + if(!read_result) return read_result; /* cancellation */ - if(client->buffer[0] == '\n') + if(client->buffer[0] == '\n') { + /* the client sees “skipping the card toss” at the same time */ + sleep(2); return cancel; + } for(i = 0, j = 0; i < read_result; ++i) { if(client->buffer[i] == '\\') { @@ -363,6 +382,7 @@ int get_cards_from_tossing_player(struct session *client, 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); + sleep(2); if(!card_return_status) return answer_got; else -- cgit v1.2.3