Server-Multithreaded-socket

Concurrent event booking management system in Java.

Operations:
• "Create (Name, Seats)" method to add a new event and its available seats only if an event with the same name does not already exist.
• “Add (Name, Seats)” method to add new places to a specific event
• "Book (Name, Seats)" method to reserve seats for a given event, the method must be blocking if there are not enough seats
• "List of Events" method to display events and seats still available on the console
• "Close (Name)" method that cancels the event and unlocks all customers waiting for seats

The concurrent data structure is HashMap managed in such a way as to parallelize, if possible, operations on independent events

Clients use TCP communication to send requests (reservation and event list) to the server.

The server has a multithreaded architecture based on ServerSocket over TCP and manages client reservation requests by confining the sockets generated by a request in a separate task.

A minimal GUI is associated with the client program to display the list of events and send booking requests.