69 lines
2.1 KiB
Java

package com.alterdekim.hearthhack.component;
import com.alterdekim.hearthhack.component.processor.Processor;
import com.alterdekim.hearthhack.util.Util;
import lombok.extern.slf4j.Slf4j;
import org.reflections.Reflections;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLSocket;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
@Slf4j
@Component
public class TcpServer {
private final int socketPort = 1119;
private SSLServerSocket serverSocket;
private List<TcpConnection> connections;
private Set<Class<? extends Processor>> processorClasses;
@Scheduled(fixedDelay = 5000)
private void start() {
try {
processorClasses = new Reflections(this.getClass().getPackageName()).getSubTypesOf(Processor.class);
if( serverSocket != null && !serverSocket.isClosed() ) {
serverSocket.close();
serverSocket = null;
}
this.connections = new LinkedList<>();
this.serverSocket = (SSLServerSocket) Util.getSocketFactory(
"test.com.crt", // "test.com.crt"
"test.com.crt", // "test.com.crt"
"test.com.key", // "test.com.key"
""
).createServerSocket(this.socketPort, 15);
while(true) {
SSLSocket s = (SSLSocket) serverSocket.accept();
TcpConnection c = new TcpConnection(s, processorClasses);
connections.add(c);
log.info("New Connection Established From {}", s.getInetAddress().toString());
}
} catch (IOException e) {
log.error(e.getMessage());
}
}
public void stopListening() {
connections.forEach(TcpConnection::stopListeningAndDisconnect);
try {
serverSocket.close();
} catch (IOException e) {
log.error(e.getMessage());
}
}
public void removeConnection(TcpConnection c) {
connections.remove(c);
}
}