summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/build.gradle48
-rw-r--r--server/src/kz/ilotterytea/maxon/MaxonServer.java52
-rw-r--r--server/src/kz/ilotterytea/maxon/ServerLauncher.java8
-rw-r--r--server/src/main/resources/logback.xml15
4 files changed, 123 insertions, 0 deletions
diff --git a/server/build.gradle b/server/build.gradle
new file mode 100644
index 0000000..1dedae1
--- /dev/null
+++ b/server/build.gradle
@@ -0,0 +1,48 @@
+sourceCompatibility = 17
+sourceSets.main.java.srcDirs = ["src/"]
+
+project.ext.mainClassName = "kz.ilotterytea.maxon.ServerLauncher"
+
+import org.gradle.internal.os.OperatingSystem
+
+tasks.register('run', JavaExec) {
+ dependsOn classes
+ main = project.mainClassName
+ classpath = sourceSets.main.runtimeClasspath
+ standardInput = System.in
+ workingDir = project.rootDir
+ ignoreExitValue = true
+
+ if (OperatingSystem.current() == OperatingSystem.MAC_OS) {
+ // Required to run on macOS
+ jvmArgs += "-XstartOnFirstThread"
+ }
+}
+
+tasks.register('debug', JavaExec) {
+ dependsOn classes
+ main = project.mainClassName
+ classpath = sourceSets.main.runtimeClasspath
+ standardInput = System.in
+ workingDir = project.assetsDir
+ ignoreExitValue = true
+ debug = true
+}
+
+tasks.register('dist', Jar) {
+ archiveFileName = "${appName}-server.jar"
+ duplicatesStrategy(DuplicatesStrategy.EXCLUDE)
+ manifest {
+ attributes 'Main-Class': project.mainClassName
+ }
+ dependsOn configurations.runtimeClasspath
+ from {
+ configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
+ }
+ with jar
+}
+
+
+dist.dependsOn classes
+
+eclipse.project.name = appName + "-server"
diff --git a/server/src/kz/ilotterytea/maxon/MaxonServer.java b/server/src/kz/ilotterytea/maxon/MaxonServer.java
new file mode 100644
index 0000000..7a38a7f
--- /dev/null
+++ b/server/src/kz/ilotterytea/maxon/MaxonServer.java
@@ -0,0 +1,52 @@
+package kz.ilotterytea.maxon;
+
+import org.java_websocket.WebSocket;
+import org.java_websocket.handshake.ClientHandshake;
+import org.java_websocket.server.WebSocketServer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.InetSocketAddress;
+
+public class MaxonServer extends WebSocketServer {
+ private static MaxonServer instance;
+
+ private final Logger log;
+
+ private MaxonServer() {
+ super(new InetSocketAddress(31084));
+ this.log = LoggerFactory.getLogger(MaxonServer.class);
+ }
+
+ @Override
+ public void onOpen(WebSocket conn, ClientHandshake handshake) {
+ log.info("{} connected!", conn.getRemoteSocketAddress().getAddress().getHostAddress());
+ }
+
+ @Override
+ public void onClose(WebSocket conn, int code, String reason, boolean remote) {
+ log.info("Connection {} has been closed! ({} {} {})", conn, code, reason, remote);
+ }
+
+ @Override
+ public void onMessage(WebSocket conn, String message) {
+ log.info("{} says {}", conn, message);
+ }
+
+ @Override
+ public void onError(WebSocket conn, Exception ex) {
+ log.error("Something went wrong", ex);
+ }
+
+ @Override
+ public void onStart() {
+ log.info("Running the server on port {}!", getPort());
+ setConnectionLostTimeout(0);
+ setConnectionLostTimeout(100);
+ }
+
+ public static MaxonServer getInstance() {
+ if (instance == null) instance = new MaxonServer();
+ return instance;
+ }
+}
diff --git a/server/src/kz/ilotterytea/maxon/ServerLauncher.java b/server/src/kz/ilotterytea/maxon/ServerLauncher.java
new file mode 100644
index 0000000..4fdd174
--- /dev/null
+++ b/server/src/kz/ilotterytea/maxon/ServerLauncher.java
@@ -0,0 +1,8 @@
+package kz.ilotterytea.maxon;
+
+public class ServerLauncher {
+ public static void main(String[] args) {
+ MaxonServer server = MaxonServer.getInstance();
+ server.start();
+ }
+}
diff --git a/server/src/main/resources/logback.xml b/server/src/main/resources/logback.xml
new file mode 100644
index 0000000..4b08185
--- /dev/null
+++ b/server/src/main/resources/logback.xml
@@ -0,0 +1,15 @@
+<configuration>
+
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <!-- encoders are assigned the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
+ <encoder>
+ <pattern>%cyan(%d{HH:mm:ss.SSS}) %gray([%thread]) %highlight(%-5level) %magenta(%logger{36}) - %msg%n
+ </pattern>
+ </encoder>
+ </appender>
+
+ <root level="info">
+ <appender-ref ref="STDOUT"/>
+ </root>
+</configuration>