import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; public class Server { private ServerSocket serverSocket; private HashMap rooms = new HashMap<>(); //hier ArrayList für public rooms private final Server server = this; private static DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); public static String getDateTime() { return dtf.format(LocalDateTime.now()); } public void deleteRoom(String code) { rooms.get(code).closeRoom(); rooms.remove(code); System.out.println("[" + getDateTime() + "] Room" + code + " successfully deleted"); } public void start() { try { serverSocket = new ServerSocket(8051); System.out.println("[" + getDateTime() + "] Server started! IP 185.245.96.48 PORT 8051"); while(true) { Socket tempClient = serverSocket.accept(); System.out.println("[" + getDateTime() + "] Client with IP " + tempClient.getInetAddress().getHostName() + " connected!"); new Thread(new Runnable() { @Override public void run() { Socket client = tempClient; try { DataInputStream input = new DataInputStream(client.getInputStream()); DataOutputStream output = new DataOutputStream(client.getOutputStream()); byte[] readData = new byte[10]; input.read(readData); switch(readData[0]) { //hier case 3 für public match making //dsfjlksdfjlöasdfjlsdkjflksdjflksdjflksdjflksdjflksdjflksdjflkjsdlkfjsdlkfsdjlkfsdlkfjsdlkfjsdlkfjlsdkfjlsdkjfldksjfjlk //fsjfklsdjflksdjflsdjflksdjflksdfjlksdjflksdjflksdjflksdjflksdjflksdjflksdjflksdjflksdjflsdkjflksdjflksdjflksdjflksdjf //schleife um zu checken ob ein offener room existiert (Liste) //ansonsten einen neuen room erstellen und zur liste inhzufügen case 2: byte[] code = generateRoomCode(); output.write(code); Room room = new Room(new String(code, StandardCharsets.US_ASCII), server); rooms.put(new String(code, StandardCharsets.US_ASCII), room); System.out.println("[" + getDateTime() + "] Room " + new String(code, StandardCharsets.US_ASCII) + " successfully created!"); break; case 1: input.read(readData); String roomCode = new String(readData, StandardCharsets.US_ASCII); input.read(readData); String name = new String(readData, StandardCharsets.US_ASCII); name = name.replace("?", " "); if(rooms.containsKey(roomCode)) { Client client1 = new Client(output, input, client, name); rooms.get(roomCode).addClient(client1); } else { output.write(new byte[]{127, 0, 0, 0, 0, 0, 0, 0, 0, 0}); } break; } } catch (Exception e){ } } }).start(); } } catch(Exception e){} } private byte[] generateRoomCode() { byte[] code = new byte[10]; for(int i = 0; i < code.length; i++) { if(i < code.length / 2) { code[i] = (byte)(Math.random() * 8 + 49); } else { code[i] = (byte)(Math.random() * 25 + 97); } } String roomCode = new String(code, StandardCharsets.US_ASCII); //avoide double codes (just in case^^) if(rooms.containsKey(roomCode)) { code = generateRoomCode(); } return code; } }