clavardator/src/main/java/fr/insa/clavardator/network/ConnectionListener.java
Arnaud Vergnet 46565951e8 remove logs
2020-12-16 12:06:29 +01:00

80 řádky
1,8 KiB
Java

package fr.insa.clavardator.network;
import fr.insa.clavardator.util.ErrorCallback;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import static fr.insa.clavardator.network.PeerConnection.TCP_PORT;
public class ConnectionListener {
Acceptor acceptor = null;
public ConnectionListener() {
}
/**
* Start accepting incoming connections
*
* @param callback The function to call when a user connects
* @param errorCallback The function to call on errror
*/
public void acceptConnection(NewConnectionCallback callback, ErrorCallback errorCallback) {
if (acceptor != null) {
acceptor.stopAccepting();
}
acceptor = new Acceptor(callback, errorCallback);
acceptor.start();
}
/**
* Stop accepting incoming connexions.
* Must be called before exiting the app.
*/
public void stopAccepting() {
if (acceptor != null)
acceptor.stopAccepting();
}
private static class Acceptor extends Thread {
private boolean shouldStop = false;
private final NewConnectionCallback callback;
private final ErrorCallback errorCallback;
private ServerSocket server;
public Acceptor(NewConnectionCallback callback, ErrorCallback errorCallback) {
this.callback = callback;
this.errorCallback = errorCallback;
}
@Override
public void run() {
try {
server = new ServerSocket(TCP_PORT);
while (!shouldStop) {
Socket clientSocket = server.accept();
callback.onNewConnection(clientSocket);
}
} catch (IOException e) {
if (!shouldStop)
errorCallback.onError(e);
}
}
public void stopAccepting() {
shouldStop = true;
try {
server.close();
} catch (IOException ignored) {
}
}
}
public interface NewConnectionCallback {
void onNewConnection(Socket clientSocket);
}
}