Untitled
unknown
c_cpp
a year ago
4.2 kB
4
Indexable
Never
void *handle_client(void *arg) { int new_socket = *((int *) arg); /* --------------------------------------------------------------------------------*/ // Receive the client request using recv() system call char buffer[1024]; int bytes_received = recv(new_socket, buffer, 1024, 0); if (bytes_received < 0) { printf("Error receiving client request\n"); return NULL; } buffer[bytes_received] = '\0'; // Close the socket char* message = malloc(2048*sizeof(char)); message = handle_input(buffer); if ( message != NULL) { // Send the message to the client int bytes_sent = send(new_socket, message, strlen(message), 0); if (bytes_sent < 0) { printf("Error sending message to client\n"); } close(new_socket); // Mutex lock to protect the critical section static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&lock); // Access the shared resources FILE* file = fopen("server_records.txt", "a"); if (file != NULL) { fprintf(file, "Client request: %s\nServer response: %s\n\n", buffer, message); fclose(file); } pthread_mutex_unlock(&lock); } return NULL; } char* handle_input(char* data) { int i = 1; int k = 0; char seat_type[50]; char number_of_seats[50]; while ( *data != ' ') { seat_type[k++] = *(data++); } seat_type[k] = '\0'; data++; // Skip the ' ' character int p = 0; while (*data != '\n') { number_of_seats[p++] = *(data++); } number_of_seats[p] = '\0'; char* msg = malloc(1024*sizeof(char)); char* file_msg = malloc(1024 * sizeof(char)); pthread_mutex_lock(&lock_file); // lock file access FILE* file = fopen("Seat_Availability.txt", "r+"); FILE* new_file; if (file != NULL) { int found = 0; char line[500], avl_seats[50]; while (fgets(line, sizeof(line), file) != NULL) { char* token = strtok(line, " "); if (strcmp(token, seat_type) == 0) { token = strtok(NULL, " "); strcpy(avl_seats, token); found = 1; break; } } if (found) { int required_seats = atoi(number_of_seats); int available_seats = atoi(avl_seats); int remaining_seats = 0; char seats_remain[50]; if (required_seats > available_seats) { strcpy(msg,"Required Number of Seats Not Available"); } else { remaining_seats = available_seats - required_seats; sprintf(seats_remain, "%d", remaining_seats); fseek(file, -strlen(avl_seats), SEEK_CUR); // move the file pointer back to the start of the available seats value fprintf(file, "%s", seats_remain); // overwrite the old value with the new one fflush(file); sprintf(msg, "%d Seats have been booked for type %s", required_seats, seat_type); sprintf(file_msg, "FOR TYPE: %s\n%d Seats have been booked. %d Seats remaining\n\n", seat_type, required_seats, remaining_seats); new_file = fopen("server_records.txt", "a"); if (new_file != NULL) { fprintf(new_file, "%s", file_msg); fclose(new_file); } } } else { strcpy(msg,"Seat type not found!"); } } fclose(file); fclose(new_file); pthread_mutex_unlock(&lock_file); // unlock file access return msg; }