X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Firc%2FConnection.java;h=f5b29b4d32408726a9115ec63d99ff14c2e0dad5;hb=029ac191fbe3b39b323a76790ba1605a380e02e1;hp=15c8ff50793487eeb6bec3b283a81bbfe1acee05;hpb=5cc5fd2f2cc010e77448ca044c7679739add966f;p=xudocci.git diff --git a/src/main/java/net/pterodactylus/irc/Connection.java b/src/main/java/net/pterodactylus/irc/Connection.java index 15c8ff5..f5b29b4 100644 --- a/src/main/java/net/pterodactylus/irc/Connection.java +++ b/src/main/java/net/pterodactylus/irc/Connection.java @@ -45,10 +45,13 @@ import net.pterodactylus.irc.event.ChannelNicknames; import net.pterodactylus.irc.event.ChannelNotJoined; import net.pterodactylus.irc.event.ChannelNotJoined.Reason; import net.pterodactylus.irc.event.ChannelTopic; +import net.pterodactylus.irc.event.ClientQuit; import net.pterodactylus.irc.event.ConnectionEstablished; import net.pterodactylus.irc.event.ConnectionFailed; +import net.pterodactylus.irc.event.DccAcceptReceived; import net.pterodactylus.irc.event.DccSendReceived; import net.pterodactylus.irc.event.MotdReceived; +import net.pterodactylus.irc.event.NicknameChanged; import net.pterodactylus.irc.event.NicknameInUseReceived; import net.pterodactylus.irc.event.NoNicknameGivenReceived; import net.pterodactylus.irc.event.PrivateMessageReceived; @@ -241,6 +244,24 @@ public class Connection extends AbstractExecutionThreadService implements Servic connectionHandler.sendCommand("PRIVMSG", recipient, message); } + /** + * Sends a DCC RESUME request to the given recipient. + * + * @param recipient + * The recipient of the request + * @param filename + * The name of the file to resume + * @param port + * The port number from the original DCC SEND request + * @param position + * The position at which to resume the transfer + * @throws IOException + * if an I/O error occurs + */ + public void sendDccResume(String recipient, String filename, int port, long position) throws IOException { + connectionHandler.sendCommand("PRIVMSG", recipient, String.format("\u0001DCC RESUME %s %d %d\u0001", filename, port, position)); + } + // // ABSTRACTEXECUTIONTHREADSERVICE METHODS // @@ -309,6 +330,14 @@ public class Connection extends AbstractExecutionThreadService implements Servic } else { logger.warning(String.format("Received malformed DCC SEND: “%s”", message)); } + } else if (messageWords[1].equalsIgnoreCase("ACCEPT")) { + Optional port = Optional.fromNullable(Ints.tryParse(messageWords[3])); + long position = Optional.fromNullable(Longs.tryParse(messageWords[4])).or(-1L); + if (port.isPresent()) { + eventBus.post(new DccAcceptReceived(this, reply.source().get(), messageWords[2], port.get(), position)); + } else { + logger.warning(String.format("Received malformed DCC ACCEPT: “%s”", message)); + } } } } else if (!channelTypes.contains(recipient.charAt(0))) { @@ -371,6 +400,10 @@ public class Connection extends AbstractExecutionThreadService implements Servic eventBus.post(new NicknameInUseReceived(this, reply)); } + /* client stuff. */ + } else if (command.equalsIgnoreCase("NICK")) { + eventBus.post(new NicknameChanged(this, reply.source().get(), parameters.get(0))); + /* channel stuff. */ } else if (command.equalsIgnoreCase("JOIN")) { eventBus.post(new ChannelJoined(this, parameters.get(0), reply.source().get())); @@ -390,7 +423,9 @@ public class Connection extends AbstractExecutionThreadService implements Servic eventBus.post(new ChannelNicknames(this, parameters.get(1), nicks)); nicks.clear(); } else if (command.equalsIgnoreCase("PART")) { - eventBus.post(new ChannelLeft(this, parameters.get(0), reply.source().get(), parameters.get(1))); + eventBus.post(new ChannelLeft(this, parameters.get(0), reply.source().get(), getOptional(parameters, 1))); + } else if (command.equalsIgnoreCase("QUIT")) { + eventBus.post(new ClientQuit(this, reply.source().get(), parameters.get(0))); /* common channel join errors. */ } else if (command.equals("474")) {