From 75a272a4b0f861387759448553dfb8ed2a096f59 Mon Sep 17 00:00:00 2001
From: Abhisha Nirmalathas <a.nirmalathas1@student.unimelb.edu.au>
Date: Sat, 20 Apr 2019 13:17:29 +1000
Subject: [PATCH] game flow logic complete
---
http-response.h | 2 +-
http-server.c | 28 ++++++++++++++--------------
user.c | 17 ++++++++++++++---
user.h | 2 ++
4 files changed, 31 insertions(+), 18 deletions(-)
diff --git a/http-response.h b/http-response.h
index 11a55c2..63fdbb3 100644
--- a/http-response.h
+++ b/http-response.h
@@ -19,4 +19,4 @@ char* cookie_generator();
void free_response(Response* resp);
-Response* initialise_session(Request* request);
\ No newline at end of file
+Response* initialise_session(Request* request);
diff --git a/http-server.c b/http-server.c
index 6a35732..c91fb1e 100644
--- a/http-server.c
+++ b/http-server.c
@@ -231,28 +231,32 @@ static bool handle_http_request(int sockfd, User_list *users)
printf("run\n\n\n\n\\n");
change_player_status(sockfd,users, QUIT);
request(buff,sockfd, "7_gameover.html");
+ // free_request(req);
+ // return false;
}
else if (strncmp(req->url, "/?start=Start", 24) == 0){
// printf("matches start");
if (req->method == GET){
change_player_status(sockfd, users, READY);
int round = change_player_round(sockfd, users);
- // printf("THIS IS ROUND NUMBER %d\n", round);
- //get_request(buff, sockfd, "3_first_turn.html");
game_change(buff,sockfd, "3_first_turn.html", round);
}
if (req->method == POST){
if(strncmp(req->body, "keyword=", 8) == 0){
- if(player_won(users)){
- request(buff,sockfd, "6_endgame.html");
- change_all_status(users, RESTART);
- }
- else if(should_player_quit(users)){
+ if(should_player_quit(users)){
+ printf("is quit");
change_player_status(sockfd,users, QUIT);
request(buff,sockfd, "7_gameover.html");
- free_request(req);
- keep_alive = 0;
- return false;
+ // free_request(req);
+ // keep_alive = 0;
+ // return false;
+ }
+ else if (different_round_discard(sockfd,users)){
+ game_change(buff,sockfd, "5_discarded.html", user->round);
+ }
+ else if(player_won(users)){
+ request(buff,sockfd, "6_endgame.html");
+ change_player_status(sockfd, users, WAIT);
}
else if(!players_ready(users) && user!= NULL){
game_change(buff,sockfd, "5_discarded.html", user->round);
@@ -268,11 +272,9 @@ static bool handle_http_request(int sockfd, User_list *users)
if(user!= NULL){
char* keywords = return_all_keywords(user);
text_render_game_play(buff,sockfd, "4_accepted.html", keywords, user->round);
- //text_render_request(buff, sockfd, "4_accepted.html", keywords);
free(keywords);
}
}
- // free(keyword);
}
}
}
@@ -455,8 +457,6 @@ int main(int argc, char * argv[])
}
}
}
- printf("exit loop\n");
free_users(users);
- printf("free users fun loop\n");
return 0;
}
diff --git a/user.c b/user.c
index 6fc8e0f..22b67bc 100644
--- a/user.c
+++ b/user.c
@@ -69,9 +69,9 @@ void add_user(User* user, User_list* users){
void free_users(User_list* users){
for (int i=0; i <users->n_users; i++){
- for(int j=0; j < users->users[i]->n_keywords; j++){
- free(&users->users[i]->keywords[j]);
- }
+ // for(int j=0; j < users->users[i]->n_keywords; j++){
+ // free(&users->users[i]->keywords[j]);
+ // }
free(users->users[i]->keywords);
free(users->users[i]);
}
@@ -132,6 +132,17 @@ int change_player_round(int user_id, User_list* users){
}
}return round;
}
+bool different_round_discard(int user_id,User_list* users){
+ User *user = get_current_user(users, user_id);
+ if (user != NULL && user->status ==READY){
+ for(int i=1; i< users->n_users; i++){
+ if(users->users[i]->round != users->users[i-1]->round){
+ return true;
+ }
+ }
+ }
+ return false;
+}
bool keyword_match(User* user, char* keyword){
printf("keyword is %s\n\n", keyword);
diff --git a/user.h b/user.h
index 7a1ebd9..d39ef99 100644
--- a/user.h
+++ b/user.h
@@ -48,6 +48,8 @@ void change_all_status(User_list* users, STATUS status);
int change_player_round(int user_id, User_list* users);
+bool different_round_discard(int user_id, User_list* users);
+
bool keyword_match(User* user, char* keyword);
void reset_players(User_list *users);
--
GitLab