back to scratko.xyz
aboutsummaryrefslogtreecommitdiff
path: root/client/verification_client_input.c
diff options
context:
space:
mode:
Diffstat (limited to 'client/verification_client_input.c')
-rw-r--r--client/verification_client_input.c67
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;
}