Browse Source

Merge pull request #105 from csmith/whois

Update to MBassador 1.2.4.
pull/106/head
Greg Holmes 8 years ago
parent
commit
be32186481

+ 1
- 1
build.gradle View File

94
         compile group: 'com.squareup.dagger', name: 'dagger', version: '1.2.1'
94
         compile group: 'com.squareup.dagger', name: 'dagger', version: '1.2.1'
95
         compile group: 'com.google.guava', name:'guava', version: '18.0'
95
         compile group: 'com.google.guava', name:'guava', version: '18.0'
96
 
96
 
97
-        compile group: 'net.engio', name: 'mbassador', version: '1.2.0'
97
+        compile group: 'net.engio', name: 'mbassador', version: '1.2.4'
98
         compile group: 'de.odysseus.juel', name: 'juel-api', version: '2.2.7'
98
         compile group: 'de.odysseus.juel', name: 'juel-api', version: '2.2.7'
99
         compile group: 'de.odysseus.juel', name: 'juel-impl', version: '2.2.7'
99
         compile group: 'de.odysseus.juel', name: 'juel-impl', version: '2.2.7'
100
         compile group: 'de.odysseus.juel', name: 'juel-spi', version: '2.2.7'
100
         compile group: 'de.odysseus.juel', name: 'juel-spi', version: '2.2.7'

+ 27
- 1
common/src/com/dmdirc/parser/common/BaseParser.java View File

22
 
22
 
23
 package com.dmdirc.parser.common;
23
 package com.dmdirc.parser.common;
24
 
24
 
25
+import com.dmdirc.parser.events.ParserErrorEvent;
25
 import com.dmdirc.parser.interfaces.ChannelInfo;
26
 import com.dmdirc.parser.interfaces.ChannelInfo;
26
 import com.dmdirc.parser.interfaces.ClientInfo;
27
 import com.dmdirc.parser.interfaces.ClientInfo;
27
 
28
 
31
 import java.net.SocketAddress;
32
 import java.net.SocketAddress;
32
 import java.net.URI;
33
 import java.net.URI;
33
 import java.net.URISyntaxException;
34
 import java.net.URISyntaxException;
35
+import java.util.Date;
34
 import java.util.List;
36
 import java.util.List;
35
 
37
 
38
+import net.engio.mbassy.bus.error.PublicationError;
39
+
36
 /**
40
 /**
37
  * Implements common base functionality for parsers.
41
  * Implements common base functionality for parsers.
38
  * <p>
42
  * <p>
41
  */
45
  */
42
 public abstract class BaseParser extends ThreadedParser {
46
 public abstract class BaseParser extends ThreadedParser {
43
 
47
 
48
+    private final Object errorHandlerLock = new Object();
49
+
44
     /** The URI that this parser was constructed for. */
50
     /** The URI that this parser was constructed for. */
45
     private final URI uri;
51
     private final URI uri;
46
 
52
 
76
     public BaseParser(final URI uri) {
82
     public BaseParser(final URI uri) {
77
         this.uri = uri;
83
         this.uri = uri;
78
 
84
 
79
-        callbackManager = new CallbackManager(this);
85
+        callbackManager = new CallbackManager(this::handleCallbackError);
86
+    }
87
+
88
+    @SuppressWarnings({
89
+            "ThrowableResultOfMethodCallIgnored",
90
+            "CallToPrintStackTrace",
91
+            "UseOfSystemOutOrSystemErr"
92
+    })
93
+    private void handleCallbackError(final PublicationError e) {
94
+        if (Thread.holdsLock(errorHandlerLock)) {
95
+            // ABORT ABORT ABORT - we're publishing an error on the same thread we just tried
96
+            // to publish an error on. Something in the error reporting pipeline must be
97
+            // breaking, so don't try adding any more errors.
98
+            System.err.println("ERROR: Error when reporting error");
99
+            e.getCause().printStackTrace();
100
+            return;
101
+        }
102
+
103
+        synchronized (errorHandlerLock) {
104
+            callbackManager.publish(new ParserErrorEvent(this, new Date(), e.getCause()));
105
+        }
80
     }
106
     }
81
 
107
 
82
     @Override
108
     @Override

+ 5
- 41
common/src/com/dmdirc/parser/common/CallbackManager.java View File

22
 
22
 
23
 package com.dmdirc.parser.common;
23
 package com.dmdirc.parser.common;
24
 
24
 
25
-import com.dmdirc.parser.events.ParserErrorEvent;
26
 import com.dmdirc.parser.events.ParserEvent;
25
 import com.dmdirc.parser.events.ParserEvent;
27
-import com.dmdirc.parser.interfaces.Parser;
28
-
29
-import java.util.Date;
30
 
26
 
31
 import net.engio.mbassy.bus.MBassador;
27
 import net.engio.mbassy.bus.MBassador;
32
 import net.engio.mbassy.bus.config.BusConfiguration;
28
 import net.engio.mbassy.bus.config.BusConfiguration;
33
 import net.engio.mbassy.bus.config.Feature;
29
 import net.engio.mbassy.bus.config.Feature;
30
+import net.engio.mbassy.bus.error.IPublicationErrorHandler;
34
 
31
 
35
 /**
32
 /**
36
  * Parser Callback Manager.
33
  * Parser Callback Manager.
38
  */
35
  */
39
 public class CallbackManager extends MBassador<ParserEvent> {
36
 public class CallbackManager extends MBassador<ParserEvent> {
40
 
37
 
41
-    private final Object errorHandlerLock = new Object();
42
-    private final Parser parser;
43
-
44
-    public CallbackManager(final Parser parser) {
38
+    public CallbackManager(final IPublicationErrorHandler errorHandler) {
45
         super(new BusConfiguration().addFeature(Feature.SyncPubSub.Default())
39
         super(new BusConfiguration().addFeature(Feature.SyncPubSub.Default())
46
-                .addFeature(Feature.AsynchronousHandlerInvocation.Default(1, 1)).addFeature(
47
-                        Feature.AsynchronousMessageDispatch.Default()
48
-                                .setNumberOfMessageDispatchers(1)));
49
-        this.parser = parser;
50
-        setupErrorHandler();
51
-    }
52
-
53
-    @SuppressWarnings("TypeMayBeWeakened")
54
-    public CallbackManager(final BusConfiguration configuration, final Parser parser) {
55
-        super(configuration);
56
-        setupErrorHandler();
57
-        this.parser = parser;
40
+                .addFeature(Feature.AsynchronousHandlerInvocation.Default(1, 1))
41
+                .addFeature(Feature.AsynchronousMessageDispatch.Default()
42
+                        .setNumberOfMessageDispatchers(1)));
58
     }
43
     }
59
 
44
 
60
-    @SuppressWarnings({
61
-            "ThrowableResultOfMethodCallIgnored",
62
-            "CallToPrintStackTrace",
63
-            "UseOfSystemOutOrSystemErr"
64
-    })
65
-    private void setupErrorHandler() {
66
-        addErrorHandler(e -> {
67
-            if (Thread.holdsLock(errorHandlerLock)) {
68
-                // ABORT ABORT ABORT - we're publishing an error on the same thread we just tried
69
-                // to publish an error on. Something in the error reporting pipeline must be
70
-                // breaking, so don't try adding any more errors.
71
-                System.err.println("ERROR: Error when reporting error");
72
-                e.getCause().printStackTrace();
73
-                return;
74
-            }
75
-
76
-            synchronized (errorHandlerLock) {
77
-                publish(new ParserErrorEvent(parser, new Date(), e.getCause()));
78
-            }
79
-        });
80
-    }
81
 }
45
 }

Loading…
Cancel
Save