diff options
Diffstat (limited to 'client/verification_client_input.c')
-rw-r--r-- | client/verification_client_input.c | 67 |
1 files changed, 58 insertions, 9 deletions
diff --git a/client/verification_client_input.c b/client/verification_client_input.c index 2134f30..1530387 100644 --- a/client/verification_client_input.c +++ b/client/verification_client_input.c @@ -1,7 +1,15 @@ #include "verification_client_input.h" +#include "card_handling.h" #include <stdio.h> #include <unistd.h> +#include <string.h> + +enum { + output_buffer_size = 1024 +}; + +static char output_buffer[output_buffer_size]; /* * 1 - response received @@ -18,29 +26,70 @@ int vci_confirmation_waiting(int fd, char *buffer) return 0; } +/* + * example: A#\A^\Av\'\n' + * or (while tossing): '\n' + */ int vci_attack_or_tossing(int fd, char *buffer, player_cards deck, enum client_states state) { - int i; + int i, free_pos = 0; + char * card = NULL; - if(state == tossing && buffer[0] == '\n') /* cancel card tossing */ + if(state == tossing && buffer[0] == '\n') { /* cancel card tossing */ + write(fd, buffer, 1); return 1; + } for(i = 0; buffer[i] != '\n'; ++i) - if(!card_search_by_letter(deck, buffer[i])) { + if((card = card_search_by_letter(deck, buffer[i])) != NULL) { +#if 0 + if(!rank) + rank = convert_rank_to_int(card); + if(rank == convert_rank_to_int(card)) { +#endif + strncpy(output_buffer + free_pos, card, strlen(card)); + free_pos += strlen(card); + output_buffer[free_pos] = '\\'; + ++free_pos; +#if 0 + } else { + printf("incorrect input\n"); + return 0; + } +#endif + } else { printf("incorrect input\n"); return 0; } + output_buffer[free_pos] = '\n'; + write(fd, output_buffer, free_pos+1); return 1; } - +/* + * example: 5v'\n' + * or: '\n' + */ int vci_defense(int fd, char *buffer, player_cards deck) { - if(buffer[0] == '\n') /* the player does not want to keep the defense */ + int last_idx; + char *card = NULL; + + if(buffer[0] == '\n') { /* the player does not want to keep the defense */ + write(fd, buffer, 1); return 1; - if(!card_search_by_letter(deck, buffer[0])) - return 0; - if(buffer[1] != '\n') + } + if(buffer[1] != '\n') { + printf("incorrect input\n"); return 0; - return 1; + } + if((card = card_search_by_letter(deck, buffer[0])) != NULL) { + strcpy(output_buffer, card); + last_idx = strlen(card); + output_buffer[last_idx] = '\n'; + write(fd, output_buffer, last_idx+1); + return 1; + } + /* card is not found in the deck or cannot be used */ + return 0; } |