Files
flufflparty-/Server/src/Server.java
T
2023-02-02 23:17:04 +01:00

146 lines
4.9 KiB
Java

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<String, Room> 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;
}
}