package mountainrangepvp;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
import mountainrangepvp.client.ClientGame;
import mountainrangepvp.client.GameSettings;
import mountainrangepvp.engine.Log;
import mountainrangepvp.net.tcp.TcpServerInterface;
import mountainrangepvp.net.tcp.TcpServerWrapper;
import mountainrangepvp.server.LocalServerInterface;
import mountainrangepvp.server.ServerThread;
import mountainrangepvp.server.SessionConfig;
/**
* @author lachlan
*/
public class Main {
private static String USAGE = "Usage:\n" +
"\tjava -jar mountainrangepvp.jar\n" +
"\tjava -jar mountainrangepvp.jar client <server ip> <username>\n" +
"\tjava -jar mountainrangepvp.jar server <username>\n" +
"\tjava -jar mountainrangepvp.jar stress <server ip> <number of clients>";
private static void printUsageAndQuit() {
System.err.println(USAGE);
System.exit(0);
}
public static void main(String[] args) {
if (args.length > 0) {
GameSettings settings = new GameSettings();
switch (args[0]) {
case "client":
if (args.length == 3) {
settings.hosting = false;
settings.serverIP = args[1];
settings.nickname = args[2];
} else
printUsageAndQuit();
break;
case "server":
if (args.length == 2) {
settings.hosting = true;
settings.nickname = args[1];
} else
printUsageAndQuit();
break;
case "stress":
if (args.length == 3) {
StressTest.stressTest(args[1], Integer.parseInt(args[2]));
return;
} else
printUsageAndQuit();
break;
default:
printUsageAndQuit();
break;
}
new Main(settings).startGame();
} else {
LauncherGUI.laf();
LauncherGUI launcher = new LauncherGUI();
launcher.setVisible(true);
}
}
private final GameSettings settings;
public Main(GameSettings settings) {
this.settings = settings;
}
public void startGame() {
LwjglApplicationConfiguration appConfig = new LwjglApplicationConfiguration();
appConfig.title = "Mountain Range PvP";
appConfig.forceExit = false;
appConfig.fullscreen = settings.fullscreen;
appConfig.resizable = false;
appConfig.vSyncEnabled = true;
appConfig.width = settings.resolutionWidth;
appConfig.height = settings.resolutionHeight;
appConfig.depth = settings.bitDepth;
//appConfig.forceExit = true;
LwjglApplication app = new LwjglApplication(gameAdapter(), appConfig);
}
private ApplicationListener gameAdapter() {
if (settings.hosting)
return hostingAdapter();
else
return joiningAdapter();
}
private ApplicationListener hostingAdapter() {
return new ApplicationAdapter() {
LocalServerInterface localInterface;
TcpServerWrapper wrapper;
ClientGame game;
@Override
public void create() {
SessionConfig sessionConfig = new SessionConfig(settings.teamsOn);
Log serverLog = new Log("server");
Log tcpLog = new Log("tcp");
localInterface = ServerThread.startServer(serverLog, sessionConfig);
wrapper = new TcpServerWrapper(tcpLog, localInterface, settings.port);
wrapper.start();
game = new ClientGame(settings, localInterface);
game.start();
}
@Override
public void render() {
game.render();
}
@Override
public void dispose() {
game.kill();
localInterface.shutdown();
wrapper.shutdown();
}
};
}
private ApplicationListener joiningAdapter() {
return new ApplicationAdapter() {
TcpServerInterface server;
ClientGame game;
@Override
public void create() {
server = new TcpServerInterface(new Log("tcp"), settings.serverIP, settings.port);
game = new ClientGame(settings, server);
game.start();
}
@Override
public void render() {
game.render();
}
@Override
public void dispose() {
game.kill();
}
};
}
}