package com.kritsit.casetracker.server.domain.services;
import com.kritsit.casetracker.server.datalayer.IPersistenceService;
import com.kritsit.casetracker.server.domain.Domain;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketListener implements IListeningService {
private final Logger logger = LoggerFactory.getLogger(SocketListener.class);
private boolean listening;
private ServerSocket serverSocket;
private Socket socket;
private IPersistenceService persistence;
public SocketListener() {
listening = false;
}
public void listen(int port) throws IllegalArgumentException, IOException {
if (port < 1 || port > 65535) {
throw new IllegalArgumentException("Port number not in range");
}
serverSocket = new ServerSocket(port);
persistence = Domain.getPersistenceService();
persistence.open();
if (persistence.isOpen()) {
listening = true;
logger.info("Listening for connections");
while (listening) {
socket = serverSocket.accept();
ClientConnectionThread connection = new ClientConnectionThread(socket);
Thread t = new Thread(connection);
t.start();
}
}
}
public boolean isListening() {
return listening;
}
public void stop() throws IOException {
try {
logger.info("Closing connection");
listening = false;
serverSocket.close();
} catch (NullPointerException ex) {
logger.debug("Connection is null");
}
}
}