Skip to content

Commit 0d1fc51

Browse files
committed
merge
2 parents 4f3e424 + 04fb299 commit 0d1fc51

File tree

5 files changed

+115
-8
lines changed

5 files changed

+115
-8
lines changed

game_dispatcher.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,22 @@
99

1010
#include "globals.h"
1111
#include "helper.h"
12+
#include "high_score.h"
1213
#include "game_dispatcher.h"
1314

1415
// includes for dispatchers
1516
#include "account_login.h"
1617

1718
typedef bool (*pkt_handler)(int client_fd, char* client_str);
1819

19-
pkt_handler handlers[] = {handle_get_version, handle_get_currently_logged_in_uname};
20+
21+
pkt_handler handlers[] = {
22+
handle_get_version,
23+
handle_add_winner,
24+
handle_set_intro,
25+
handle_set_outro,
26+
handle_report_winners
27+
};
2028

2129
void handle_client(int client_fd, char* client_str) {
2230
int pkt_type;

high_score.c

Lines changed: 94 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,101 @@
22
#include <string.h>
33
#include <stdlib.h>
44
#include <unistd.h>
5+
#include <arpa/inet.h>
56

67
#include "tictactoe.h"
78
#include "high_score.h"
89

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+

high_score.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
#include <stdbool.h>
55
#include "tictactoe.h"
66

7-
void add_winner(int client_fd, enum Player winner); //use a username or cookie or session id instead?
7+
//void add_winner(int client_fd, enum Player winner); //use a username or cookie or session id instead?
8+
void init_msgs();
89

9-
#endif
10+
bool handle_add_winner(int client_fd, char* client_str); // Collect information about the winner from the user
11+
bool handle_set_intro(int client_fd, char* client_str);
12+
bool handle_set_outro(int client_fd, char* client_str);
13+
bool handle_report_winners(int client_fd, char* client_str);
14+
15+
#endif

main_game_server.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@
88
#include <arpa/inet.h>
99

1010
#include "helper.h"
11+
#include "high_score.h"
1112
#include "game_dispatcher.h"
1213

1314
#define MAX_CONNECTIONS (10)
1415

1516
int main (int argc, char *argv[]) {
1617
uses_assumed_sizes();
18+
init_msgs();
1719

1820
int server_fd, client_fd, err;
1921
struct sockaddr_in server, client;
@@ -63,4 +65,4 @@ int main (int argc, char *argv[]) {
6365
}
6466

6567
return 0;
66-
}
68+
}

tictactoe.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,4 @@ bool handle_get_winner(int client_fd, char* client_str) {
8787

8888
return true;//what to return for status?
8989

90-
}
90+
}

0 commit comments

Comments
 (0)