package com.alterdekim; import com.alterdekim.db.Database; import com.alterdekim.hearthhack.util.Util; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.net.ssl.*; import java.io.IOException; import java.util.LinkedList; @Slf4j public class Server implements Runnable { private SSLServerSocket serverSocket; private int portNumber; private Thread acceptThread; private LinkedList connections; private Database db; public Server(int port) { portNumber = port; connections = new LinkedList<>(); db = new Database("localhost", 5984, "hs_lobby"); try { //SSLServerSocketFactory sslssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); serverSocket = (SSLServerSocket) Util.getSocketFactory( "test.com.crt", "test.com.crt", "test.com.key", "" ).createServerSocket(portNumber,15); db.start(); } catch (Exception e) { log.error("Init failed: " + e.getMessage()); } } public void startListening() { acceptThread = new Thread(this); acceptThread.start(); } public void stopListening() { for(Connection c:connections) { c.stopListeningAndDisconnect(); } try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { try { while(true) { SSLSocket s = (SSLSocket) serverSocket.accept(); Connection c = new Connection(s, db); connections.add(c); log.info("New Connection Established From "+s.getInetAddress().toString()); } } catch(java.net.SocketException e) { log.error("Listening thread terminated with exception: " + e.getMessage()); } catch(IOException e) { log.error(e.getMessage()); } } public void removeConnection(Connection c) { connections.remove(c); } public void printConnections() { log.info("Number of connections "+connections.toString()); for(int i=0; i