2
2
#include <string.h>
3
3
#include <stdlib.h>
4
4
#include <unistd.h>
5
+ #include <arpa/inet.h>
5
6
6
7
#include "tictactoe.h"
7
8
#include "high_score.h"
8
9
9
- void add_winner (int client_fd , enum Player winner ) {
10
- //TODO
11
- }
10
+ //void add_winner(int client_fd, enum Player winner) {
11
+ // //TODO
12
+ //}
13
+
14
+ #define MAX_BUF_SIZE 0x100
15
+ char winners_list [MAX_BUF_SIZE ];
16
+ char intro [MAX_BUF_SIZE ];
17
+ char outro [MAX_BUF_SIZE ];
18
+
19
+ void init_msgs ()
20
+ {
21
+ memset (winners_list , sizeof (winners_list ), 0 );
22
+ memset (intro , sizeof (winners_list ), 0 );
23
+ memset (outro , sizeof (winners_list ), 0 );
24
+
25
+ strcpy (intro , "Special Congratulations to our Winners:\n" );
26
+ strcpy (outro , "And Better Luck to our other participants:\n" );
27
+ }
28
+
29
+ char * handle_read (int client_fd , int * num_read )
30
+ {
31
+ char * dst_buf = malloc (MAX_BUF_SIZE );
32
+ int bytes_read = recv (client_fd , dst_buf , MAX_BUF_SIZE , 0 );
33
+ if (bytes_read == -1 ) {
34
+ perror ("recv from get_str_from_client in len" );
35
+ }
36
+ if (bytes_read == 0 ) {
37
+ printf ("client disconnected in str len in get_str_from_client\n" );
38
+ return false;
39
+ }
40
+ if (bytes_read != sizeof (dst_buf )) {
41
+ printf ("client didn't send enough bytes for string length in get_str_from_client\n" );
42
+ return false;
43
+ }
44
+
45
+ * num_read = bytes_read ;
46
+ return dst_buf ;
47
+ }
48
+
49
+ int display_to_user (int client_fd , char * msg_buf )
50
+ {
51
+ int err = send (client_fd , msg_buf , strlen (msg_buf ), 0 );
52
+ if (err < 0 ) {
53
+ perror ("send len in respond_str_to_client" );
54
+ }
55
+ err = send (client_fd , msg_buf , strlen (msg_buf ), 0 );
56
+ if (err < 0 ) {
57
+ perror ("send str in respond_str_to_client" );
58
+ }
59
+ return err ;
60
+ }
61
+
62
+ bool handle_add_winner (int client_fd , char * client_str ) {
63
+ char buff [MAX_BUF_SIZE ];
64
+ int num_read = 0 ;
65
+ char * user_str = handle_read (client_fd , & num_read );
66
+ int bytes_written = snprintf (buff , num_read , "%s\n" , user_str );
67
+ free (user_str );
68
+
69
+ bytes_written = snprintf (winners_list , MAX_BUF_SIZE , "%s" , buff );
70
+ return true;
71
+ }
72
+
73
+ bool handle_set_intro (int client_fd , char * client_str ) {
74
+ int num_read = 0 ;
75
+ char * user_str = handle_read (client_fd , & num_read );
76
+ strncpy (intro , user_str , num_read );
77
+ free (user_str );
78
+ return true;
79
+ }
80
+
81
+ bool handle_set_outro (int client_fd , char * client_str ) {
82
+ int num_read = 0 ;
83
+ char * user_str = handle_read (client_fd , & num_read );
84
+ strncpy (intro , user_str , num_read );
85
+ free (user_str );
86
+ return true;
87
+ }
88
+
89
+ bool handle_report_winners (int client_fd , char * client_str ) {
90
+ char msg_to_user [MAX_BUF_SIZE * 3 ];
91
+ int bytes_written = snprintf (msg_to_user , sizeof (msg_to_user ), "%s\n" , intro );
92
+ bytes_written = snprintf (msg_to_user + bytes_written , sizeof (msg_to_user ), "%s\n" , winners_list );
93
+ bytes_written = snprintf (msg_to_user + bytes_written , sizeof (msg_to_user ), "%s\n" , outro );
94
+
95
+ display_to_user (client_fd , msg_to_user );
96
+ return true;
97
+ }
98
+
99
+ //bool handle_get_score(int client_fd, char* client_str) {
100
+ //
101
+ //}
102
+
0 commit comments