X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fxdcc%2Fui%2Fstdin%2FNetworkAdapter.java;h=bfbaee5d172d934aa4bd4d13429a26ace88f3b8a;hb=f76ee64d2cd93a0439c6306e1fcf6230c633590c;hp=87fad776c701b85c8addf8b6187ef71c85305513;hpb=f3cc380e2d4bdb0e6cd3d975531d18eee69dad01;p=xudocci.git diff --git a/src/main/java/net/pterodactylus/xdcc/ui/stdin/NetworkAdapter.java b/src/main/java/net/pterodactylus/xdcc/ui/stdin/NetworkAdapter.java index 87fad77..bfbaee5 100644 --- a/src/main/java/net/pterodactylus/xdcc/ui/stdin/NetworkAdapter.java +++ b/src/main/java/net/pterodactylus/xdcc/ui/stdin/NetworkAdapter.java @@ -28,7 +28,9 @@ import java.util.concurrent.TimeUnit; import net.pterodactylus.xdcc.core.Core; +import com.google.common.eventbus.EventBus; import com.google.common.util.concurrent.AbstractExecutionThreadService; +import com.google.common.util.concurrent.MoreExecutors; /** * Listens on a TCP port and feeds input and output to a {@link CommandReader}. @@ -37,22 +39,27 @@ import com.google.common.util.concurrent.AbstractExecutionThreadService; */ public class NetworkAdapter extends AbstractExecutionThreadService { - /** The core being controlled. */ - private final Core core; + /** The event bus. */ + private final EventBus eventBus; + + private final CommandReaderFactory commandReaderFactory; + private final int port; /** * Creates a new network acceptor. * - * @param core - * The core being controlled + * @param eventBus + * @param commandReaderFactory */ - public NetworkAdapter(Core core) { - this.core = core; + public NetworkAdapter(EventBus eventBus, CommandReaderFactory commandReaderFactory, int port) { + this.eventBus = eventBus; + this.commandReaderFactory = commandReaderFactory; + this.port = port; } @Override protected void run() throws Exception { - ServerSocket serverSocket = new ServerSocket(45678); + ServerSocket serverSocket = new ServerSocket(port); serverSocket.setSoTimeout((int) TimeUnit.SECONDS.toMillis(1)); while (isRunning()) { try { @@ -61,7 +68,33 @@ public class NetworkAdapter extends AbstractExecutionThreadService { OutputStream socketOutputStream = clientSocket.getOutputStream(); final InputStreamReader socketInputStreamReader = new InputStreamReader(socketInputStream, "UTF-8"); final OutputStreamWriter socketOutputStreamWriter = new OutputStreamWriter(socketOutputStream, "UTF-8"); - new CommandReader(core, socketInputStreamReader, socketOutputStreamWriter).start(); + final CommandReader commandReader = commandReaderFactory.create(socketInputStreamReader, socketOutputStreamWriter); + eventBus.register(commandReader); + commandReader.addListener(new Listener() { + + @Override + public void starting() { + } + + @Override + public void running() { + } + + @Override + public void stopping(State from) { + } + + @Override + public void terminated(State from) { + eventBus.unregister(commandReader); + } + + @Override + public void failed(State from, Throwable failure) { + eventBus.unregister(commandReader); + } + }, MoreExecutors.sameThreadExecutor()); + commandReader.start(); } catch (SocketTimeoutException ste1) { /* ignore, loop. */ }