Moved connection code from server to sessioncontroller

Added implements runnable to controller super class.
Added Thread management to server.
Added testcode to GameController
Added InputController to client
Added Objective to Game package
Added Timer to game package
Removed ScoreController
This commit is contained in:
MickWerf
2020-05-11 17:04:33 +02:00
parent 6b25356ee3
commit 1c7b47dc57
13 changed files with 201 additions and 83 deletions

View File

@@ -1,95 +1,42 @@
package netwerkprog.game.server;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Net;
import com.badlogic.gdx.net.ServerSocketHints;
import com.badlogic.gdx.net.SocketHints;
import netwerkprog.game.server.controllers.SessionController;
import netwerkprog.game.server.controllers.game.GameController;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.HashMap;
public class Server {
private ServerSocket serverSocket;
private SessionController sessionController;
private Thread sessionThread;
private HashMap<String, Thread> gameThreads;
public static final int PORT = 8000;
private ArrayList<ServerClient> clients = new ArrayList<>();
private HashMap<String, Thread> clientThreads = new HashMap<>();
public static void main(String[] args) {
Server server = new Server();
server.connect();
server.start();
}
public void connect() {
try {
this.serverSocket = new ServerSocket(PORT);
boolean running = true;
while (running) {
System.out.println("[SERVER] listening on port " + PORT);
Socket socket = serverSocket.accept();
private void start() {
this.sessionController = new SessionController();
System.out.println("[SERVER] got new client on " + socket.getInetAddress().getHostAddress());
DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());
DataInputStream inputStream = new DataInputStream(socket.getInputStream());
this.gameThreads = new HashMap<>();
this.sessionThread = new Thread(sessionController);
outputStream.writeUTF("Enter nickname: ");
String nickname = inputStream.readUTF();
System.out.println("[SERVER] got nickname " + nickname);
ServerClient serverClient = new ServerClient(nickname, socket,this);
Thread t = new Thread(serverClient);
t.start();
clientThreads.put(nickname,t);
this.clients.add(serverClient);
sendMessage(nickname, "--- Welcome! ---\nPeople online : " + clients.size());
clients.forEach(yeet -> sendToEveryoneExcept(nickname,nickname + " joined the server! [" + socket.getInetAddress().getHostAddress() + "]"));
}
this.serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
run();
}
public void sendToEveryone(String text) {
for (ServerClient serverClient : clients) {
serverClient.writeUTF(text);
}
private void run() {
setTestGames();
}
public void sendToEveryoneExcept(String name, String text) {
for (ServerClient serverClient : clients) {
if (!serverClient.getName().equals(name))
serverClient.writeUTF(text);
private void setTestGames() {
for (int i = 0; i < 10; i++) {
gameThreads.put("game " + i, new Thread(new GameController(i)));
}
}
public void sendMessage(String name, String text) {
for (ServerClient serverClient : clients) {
if (serverClient.getName().equals(name)) {
serverClient.writeUTF(text);
break;
}
for (String thread : gameThreads.keySet()) {
gameThreads.get(thread).start();
}
}
public void removeClient(ServerClient serverClient) {
this.clients.remove(serverClient);
try {
this.clientThreads.get(serverClient.getName()).join();
} catch (InterruptedException e) {
e.printStackTrace();
}
this.clientThreads.remove(serverClient.getName());
this.sendToEveryone(serverClient.getName() + " left!");
}
}