Make joinChannel() method asynchronous.
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Mon, 8 Apr 2013 17:38:58 +0000 (19:38 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Mon, 8 Apr 2013 17:38:58 +0000 (19:38 +0200)
src/main/java/net/pterodactylus/irc/Connection.java

index 69aa648..a50c946 100644 (file)
@@ -32,7 +32,6 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.SynchronousQueue;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import javax.net.SocketFactory;
@@ -56,7 +55,6 @@ import com.beust.jcommander.internal.Maps;
 import com.beust.jcommander.internal.Sets;
 import com.google.common.base.Optional;
 import com.google.common.eventbus.EventBus;
-import com.google.common.eventbus.Subscribe;
 import com.google.common.io.Closeables;
 import com.google.common.util.concurrent.AbstractExecutionThreadService;
 import com.google.common.util.concurrent.Service;
@@ -203,42 +201,11 @@ public class Connection extends AbstractExecutionThreadService implements Servic
         * @param channel
         *              The channel to join
         * @return {@code true} if the channel was joined, {@code false} otherwise
+        * @throws IOException
+        *              if an I/O error occurs
         */
-       public boolean joinChannel(final String channel) {
-               final SynchronousQueue<Boolean> result = new SynchronousQueue<Boolean>();
-               Object eventHandler = new Object() {
-
-                       @Subscribe
-                       public void channelJoined(ChannelJoined channelJoined) throws InterruptedException {
-                               if (!channelJoined.channel().equalsIgnoreCase(channel)) {
-                                       return;
-                               }
-                               Optional<String> nickname = channelJoined.client().nick();
-                               if (!nickname.isPresent() || (nickname.isPresent() && nickname().equalsIgnoreCase(nickname.get()))) {
-                                       eventBus.unregister(this);
-                                       result.put(true);
-                               }
-                       }
-
-                       @Subscribe
-                       public void channelNotJoined(ChannelNotJoined channelNotJoined) throws InterruptedException {
-                               if (!channelNotJoined.channel().equalsIgnoreCase(channel)) {
-                                       return;
-                               }
-                               eventBus.unregister(this);
-                               result.put(false);
-                       }
-               };
-               eventBus.register(eventHandler);
-               try {
-                       connectionHandler.sendCommand("JOIN", channel);
-                       return result.take();
-               } catch (IOException ioe1) {
-                       eventBus.unregister(eventHandler);
-               } catch (InterruptedException ie1) {
-                       /* TODO - how to handle? */
-               }
-               return false;
+       public void joinChannel(final String channel) throws IOException {
+               connectionHandler.sendCommand("JOIN", channel);
        }
 
        //