package com.kritsit.casetracker.server;
import com.kritsit.casetracker.server.domain.services.IListeningService;
import com.kritsit.casetracker.server.domain.services.SocketListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
public class CaseTrackerServer {
private static final String VERSION = "1.0.0-BETA";
private static final Logger logger = LoggerFactory.getLogger(CaseTrackerServer.class);
private IListeningService listener;
public CaseTrackerServer() {
listener = new SocketListener();
}
public static void main(String[] args) {
if (args.length == 0) {
logger.debug("Starting server with default preferences");
CaseTrackerServer server = new CaseTrackerServer();
server.listen(1244);
} else if ("-v".equals(args[0]) || "--version".equals(args[0])) {
logger.debug("Printing version information");
logger.info("CaseTracker Server (GPLv3)\nVersion: {}", getVersion());
System.out.println("CaseTracker Server (GPLv3)\nVersion: " + getVersion());
} else {
try {
String arg = args[0].trim().replace("-", "");
int port = Integer.parseInt(arg);
CaseTrackerServer server = new CaseTrackerServer();
server.listen(port);
} catch (NumberFormatException ex) {
logger.error("Port argument invalid");
throw new RuntimeException("Port argument invalid");
}
}
}
public static String getVersion() {
return VERSION;
}
private void listen(int port) {
try {
listener.listen(port);
} catch (IOException ex) {
logger.error("Unable to listen on port {}", port, ex);
throw new RuntimeException("Unable to listen for connections on port " + port);
} catch (IllegalArgumentException ex) {
logger.error("Port {} not valid", port, ex);
throw new RuntimeException("Port " + port + " not valid");
}
}
public void close() {
try {
listener.stop();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}