12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package fr.insa.clavardator.lib.network;
-
- import fr.insa.clavardator.lib.util.ErrorCallback;
-
- import java.io.IOException;
- import java.net.ServerSocket;
- import java.net.Socket;
-
- import static fr.insa.clavardator.lib.network.TcpConnection.TCP_PORT;
-
- public class TcpListener {
- Acceptor acceptor = null;
- int port = TCP_PORT;
-
- public TcpListener() {
- }
-
- public TcpListener(int port) {
- this.port = port;
- }
-
-
- /**
- * Start accepting incoming connections
- *
- * @param callback The function to call when a user connects
- * @param errorCallback The function to call on error
- */
- public void acceptConnection(NewConnectionCallback callback, ErrorCallback errorCallback) {
- if (acceptor != null) {
- acceptor.stopAccepting();
- }
- acceptor = new Acceptor(port, 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;
- private int port;
-
- public Acceptor(int port, NewConnectionCallback callback, ErrorCallback errorCallback) {
- this.port = port;
- this.callback = callback;
- this.errorCallback = errorCallback;
- }
-
- @Override
- public void run() {
- try {
- server = new ServerSocket(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);
- }
- }
|