Kaynağa Gözat

Fixed various issues when doing things involving disconnecting

git-svn-id: http://svn.dmdirc.com/trunk@1921 00569f92-eb28-0410-84fd-f71c24880f
tags/0.5
Chris Smith 17 yıl önce
ebeveyn
işleme
1006b05f81
1 değiştirilmiş dosya ile 21 ekleme ve 15 silme
  1. 21
    15
      src/com/dmdirc/Server.java

+ 21
- 15
src/com/dmdirc/Server.java Dosyayı Görüntüle

@@ -581,14 +581,16 @@ public final class Server extends WritableFrameContainer implements
581 581
      */
582 582
     public void disconnect(final String reason) {
583 583
         switch (myState) {
584
-        case CLOSING:
585
-        case DISCONNECTED:
586
-        case TRANSIENTLY_DISCONNECTED:
587
-            return;
588
-        case RECONNECT_WAIT:
589
-            reconnectTimer.cancel();
584
+            case CLOSING:
585
+            case DISCONNECTED:
586
+            case TRANSIENTLY_DISCONNECTED:
587
+                return;
588
+            case RECONNECT_WAIT:
589
+                reconnectTimer.cancel();
590 590
         }
591 591
         
592
+        myState = STATE.DISCONNECTED;
593
+        
592 594
         if (parser != null && parser.isReady()) {
593 595
             parser.disconnect(reason);
594 596
             
@@ -1013,23 +1015,23 @@ public final class Server extends WritableFrameContainer implements
1013 1015
     
1014 1016
     /** {@inheritDoc} */
1015 1017
     public void onSocketClosed(final IRCParser tParser) {
1018
+        handleNotification("socketClosed", this.server);
1019
+               
1016 1020
         if (myState == STATE.CLOSING || myState == STATE.DISCONNECTED) {
1017
-            // This has been triggered via .discconect()
1021
+            // This has been triggered via .disconect()
1018 1022
             return;
1019 1023
         }
1020 1024
         
1021 1025
         myState = STATE.TRANSIENTLY_DISCONNECTED;
1022 1026
         
1023
-        handleNotification("socketClosed", this.server);
1024
-        
1025 1027
         if (configManager.getOptionBool("general", "closechannelsondisconnect")) {
1026 1028
             closeChannels();
1027 1029
         }
1028 1030
         
1029 1031
         if (configManager.getOptionBool("general", "closequeriesondisconnect")) {
1030 1032
             closeQueries();
1031
-        }
1032
-        
1033
+        }        
1034
+                
1033 1035
         if (Config.getOptionBool("general", "reconnectondisconnect")) {
1034 1036
             myState = STATE.RECONNECT_WAIT;
1035 1037
             
@@ -1040,8 +1042,10 @@ public final class Server extends WritableFrameContainer implements
1040 1042
             reconnectTimer = new Timer("Server Reconnect Timer");
1041 1043
             reconnectTimer.schedule(new TimerTask() {
1042 1044
                 public void run() {
1043
-                    myState = STATE.TRANSIENTLY_DISCONNECTED;
1044
-                    reconnect();
1045
+                    if (myState == STATE.RECONNECT_WAIT) {
1046
+                        myState = STATE.TRANSIENTLY_DISCONNECTED;
1047
+                        reconnect();
1048
+                    }
1045 1049
                 }
1046 1050
             }, delay * 1000);
1047 1051
         }
@@ -1082,8 +1086,10 @@ public final class Server extends WritableFrameContainer implements
1082 1086
             reconnectTimer = new Timer("Server connect error timer");
1083 1087
             reconnectTimer.schedule(new TimerTask() {
1084 1088
                 public void run() {
1085
-                    myState = STATE.TRANSIENTLY_DISCONNECTED;
1086
-                    reconnect();
1089
+                    if (myState == STATE.RECONNECT_WAIT) {
1090
+                        myState = STATE.TRANSIENTLY_DISCONNECTED;
1091
+                        reconnect();
1092
+                    }
1087 1093
                 }
1088 1094
             }, delay * 1000);
1089 1095
         }

Loading…
İptal
Kaydet