package net.pterodactylus.xdcc.core;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.OutputStream;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import net.pterodactylus.irc.Connection;
import net.pterodactylus.irc.ConnectionBuilder;
+import net.pterodactylus.irc.DccReceiver;
import net.pterodactylus.irc.event.ChannelMessageReceived;
import net.pterodactylus.irc.event.ConnectionEstablished;
+import net.pterodactylus.irc.event.DccSendReceived;
import net.pterodactylus.irc.util.MessageCleaner;
import net.pterodactylus.irc.util.RandomNickname;
import net.pterodactylus.xdcc.core.event.BotAdded;
/** The currently known bots. */
private final Table<Network, String, Bot> networkBots = HashBasedTable.create();
+ /** The current DCC receivers. */
+ private final Collection<DccReceiver> dccReceivers = Sets.newHashSet();
+
/**
* Creates a new core.
*
return networkBots.values();
}
+ /**
+ * Returns the currently active DCC receivers.
+ *
+ * @return The currently active DCC receivers
+ */
+ public Collection<DccReceiver> dccReceivers() {
+ return dccReceivers;
+ }
+
//
// ACTIONS
//
channels.add(channel);
}
+ /**
+ * Fetches the given pack from the given bot.
+ *
+ * @param bot
+ * The bot to fetch the pack from
+ * @param pack
+ * The pack to fetch
+ */
+ public void fetch(Bot bot, Pack pack) {
+ Connection connection = networkConnections.get(bot.network());
+ if (connection == null) {
+ return;
+ }
+
+ try {
+ connection.sendMessage(bot.name(), "XDCC SEND " + pack.id());
+ } catch (IOException ioe1) {
+ logger.log(Level.WARNING, "Could not send message to bot!", ioe1);
+ }
+ }
+
//
// ABSTRACTIDLESERVICE METHODS
//
logger.fine(String.format("Bot %s now has %d packs.", bot, bot.packs().size()));
}
+ /**
+ * Starts a DCC download.
+ *
+ * @param dccSendReceived
+ * The DCC SEND event
+ */
+ @Subscribe
+ public void dccSendReceived(DccSendReceived dccSendReceived) {
+ logger.info(String.format("Starting download of %s.", dccSendReceived.filename()));
+ try {
+ OutputStream fileOutputStream = new FileOutputStream(new File("/home/bombe/Temp", dccSendReceived.filename()));
+ DccReceiver dccReceiver = new DccReceiver(dccSendReceived.inetAddress(), dccSendReceived.port(), dccSendReceived.filename(), dccSendReceived.filesize(), fileOutputStream);
+ dccReceivers.add(dccReceiver);
+ dccReceiver.start();
+ } catch (FileNotFoundException fnfe1) {
+ logger.log(Level.WARNING, "Could not open file for download!", fnfe1);
+ }
+ }
+
//
// PRIVATE METHODS
//