Author: bdonlan
Date: 2005-01-07 00:37:01 -0500 (Fri, 07 Jan 2005)
New Revision: 534

Modified:
   /
   trunk/misc/javer/src/javer/HaverClient.java
   trunk/misc/javer/src/javer/JaverUIPanel.java
Log:
 [EMAIL PROTECTED]:  bdonlan | 2005-01-07T05:16:07.379895Z
 Adjust access rules
 [EMAIL PROTECTED]:  bdonlan | 2005-01-07T05:36:34.165510Z
 Added some S: FAIL handling.




Property changes on: 
___________________________________________________________________
Name: svk:merge
   - 1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local:11211
   + 1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local:11214

Modified: trunk/misc/javer/src/javer/HaverClient.java
===================================================================
--- trunk/misc/javer/src/javer/HaverClient.java 2005-01-07 05:12:44 UTC (rev 
533)
+++ trunk/misc/javer/src/javer/HaverClient.java 2005-01-07 05:37:01 UTC (rev 
534)
@@ -14,16 +14,17 @@
  */
 public class HaverClient extends Thread {
     
-    private java.lang.String versionString = "Javer/0.1";
-    private java.net.Socket sock = null;
-    private java.io.PrintWriter writer = null;
-    private java.io.BufferedReader reader = null;
-    private java.util.Map wants = null;
-    private java.util.Map serverevents = null;
-    private String uid = null;
-    private Integer lock = new Integer(0);
+    protected java.lang.String versionString = "Javer/0.1";
+    protected java.net.Socket sock = null;
+    protected java.io.PrintWriter writer = null;
+    protected java.io.BufferedReader reader = null;
+    protected java.util.Map wants = new java.util.HashMap();
+    protected java.util.Map serverevents = new java.util.HashMap();
+    protected java.util.Map fails = new java.util.HashMap();
+    protected String uid = null;
+    protected Integer lock = new Integer(0);
     
-    private void send(String s) throws java.io.IOException {
+    protected void send(String s) throws java.io.IOException {
         synchronized (lock) {
             if (sock == null) {
                 throw new IllegalStateException("Not connected to server");
@@ -36,6 +37,7 @@
     
     /** Creates a new instance of HaverClient */
     public HaverClient() {
+        initFails();
         initWants();
         initServerEvents();
     }
@@ -88,18 +90,42 @@
         }
     }
 
-    private abstract class ServerHandler {
+    protected abstract class FailHandler {
+        public FailHandler() {}
+        public abstract void failure(String why, String[] args)
+            throws java.io.IOException;
+    }
+    
+    protected abstract class ServerHandler {
         public ServerHandler() {}
         public abstract void trigger(String[] line) throws java.io.IOException;
     }
 
-    private abstract class WantHandler {
+    protected abstract class WantHandler {
         public WantHandler() {}
         public abstract void trigger(String[] args) throws java.io.IOException;
     }
 
-    private void initWants() {
-        wants = new java.util.HashMap();
+    protected void initFails() {
+        fails.put("IDENT", new FailHandler() {
+            public void failure(String why, String[] args) throws 
java.io.IOException {
+                disconnect();
+                eventIdentFailed(why, args);
+            }
+        });
+        fails.put("PMSG", new FailHandler() {
+            public void failure(String why, String[] args) throws 
java.io.IOException {
+                eventPrivateFailed(why, args);
+            }
+        });
+        fails.put("MSG", new FailHandler() {
+            public void failure(String why, String[] args) throws 
java.io.IOException {
+                eventPublicFailed(why, args);
+            }
+        });
+    }
+    
+    protected void initWants() {
         wants.put("IDENT", new WantHandler() {
             public void trigger(String[] args) throws java.io.IOException {
                 eventIdenting();
@@ -108,8 +134,7 @@
         });
     }
     
-    private void initServerEvents() {
-        serverevents = new java.util.HashMap();
+    protected void initServerEvents() {
         serverevents.put("WANT", new ServerHandler() {
             public void trigger(String[] args) throws java.io.IOException {
                 WantHandler h = (WantHandler) wants.get(args[1]);
@@ -173,9 +198,17 @@
                 eventChannelList(args[1], s);
             }
         });
+        serverevents.put("FAIL", new ServerHandler() {
+            public void trigger(String[] args) throws java.io.IOException {
+                String cmd = args[1];
+                String why = args[2];
+                args = subStringArray(args, 3, args.length - 1);
+                eventCmdFailure(cmd, why, args);
+            }
+        });
     }
 
-    private void dispatchCommand(String s) throws java.io.IOException {
+    protected void dispatchCommand(String s) throws java.io.IOException {
         String[] parts = s.split("\t");
         ServerHandler h = (ServerHandler) serverevents.get(parts[0]);
         if (h != null) {
@@ -199,6 +232,10 @@
         /* STUB */
     }
 
+    protected void eventDisconnected() throws java.io.IOException {
+        /* STUB */
+    }
+    
     protected void eventChannelJoin(String where) throws java.io.IOException {
         /* STUB */
     }
@@ -252,7 +289,28 @@
     protected void eventChannelList(String where, Set names) throws 
java.io.IOException {
         /* STUB */
     }
-
+    
+    protected boolean eventCmdFailure(String cmd, String why, String[] args) 
throws java.io.IOException {
+        if (fails.containsKey(cmd)) {
+            FailHandler h = (FailHandler) fails.get(cmd);
+            h.failure(why, args);
+            return true;
+        } else {
+            return false;
+        }
+    }
+    
+    protected void eventIdentFailed(String why, String[] args) throws 
java.io.IOException {
+        /* STUB */
+    }
+    
+    protected void eventPrivateFailed(String why, String[] args) throws 
java.io.IOException {
+        /* STUB */
+    }
+    
+    protected void eventPublicFailed(String why, String[] args) throws 
java.io.IOException {
+        /* STUB */
+    }
     public static final String[] subStringArray(String[] array, int start, int 
end) {
         if (start > end) {
             return new String[0];
@@ -313,6 +371,8 @@
     }
 
     public void disconnect() {
+        if (sock == null)
+            return;
         synchronized (lock) {
             try {
                 sock.close();
@@ -321,6 +381,9 @@
             reader = null;
             writer = null;
             uid = null;
+            try {
+                eventDisconnected();
+            } catch(IOException e) {}
         }
     }
     

Modified: trunk/misc/javer/src/javer/JaverUIPanel.java
===================================================================
--- trunk/misc/javer/src/javer/JaverUIPanel.java        2005-01-07 05:12:44 UTC 
(rev 533)
+++ trunk/misc/javer/src/javer/JaverUIPanel.java        2005-01-07 05:37:01 UTC 
(rev 534)
@@ -35,7 +35,7 @@
         serverTabPair.tab = serverTab;
         serverTabPair.title = "Server";
         addTab(serverTabPair);
-        disconnect();
+        do_disconnect();
     }
 
     protected abstract class CommandHandler {
@@ -235,9 +235,57 @@
             putServer("I/O exception: " + e.getLocalizedMessage());
             return false;
         }
+
+        protected void eventPublicFailed(String why, String[] args) throws 
IOException {
+            TextTab tab;
+            if (channelTabs.containsKey(args[0])) {
+                TabPair p = (TabPair) channelTabs.get(args[0]);
+                tab = (TextTab) p.tab;
+            } else {
+                tab = serverTab;
+            }
+            tab.putText("Public message failed: " + why + ", args: " + args);
+            super.eventPublicFailed(why, args);
+        }
+
+        protected void eventPrivateFailed(String why, String[] args) throws 
IOException {
+            TextTab tab;
+            if (userTabs.containsKey(args[0])) {
+                tab = getQuery(args[0]);
+            } else {
+                tab = serverTab;
+            }
+            tab.putText("Private message failed: " + why + ", args: " + args);
+            super.eventPrivateFailed(why, args);
+        }
+
+        protected void eventIdentFailed(String why, String[] args) throws 
IOException {
+            putServer("Login failed: " + why + ", args: " + args);
+            super.eventIdentFailed(why, args);
+            disconnect();
+        }
+
+        protected boolean eventCmdFailure(String cmd, String why, String[] 
args) throws IOException {
+
+            boolean retValue;
+            
+            retValue = super.eventCmdFailure(cmd, why, args);
+            if (retValue)
+                return retValue;
+            
+            putServer("Unknown failure event. Command: " + cmd +
+                      ", reason: " + why + ", args: " + args);
+            
+            return false;
+        }
+
+        protected void eventDisconnected() throws IOException {
+            do_disconnect();
+            super.eventDisconnected();
+        }
     }
 
-    public void disconnect() {
+    public void do_disconnect() {
         Set pairs = new java.util.HashSet(tabs.values());
         Iterator it = pairs.iterator();
         while (it.hasNext()) {
@@ -452,7 +500,7 @@
             }
         } catch (IOException e) {
             cli.eventIOException(e);
-            disconnect();
+            do_disconnect();
         }
         return false;
     }


Reply via email to