X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Firc%2FConnection.java;h=c47144b1c6e4e646960f6bcba20790e0476d2645;hb=08f7863e3510aea16b6a856b40927c90687b067c;hp=cc1f9c8613b6cf5ccb0f90aea4ec685339ab1a7f;hpb=7b012b24d88c19e9986db78bf0ab92bf25dc3d47;p=xudocci.git diff --git a/src/main/java/net/pterodactylus/irc/Connection.java b/src/main/java/net/pterodactylus/irc/Connection.java index cc1f9c8..c47144b 100644 --- a/src/main/java/net/pterodactylus/irc/Connection.java +++ b/src/main/java/net/pterodactylus/irc/Connection.java @@ -18,6 +18,7 @@ package net.pterodactylus.irc; import static com.google.common.base.Preconditions.checkState; +import static java.util.Arrays.asList; import static java.util.concurrent.TimeUnit.SECONDS; import java.io.BufferedReader; @@ -40,7 +41,10 @@ import java.util.concurrent.atomic.AtomicBoolean; import javax.net.SocketFactory; +import net.pterodactylus.irc.connection.ChannelNotJoinedHandler; import net.pterodactylus.irc.connection.ConnectionEstablishHandler; +import net.pterodactylus.irc.connection.Handler; +import net.pterodactylus.irc.connection.MotdHandler; import net.pterodactylus.irc.event.ChannelJoined; import net.pterodactylus.irc.event.ChannelLeft; import net.pterodactylus.irc.event.ChannelMessageReceived; @@ -371,17 +375,18 @@ public class Connection extends AbstractExecutionThreadService implements Servic /* now read replies and react. */ try { /* some status variables. */ - int oldConnectionStatus = 0; - int connectionStatus = 0; boolean connected = true; - StringBuilder motd = new StringBuilder(); Set nicks = Sets.newHashSet(); /* server modes. */ Map nickPrefixes = Maps.newHashMap(); Set channelTypes = Sets.newHashSet(); - ConnectionEstablishHandler connectionEstablishHandler = new ConnectionEstablishHandler(eventBus, this); + List handlers = asList( + new MotdHandler(eventBus, this), + new ConnectionEstablishHandler(eventBus, this), + new ChannelNotJoinedHandler(eventBus, this) + ); while (connected) { Reply reply = connectionHandler.readReply(); @@ -390,6 +395,13 @@ public class Connection extends AbstractExecutionThreadService implements Servic String command = reply.command(); List parameters = reply.parameters(); + for (Handler handler : handlers) { + if (handler.willHandle(reply)) { + handler.handleReply(reply); + break; + } + } + /* most common events. */ if (command.equalsIgnoreCase("PRIVMSG")) { String recipient = parameters.get(0); @@ -419,7 +431,7 @@ public class Connection extends AbstractExecutionThreadService implements Servic } else if (command.equals("431")) { eventBus.post(new NoNicknameGivenReceived(this, reply)); } else if (command.equals("433")) { - if (connectionStatus == 0) { + if (!established.get()) { nickname = nicknameChooser.getNickname(); connectionHandler.sendCommand("NICK", nickname); } else { @@ -453,23 +465,10 @@ public class Connection extends AbstractExecutionThreadService implements Servic } 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")) { - eventBus.post(new ChannelNotJoined(this, parameters.get(1), Reason.banned)); - } else if (command.equals("473")) { - eventBus.post(new ChannelNotJoined(this, parameters.get(1), Reason.inviteOnly)); - } else if (command.equals("475")) { - eventBus.post(new ChannelNotJoined(this, parameters.get(1), Reason.badChannelKey)); - } else if (command.equals("477")) { - eventBus.post(new ChannelNotJoined(this, parameters.get(1), Reason.registeredNicknamesOnly)); - /* basic connection housekeeping. */ } else if (command.equalsIgnoreCase("PING")) { connectionHandler.sendCommand("PONG", getOptional(parameters, 0), getOptional(parameters, 1)); - } else if (connectionEstablishHandler.willHandle(reply)) { - connectionEstablishHandler.handleReply(reply); - /* 005 originally was a bounce message, now used to transmit useful information about the server. */ } else if (command.equals("005")) { for (String parameter : parameters) { @@ -492,17 +491,6 @@ public class Connection extends AbstractExecutionThreadService implements Servic } } - /* 375, 372, and 376 handle the server’s MOTD. */ - } else if (command.equals("375")) { - /* MOTD starts. */ - motd.append(parameters.get(1)).append('\n'); - } else if (command.equals("372")) { - motd.append(parameters.get(1)).append('\n'); - } else if (command.equals("376")) { - motd.append(parameters.get(1)).append('\n'); - eventBus.post(new MotdReceived(this, motd.toString())); - motd.setLength(0); - } else if (command.equalsIgnoreCase("KICK")) { eventBus.post(new KickedFromChannel(this, parameters.get(0), reply.source().get(), parameters.get(1), getOptional(parameters, 2)));