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:
@@ -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!");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user