You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ev...@apache.org on 2007/09/07 17:21:17 UTC

svn commit: r573608 - in /maven/continuum/trunk: continuum-core/src/main/java/org/apache/maven/continuum/notification/ continuum-notifiers/continuum-notifier-irc/src/main/java/org/apache/maven/continuum/notification/irc/

Author: evenisse
Date: Fri Sep  7 08:21:11 2007
New Revision: 573608

URL: http://svn.apache.org/viewvc?rev=573608&view=rev
Log:
[CONTINUUM-522] reconnect if disconnected, allow to join more than one channel

Modified:
    maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/notification/DefaultContinuumNotificationDispatcher.java
    maven/continuum/trunk/continuum-notifiers/continuum-notifier-irc/src/main/java/org/apache/maven/continuum/notification/irc/IrcContinuumNotifier.java

Modified: maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/notification/DefaultContinuumNotificationDispatcher.java
URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/notification/DefaultContinuumNotificationDispatcher.java?rev=573608&r1=573607&r2=573608&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/notification/DefaultContinuumNotificationDispatcher.java (original)
+++ maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/notification/DefaultContinuumNotificationDispatcher.java Fri Sep  7 08:21:11 2007
@@ -200,7 +200,7 @@
         }
         catch ( NotificationException e )
         {
-            getLogger().error( "Error while trying to use the " + notifierType + "notifier.", e );
+            getLogger().error( "Error while trying to use the " + notifierType + " notifier.", e );
         }
     }
 }

Modified: maven/continuum/trunk/continuum-notifiers/continuum-notifier-irc/src/main/java/org/apache/maven/continuum/notification/irc/IrcContinuumNotifier.java
URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-notifiers/continuum-notifier-irc/src/main/java/org/apache/maven/continuum/notification/irc/IrcContinuumNotifier.java?rev=573608&r1=573607&r2=573608&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-notifiers/continuum-notifier-irc/src/main/java/org/apache/maven/continuum/notification/irc/IrcContinuumNotifier.java (original)
+++ maven/continuum/trunk/continuum-notifiers/continuum-notifier-irc/src/main/java/org/apache/maven/continuum/notification/irc/IrcContinuumNotifier.java Fri Sep  7 08:21:11 2007
@@ -40,6 +40,7 @@
 import org.schwering.irc.lib.ssl.SSLIRCConnection;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -78,10 +79,12 @@
     private int defaultPort;
 
     /**
-     * key is upper(hostname) + port
+     * key is upper(hostname) + port + upper(nick)
      */
     private Map<String, IRCConnection> hostConnections = new HashMap<String, IRCConnection>();
 
+    private Map<String, List> channelConnections = new HashMap<String, List>();
+
 
     // ----------------------------------------------------------------------
     // Plexus Lifecycle
@@ -93,7 +96,7 @@
         {
             String key = keys.next();
             IRCConnection connection = hostConnections.get( key );
-            connection.doQuit( "Application shutting down" );
+            connection.doQuit( "Continuum shutting down" );
             connection.close();
         }
 
@@ -106,11 +109,11 @@
                                            String realName, String channel, boolean ssl )
         throws IOException
     {
-        String key = host.toUpperCase() + Integer.toString( port );
+        String key = host.toUpperCase() + Integer.toString( port ) + nick.toUpperCase();
         IRCConnection conn = hostConnections.get( key );
         if ( conn != null )
         {
-            checkConnection( conn );
+            checkConnection( conn, key );
             return conn;
         }
 
@@ -125,13 +128,13 @@
         }
 
         conn.addIRCEventListener( new Listener() );
-        checkConnection( conn );
-        conn.doJoin( channel );
+        checkConnection( conn, key );
+        checkChannel( conn, key, channel );
         hostConnections.put( key, conn );
         return conn;
     }
 
-    private void checkConnection( IRCConnection conn )
+    private void checkConnection( IRCConnection conn, String key )
         throws IOException
     {
         if ( !conn.isConnected() )
@@ -146,7 +149,51 @@
             {
                 //nothing to do
             }
+
+            //join to all channels
+            List channels = channelConnections.get( key );
+            if ( channels != null )
+            {
+                for ( Iterator i = channels.iterator(); i.hasNext(); )
+                {
+                    String channel = (String) i.next();
+                    connectToChannel( conn, channel);
+                }
+            }
         }
+    }
+
+    private void checkChannel( IRCConnection conn, String key, String channel )
+    {
+        List channels = channelConnections.get( key );
+        if ( channels == null )
+        {
+            connectToChannel( conn, channel );
+            channels = new ArrayList();
+            channels.add( channel );
+            channelConnections.put( key, channels );
+        }
+        else
+        {
+            boolean found = false;
+            for ( Iterator i = channels.iterator(); i.hasNext(); )
+            {
+                String c = (String) i.next();
+                if ( c.equalsIgnoreCase( channel ) )
+                {
+                    found = true;
+                }
+            }
+            if ( !found )
+            {
+                connectToChannel( conn, channel );
+            }
+        }
+    }
+
+    private void connectToChannel( IRCConnection conn, String channel )
+    {
+        conn.doJoin( channel );
     }
 
     // ----------------------------------------------------------------------