Pārlūkot izejas kodu

Merge pull request #706 from csmith/master

Add an interface for the event bus.
pull/707/head
Greg Holmes 7 gadus atpakaļ
vecāks
revīzija
3266257cbe

src/main/java/com/dmdirc/events/DMDircEvent.java → api/src/main/java/com/dmdirc/events/DMDircEvent.java Parādīt failu


+ 60
- 0
api/src/main/java/com/dmdirc/interfaces/EventBus.java Parādīt failu

@@ -0,0 +1,60 @@
1
+/*
2
+ * Copyright (c) 2006-2016 DMDirc Developers
3
+ *
4
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ * of this software and associated documentation files (the "Software"), to deal
6
+ * in the Software without restriction, including without limitation the rights
7
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ * copies of the Software, and to permit persons to whom the Software is
9
+ * furnished to do so, subject to the following conditions:
10
+ *
11
+ * The above copyright notice and this permission notice shall be included in
12
+ * all copies or substantial portions of the Software.
13
+ *
14
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ * SOFTWARE.
21
+ */
22
+
23
+package com.dmdirc.interfaces;
24
+
25
+import com.dmdirc.events.DMDircEvent;
26
+
27
+/**
28
+ * An event bus offers facilities for publishing events to decoupled handlers.
29
+ */
30
+public interface EventBus {
31
+
32
+    /**
33
+     * Subscribe all handlers of the given listener. Any listener is only subscribed once; subsequent subscriptions of
34
+     * an already subscribed listener will be silently ignored.
35
+     */
36
+    void subscribe(Object listener);
37
+
38
+    /**
39
+     * Immediately remove all registered handlers (if any) of the given listener. When this call returns all handlers
40
+     * have effectively been removed and will not receive any messages.
41
+     *
42
+     * <p>A call to this method passing any object that is not subscribed will not have any effect and is silently
43
+     * ignored.
44
+     */
45
+    void unsubscribe(Object listener);
46
+
47
+    /**
48
+     * Synchronously publish a message to all registered listeners. This includes listeners defined for super types of
49
+     * the given message type, provided they are not configured to reject valid subtype. The call returns when all
50
+     * matching handlers of all registered listeners have been notified (invoked) of the message.
51
+     */
52
+    void publish(DMDircEvent message);
53
+
54
+    /**
55
+     * Asynchronously publish a message to all registered listeners. This includes listeners defined for super types of
56
+     * the given message type, provided they are not configured to reject valid subtype. The call returns immediately.
57
+     */
58
+    void publishAsync(DMDircEvent message);
59
+
60
+}

+ 28
- 5
src/main/java/com/dmdirc/DMDircMBassador.java Parādīt failu

@@ -23,24 +23,27 @@
23 23
 package com.dmdirc;
24 24
 
25 25
 import com.dmdirc.events.DMDircEvent;
26
-
27
-import org.slf4j.Logger;
28
-import org.slf4j.LoggerFactory;
26
+import com.dmdirc.interfaces.EventBus;
29 27
 
30 28
 import net.engio.mbassy.bus.MBassador;
31 29
 import net.engio.mbassy.bus.config.BusConfiguration;
32 30
 import net.engio.mbassy.bus.config.Feature;
33 31
 import net.engio.mbassy.bus.config.IBusConfiguration;
34 32
 
33
+import org.slf4j.Logger;
34
+import org.slf4j.LoggerFactory;
35
+
35 36
 import static com.dmdirc.util.LogUtils.APP_ERROR;
36 37
 
37 38
 /**
38 39
  * Generified MBassador.
39 40
  */
40
-public class DMDircMBassador extends MBassador<DMDircEvent> {
41
+public class DMDircMBassador implements EventBus {
41 42
 
42 43
     private static final Logger LOG = LoggerFactory.getLogger(DMDircMBassador.class);
43 44
 
45
+    private final MBassador<DMDircEvent> bus;
46
+
44 47
     public DMDircMBassador() {
45 48
         this(new BusConfiguration()
46 49
                 .addFeature(Feature.SyncPubSub.Default())
@@ -52,8 +55,28 @@ public class DMDircMBassador extends MBassador<DMDircEvent> {
52 55
 
53 56
     @SuppressWarnings("TypeMayBeWeakened")
54 57
     public DMDircMBassador(final IBusConfiguration configuration) {
55
-        super(configuration.addPublicationErrorHandler(
58
+        bus = new MBassador<>(configuration.addPublicationErrorHandler(
56 59
                 e -> LOG.error(APP_ERROR, e.getMessage(), e.getCause())));
57 60
     }
58 61
 
62
+    @Override
63
+    public void subscribe(Object listener) {
64
+        bus.subscribe(listener);
65
+    }
66
+
67
+    @Override
68
+    public void unsubscribe(Object listener) {
69
+        bus.unsubscribe(listener);
70
+    }
71
+
72
+    @Override
73
+    public void publish(DMDircEvent message) {
74
+        bus.publish(message);
75
+    }
76
+
77
+    @Override
78
+    public void publishAsync(DMDircEvent message) {
79
+        bus.publishAsync(message);
80
+    }
81
+
59 82
 }

Notiek ielāde…
Atcelt
Saglabāt