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

@@ -3,4 +3,12 @@ package netwerkprog.game.client.controllers;
import netwerkprog.game.util.Controller;
public class GrapicsController extends Controller {
public GrapicsController() {
}
@Override
public void run() {
}
}

View File

@@ -0,0 +1,14 @@
package netwerkprog.game.client.controllers;
import netwerkprog.game.util.Controller;
public class InputController extends Controller {
public InputController() {
}
@Override
public void run() {
}
}

View File

@@ -3,4 +3,12 @@ package netwerkprog.game.client.controllers;
import netwerkprog.game.util.Controller;
public class SessionController extends Controller {
public SessionController() {
}
@Override
public void run() {
}
}

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!");
}
}

View File

@@ -1,5 +1,7 @@
package netwerkprog.game.server;
import netwerkprog.game.server.controllers.SessionController;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
@@ -10,10 +12,10 @@ public class ServerClient implements Runnable {
private DataOutputStream out;
private Socket socket;
private String name;
private Server server;
private SessionController server;
private boolean isConnected = false;
public ServerClient(String name, Socket socket, Server server) {
public ServerClient(String name, Socket socket, SessionController server) {
this.name = name;
this.server = server;
this.socket = socket;

View File

@@ -1,6 +1,104 @@
package netwerkprog.game.server.controllers;
import netwerkprog.game.server.Server;
import netwerkprog.game.server.ServerClient;
import netwerkprog.game.util.Controller;
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 SessionController extends Controller {
private ServerSocket serverSocket;
private ArrayList<ServerClient> clients = new ArrayList<>();
private HashMap<String, Thread> clientThreads = new HashMap<>();
public SessionController() {
}
public void connect() {
try {
this.serverSocket = new ServerSocket(Server.PORT);
System.out.println("[SERVER] listening on port " + Server.PORT);
Socket socket = serverSocket.accept();
System.out.println("[SERVER] got new client on " + socket.getInetAddress().getHostAddress());
DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());
DataInputStream inputStream = new DataInputStream(socket.getInputStream());
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();
}
}
public void sendToEveryone(String text) {
for (ServerClient serverClient : clients) {
serverClient.writeUTF(text);
}
}
public void sendToEveryoneExcept(String name, String text) {
for (ServerClient serverClient : clients) {
if (!serverClient.getName().equals(name))
serverClient.writeUTF(text);
}
}
public void sendMessage(String name, String text) {
for (ServerClient serverClient : clients) {
if (serverClient.getName().equals(name)) {
serverClient.writeUTF(text);
break;
}
}
}
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!");
}
@Override
public void run() {
boolean running = true;
while (running) {
System.out.println("Session thread active.");
connect();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

View File

@@ -3,4 +3,12 @@ package netwerkprog.game.server.controllers.game;
import netwerkprog.game.util.Controller;
public class CharacterController extends Controller {
public CharacterController() {
}
@Override
public void run() {
}
}

View File

@@ -2,15 +2,36 @@ package netwerkprog.game.server.controllers.game;
import netwerkprog.game.util.Controller;
import java.util.HashMap;
public class GameController extends Controller {
private int score;
private Timer timer;
private final CharacterController characterController;
private final ObjectController objectController;
private final ScoreController scoreController;
private HashMap<String, Objective> objectives;
public GameController() {
private final int id;
public GameController(int id) {
this.characterController = new CharacterController();
this.objectController = new ObjectController();
this.scoreController = new ScoreController();
this.id = id;
}
@Override
public void run() {
boolean running = true;
while (running) {
System.out.println("game thread " + id + "active");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

View File

@@ -3,4 +3,12 @@ package netwerkprog.game.server.controllers.game;
import netwerkprog.game.util.Controller;
public class ObjectController extends Controller {
public ObjectController() {
}
@Override
public void run() {
}
}

View File

@@ -0,0 +1,4 @@
package netwerkprog.game.server.controllers.game;
public class Objective {
}

View File

@@ -1,6 +0,0 @@
package netwerkprog.game.server.controllers.game;
import netwerkprog.game.util.Controller;
public class ScoreController extends Controller {
}

View File

@@ -0,0 +1,6 @@
package netwerkprog.game.server.controllers.game;
public class Timer {
public Timer() {
}
}

View File

@@ -1,5 +1,5 @@
package netwerkprog.game.util;
public abstract class Controller {
public abstract class Controller implements Runnable {
}