diff --git a/http-server.c b/http-server.c index 2f127b72a4135b38c59fc26a95f80b3f463cc7a2..13d99684601a6a778fe16d27739e66b52d5cfe41 100644 --- a/http-server.c +++ b/http-server.c @@ -41,6 +41,7 @@ static int const HTTP_400_LENGTH = 47; static char const * const HTTP_404 = "HTTP/1.1 404 Not Found\r\nContent-Length: 0\r\n\r\n"; static int const HTTP_404_LENGTH = 45; +// global structures required for memory deallocation static Request* req; static User_list* user_list; int keep_alive = 1; @@ -247,7 +248,6 @@ static bool handle_http_request(int sockfd, User_list *user_list){ char * curr = buff; // parse the method - // printf("REQUEST IS \n\n%s\n", buff); req = parse_request(curr); char* cookie = hash_table_get(req->header, "Cookie:"); int id = atoi(cookie+3); @@ -257,14 +257,11 @@ static bool handle_http_request(int sockfd, User_list *user_list){ if (user != NULL){ change_player_status(id,user_list, QUIT); response(buff,sockfd, "7_gameover.html"); - // free_request(req); - // return false; } } // user starting game else if (strncmp(req->url, "/?start=Start", 24) == 0){ - printf("THE COOKIE ID IS %d\n", id); // user on first turn if (user != NULL){ if (req->method == GET){ @@ -279,9 +276,6 @@ static bool handle_http_request(int sockfd, User_list *user_list){ if(should_player_quit(user_list)){ change_player_status(id,user_list, QUIT); response(buff,sockfd, "7_gameover.html"); - // free_request(req); - // keep_alive = 0; - // return false; } // checks if other player has not completed previous round @@ -302,7 +296,6 @@ static bool handle_http_request(int sockfd, User_list *user_list){ } else{ char* keyword = add_keyword(id, user_list, req->body); - printf("keyword is %s\n", keyword); // game ends as submitted keyword has been submitted by other player if(has_match_ended(user_list, keyword, id)){ response(buff,sockfd, "6_endgame.html"); @@ -329,53 +322,37 @@ static bool handle_http_request(int sockfd, User_list *user_list){ if (req->method == POST) { size_t name_len = strlen(req->body+5); - printf("name string is: %s, size/len is: %ld\n\n", req->body+5, name_len); - char *name = calloc(name_len+1, sizeof(char)); + char *name = calloc(name_len+1, sizeof(char)); assert(name); memcpy(name,req->body+5, name_len); if (name != NULL){ for (int i=0; i < user_list->n_users; i++){ if(user_list->users[i]->id == id){ user_list->users[i]->name = name; - printf("name is %s\n", user_list->users[i]->name); } } - // get_request(buff,sockfd, "2_start.html"); text_render_response(buff,sockfd, "2_start.html", req->body+5); } } - // user is created + // new user is created else if (req->method == GET && !hash_table_has(req->header, "Cookie:")) { - // printf("matches a / url but url isize is %zu\n\n", strlen(req->url)); + // create a new user and assign it a new cookie Response* resp = initialise_session(req); char* resp_string = parse_response(resp); - // printf("COOKIE CREATING RESP %s\n", resp_string); char* cookie = hash_table_get(resp->header, "Set-cookie: "); - // printf("the cookie token is %s*****\n", cookie); User* new_player = new_user(atoi(cookie+3)); add_user(new_player, user_list); - // printf("before player sesh"); player_session(buff, sockfd, "1_welcome.html", resp_string); free(cookie); free(resp_string); free_response(resp); - - // ensures user is not already playing/in system - for(int i =0; i< user_list->n_users; i++){ - if(sockfd == user_list->users[i]->id){ - return false; - } - } - // User* new_player = new_user(sockfd); - // add_user(new_player, users); - // response(buff,sockfd, "1_welcome.html"); } else if (req->method == GET){ if (user != NULL){ - printf("name of user is %s\n", user->name); // Resets returning user to round 1 + user->round = 0; text_render_response(buff,sockfd, "2_start.html", user->name); } } @@ -390,25 +367,6 @@ static bool handle_http_request(int sockfd, User_list *user_list){ perror("write"); return false; } - printf("the numer of users is %d\n", user_list->n_users); - for(int i=0; i < user_list->n_users; i++){ - printf("USER ID %d", user_list->users[i]->id); - if(user_list->users[i]->status == READY){ - printf("is ready\n"); - } - if(user_list->users[i]->status == WAIT){ - printf("is wait\n"); - } - if(user_list->users[i]->status == QUIT){ - printf("is quit\n"); - } - if(user_list->users[i]->status == COMPLETE){ - printf("is complete\n"); - } - if(user_list->users[i]->status == RESTART){ - printf("is restart\n"); - } - } free(cookie); free_request(req); return true; @@ -527,7 +485,5 @@ int main(int argc, char * argv[]) } } } - printf("break loop"); - free_users(user_list); return 0; } diff --git a/user.c b/user.c index 93d925999fc11b9d9ce9262f47f7476bcb815e37..800fafd59b9f244e6e743c7a2a25f86faa808017 100644 --- a/user.c +++ b/user.c @@ -12,7 +12,7 @@ // implementation specific constants for users #define INITIAL_KEYWORDS 5 -#define INITAL_N_USERS 5 +#define INITAL_N_USERS 10 #define INITIAL_KEYWORD_LENGTH 30 User* new_user(int id){ @@ -119,11 +119,16 @@ bool should_player_quit(User_list* user_list){ /** * Checks if any player has quit, and tells player to quit if so * */ + int count = 0; for(int i=0; i < user_list->n_users; i++){ if (user_list->users[i]->status == QUIT){ - return true; + count++; } } + // checking edge case of 3 users, with one inactive user that has quit + if(count + 1 == user_list->n_users){ + return true; + } return false; } bool players_ready(User_list* user_list){