Untitled
unknown
plain_text
2 years ago
7.6 kB
9
Indexable
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
//Server
public class MovieTicketServer {
private static final String TICKET_FILE = "tickets.txt";
private static Map<Integer, MovieTicket> tickets = new ConcurrentHashMap<>();
private static int ticketCount = 0;
public static void main(String[] args) {
loadTickets();
try {
ServerSocket serverSocket = new ServerSocket(12345);
System.out.println("Server is running...");
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected.");
Thread clientThread = new ClientHandler(clientSocket);
clientThread.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static class ClientHandler extends Thread {
private Socket clientSocket;
private PrintWriter out;
private BufferedReader in;
public ClientHandler(Socket socket) {
this.clientSocket = socket;
}
@Override
public void run() {
try {
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String message;
while ((message = in.readLine()) != null) {
if (message.equals("BOOK")) {
bookTicket();
} else if (message.equals("LIST")) {
listBookedTickets();
} else if (message.equals("EXIT")) {
break;
}
}
in.close();
out.close();
clientSocket.close();
System.out.println("Client disconnected.");
} catch (IOException e) {
e.printStackTrace();
}
}
private void bookTicket() {
// Simulate booking a ticket
MovieTicket ticket = findAvailableTicket();
if (ticket != null) {
ticket.setBuyerName("John Doe");
updateTicketFile();
out.println("Ticket booked: " + ticket.toString());
} else {
out.println("No available tickets.");
}
}
private void listBookedTickets() {
// Send the list of booked tickets to the client
out.println("Booked Tickets: " + getBookedTickets().toString());
}
private synchronized MovieTicket findAvailableTicket() {
for (MovieTicket ticket : tickets.values()) {
if (ticket.getBuyerName() == null) {
ticket.setBuyerName("John Doe");
return ticket;
}
}
return null;
}
private synchronized List<MovieTicket> getBookedTickets() {
List<MovieTicket> booked = new ArrayList<>();
for (MovieTicket ticket : tickets.values()) {
if (ticket.getBuyerName() != null) {
booked.add(ticket);
}
}
return booked;
}
private synchronized void updateTicketFile() {
try (FileWriter writer = new FileWriter(TICKET_FILE)) {
for (MovieTicket ticket : tickets.values()) {
writer.write(ticket.toFileString() + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
private static void loadTickets() {
try (BufferedReader reader = new BufferedReader(new FileReader(TICKET_FILE))) {
String line;
while ((line = reader.readLine()) != null) {
MovieTicket ticket = MovieTicket.fromFileString(line);
if (ticket != null) {
tickets.put(ticket.getTicketId(), ticket);
if (ticket.getTicketId() > ticketCount) {
ticketCount = ticket.getTicketId();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
//Client
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class MovieTicketClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 12345);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
Scanner consoleInput = new Scanner(System.in);
String message;
do {
System.out.println("Enter a command (BOOK, LIST, EXIT):");
message = consoleInput.nextLine().trim().toUpperCase();
out.println(message);
String response;
while (!(response = in.readLine()).isEmpty()) {
System.out.println(response);
}
} while (!message.equals("EXIT"));
in.close();
out.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//MovieTicket Class:
import java.util.StringTokenizer;
public class MovieTicket {
private int ticketId;
private String movieName;
private String seat;
private String showDate;
private String startTime;
private String buyerName;
private double price;
public MovieTicket(int ticketId, String movieName, String seat, String showDate, String startTime, String buyerName, double price) {
this.ticketId = ticketId;
this.movieName = movieName;
this.seat = seat;
this.showDate = showDate;
this.startTime = startTime;
this.buyerName = buyerName;
this.price = price;
}
public int getTicketId() {
return ticketId;
}
public String getMovieName() {
return movieName;
}
public String getSeat() {
return seat;
}
public String getShowDate() {
return showDate;
}
public String getStartTime() {
return startTime;
}
public String getBuyerName() {
return buyerName;
}
public void setBuyerName(String buyerName) {
this.buyerName = buyerName;
}
public double getPrice() {
return price;
}
public String toFileString() {
return ticketId + "," + movieName + "," + seat + "," + showDate + "," + startTime + "," + (buyerName == null ? "null" : buyerName) + "," + price;
}
@Override
public String toString() {
return "Ticket #" + ticketId + ": " + movieName + " - Seat " + seat + " - Date: " + showDate + " - Time: " + startTime + " - Price: $" + price + " - Buyer: " + (buyerName == null ? "Not booked" : buyerName);
}
public static MovieTicket fromFileString(String fileString) {
StringTokenizer tokenizer = new StringTokenizer(fileString, ",");
int ticketId = Integer.parseInt(tokenizer.nextToken());
String movieName = tokenizer.nextToken();
String seat = tokenizer.nextToken();
Editor is loading...