Use a connection factory instead of a connection builder.
[xudocci.git] / src / main / java / net / pterodactylus / xdcc / main / Main.java
index 14e3bda..c9b7c5b 100644 (file)
 
 package net.pterodactylus.xdcc.main;
 
+import static com.lexicalscope.jewel.cli.CliFactory.parseArguments;
+
 import java.io.File;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.concurrent.CopyOnWriteArraySet;
 import java.util.concurrent.Executors;
-import java.util.logging.ConsoleHandler;
-import java.util.logging.Formatter;
-import java.util.logging.Level;
-import java.util.logging.LogRecord;
-import java.util.logging.Logger;
 
-import net.pterodactylus.irc.Connection;
+import net.pterodactylus.irc.ConnectionFactory;
+import net.pterodactylus.irc.DefaultConnectionFactory;
 import net.pterodactylus.xdcc.core.Core;
 import net.pterodactylus.xdcc.data.Channel;
+import net.pterodactylus.xdcc.data.Download;
 import net.pterodactylus.xdcc.data.Network;
 import net.pterodactylus.xdcc.data.Network.NetworkBuilder;
 import net.pterodactylus.xdcc.data.Network.ServerBuilder;
 import net.pterodactylus.xdcc.ui.stdin.CommandReader;
 import net.pterodactylus.xdcc.ui.stdin.NetworkAdapter;
-import net.pterodactylus.xdcc.ui.telnet.TelnetInterface;
 
 import com.google.common.eventbus.AsyncEventBus;
 import com.google.common.eventbus.EventBus;
+import com.lexicalscope.jewel.cli.Option;
 import org.codehaus.jackson.map.ObjectMapper;
 
 /**
@@ -56,25 +56,13 @@ public class Main {
 
        public static void main(String... arguments) throws Exception {
 
-               ConsoleHandler consoleHandler = new ConsoleHandler();
-               consoleHandler.setFormatter(new Formatter() {
-
-                       @Override
-                       public String format(LogRecord logRecord) {
-                               return String.format("%1$tF %1$tT %2$s %3$s\n", logRecord.getMillis(), logRecord.getLoggerName(), logRecord.getMessage());
-                       }
-               });
-               consoleHandler.setLevel(Level.ALL);
-               Logger.getLogger("").removeHandler(Logger.getLogger("").getHandlers()[0]);
-               Logger.getLogger("").addHandler(consoleHandler);
-               Logger.getLogger("").setLevel(Level.ALL);
-               Logger.getLogger(Connection.class.getName()).setLevel(Level.INFO);
-               Logger.getLogger(Core.class.getName()).setLevel(Level.INFO);
+               Parameters parameters = parseArguments(Parameters.class, arguments);
 
                EventBus eventBus = new AsyncEventBus(Executors.newSingleThreadExecutor());
-               Configuration configuration = new ObjectMapper().readValue(new File("configuration.json"), Configuration.class);
+               Configuration configuration = new ObjectMapper().readValue(new File(parameters.getConfiguration()), Configuration.class);
+               ConnectionFactory connectionFactory = new DefaultConnectionFactory(eventBus);
 
-               Core core = new Core(eventBus, configuration.getTemporaryDirectory(), configuration.getFinalDirectory());
+               Core core = new Core(eventBus, connectionFactory, configuration.getTemporaryDirectory(), configuration.getFinalDirectory());
                eventBus.register(core);
 
                for (Configuration.Network network : configuration.getNetworks()) {
@@ -96,18 +84,24 @@ public class Main {
                        }
                }
 
-               CommandReader commandReader = new CommandReader(core, new InputStreamReader(System.in, "UTF-8"), new OutputStreamWriter(System.out, "UTF-8"));
-               commandReader.start();
-               eventBus.register(commandReader);
-
-               TelnetInterface telnetInterface = new TelnetInterface(core, configuration.getTelnetPort());
-               telnetInterface.start();
-               eventBus.register(telnetInterface);
+               Collection<Download> failedDownloads = new CopyOnWriteArraySet<>();
 
-               NetworkAdapter networkAcceptor = new NetworkAdapter(eventBus, core);
+               NetworkAdapter networkAcceptor = new NetworkAdapter(eventBus, (reader, writer) -> new CommandReader(core, reader, writer, failedDownloads), configuration.getTelnetPort());
                networkAcceptor.start();
 
                core.start();
        }
 
+       /**
+        * Defines the command-line parameters.
+        *
+        * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+        */
+       private interface Parameters {
+
+               @Option(longName = "configuration", description = "The configuration file", defaultValue = "configuration.json")
+               String getConfiguration();
+
+       }
+
 }