Ver código fonte

Add dynamically asynchronous eventbus.

If an event is posted with a @AsyncEvent annotation, it will
be posted in a separate thread.

Change-Id: I6203e3c907ac22bd071137d36cc17834ed2a1c64
Reviewed-on: http://gerrit.dmdirc.com/3757
Automatic-Compile: DMDirc Build Manager
Reviewed-by: Greg Holmes <greg@dmdirc.com>
pull/1/head
Chris Smith 9 anos atrás
pai
commit
be76193eac
38 arquivos alterados com 149 adições e 14 exclusões
  1. 3
    1
      src/com/dmdirc/ClientModule.java
  2. 2
    0
      src/com/dmdirc/events/ActionCreatedEvent.java
  3. 2
    0
      src/com/dmdirc/events/ActionDeletedEvent.java
  4. 2
    0
      src/com/dmdirc/events/ActionUpdatedEvent.java
  5. 2
    0
      src/com/dmdirc/events/AppErrorEvent.java
  6. 2
    0
      src/com/dmdirc/events/ChannelGotnamesEvent.java
  7. 3
    0
      src/com/dmdirc/events/ClientClosedEvent.java
  8. 3
    0
      src/com/dmdirc/events/ClientClosingEvent.java
  9. 3
    0
      src/com/dmdirc/events/ClientFocusGainedEvent.java
  10. 3
    0
      src/com/dmdirc/events/ClientFocusLostEvent.java
  11. 2
    0
      src/com/dmdirc/events/ClientFrameChangedEvent.java
  12. 3
    0
      src/com/dmdirc/events/ClientKeyPressedEvent.java
  13. 2
    0
      src/com/dmdirc/events/ClientLineAddedEvent.java
  14. 3
    0
      src/com/dmdirc/events/ClientMinimisedEvent.java
  15. 3
    0
      src/com/dmdirc/events/ClientOpenedEvent.java
  16. 2
    0
      src/com/dmdirc/events/ClientPopupGeneratedEvent.java
  17. 3
    0
      src/com/dmdirc/events/ClientPrefsClosedEvent.java
  18. 2
    0
      src/com/dmdirc/events/ClientPrefsOpenedEvent.java
  19. 3
    0
      src/com/dmdirc/events/ClientUnminimisedEvent.java
  20. 2
    0
      src/com/dmdirc/events/ClientUserInputEvent.java
  21. 3
    0
      src/com/dmdirc/events/FeedbackNagEvent.java
  22. 2
    0
      src/com/dmdirc/events/FrameChangedEvent.java
  23. 2
    0
      src/com/dmdirc/events/FrameIconChangedEvent.java
  24. 2
    0
      src/com/dmdirc/events/FrameNameChangedEvent.java
  25. 2
    0
      src/com/dmdirc/events/FrameTitleChangedEvent.java
  26. 2
    0
      src/com/dmdirc/events/LinkChannelClickedEvent.java
  27. 2
    0
      src/com/dmdirc/events/LinkNicknameClickedEvent.java
  28. 2
    0
      src/com/dmdirc/events/LinkUrlClickedEvent.java
  29. 2
    0
      src/com/dmdirc/events/PluginLoadedEvent.java
  30. 3
    0
      src/com/dmdirc/events/PluginRefreshEvent.java
  31. 2
    0
      src/com/dmdirc/events/PluginUnloadedEvent.java
  32. 2
    0
      src/com/dmdirc/events/QueryClosedEvent.java
  33. 2
    0
      src/com/dmdirc/events/ServerGotpingEvent.java
  34. 2
    0
      src/com/dmdirc/events/ServerNopingEvent.java
  35. 2
    0
      src/com/dmdirc/events/ServerPingsentEvent.java
  36. 2
    0
      src/com/dmdirc/events/UserErrorEvent.java
  37. 10
    13
      src/com/dmdirc/util/AsyncEvent.java
  38. 55
    0
      src/com/dmdirc/util/DynamicAsyncEventBus.java

+ 3
- 1
src/com/dmdirc/ClientModule.java Ver arquivo

@@ -61,6 +61,7 @@ import com.dmdirc.ui.messages.ColourManager;
61 61
 import com.dmdirc.ui.themes.ThemeManager;
62 62
 import com.dmdirc.updater.UpdaterModule;
63 63
 import com.dmdirc.updater.manager.UpdateManager;
64
+import com.dmdirc.util.DynamicAsyncEventBus;
64 65
 import com.dmdirc.util.URLBuilder;
65 66
 import com.dmdirc.util.io.Downloader;
66 67
 
@@ -71,6 +72,7 @@ import java.io.File;
71 72
 import java.text.SimpleDateFormat;
72 73
 import java.util.Date;
73 74
 import java.util.Set;
75
+import java.util.concurrent.Executors;
74 76
 
75 77
 import javax.inject.Provider;
76 78
 import javax.inject.Qualifier;
@@ -287,7 +289,7 @@ public class ClientModule {
287 289
     @Provides
288 290
     @Singleton
289 291
     public EventBus getEventBus() {
290
-        return new EventBus();
292
+        return new DynamicAsyncEventBus(Executors.newSingleThreadExecutor());
291 293
     }
292 294
 
293 295
     @Provides

+ 2
- 0
src/com/dmdirc/events/ActionCreatedEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.actions.Action;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Fired on the creation of an action.
29 30
  */
31
+@AsyncEvent
30 32
 public class ActionCreatedEvent extends ActionEvent {
31 33
 
32 34
     public ActionCreatedEvent(final Action action) {

+ 2
- 0
src/com/dmdirc/events/ActionDeletedEvent.java Ver arquivo

@@ -24,10 +24,12 @@ package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.actions.Action;
26 26
 import com.dmdirc.actions.ActionGroup;
27
+import com.dmdirc.util.AsyncEvent;
27 28
 
28 29
 /**
29 30
  * Fired when an action is deleted.
30 31
  */
32
+@AsyncEvent
31 33
 public class ActionDeletedEvent extends ActionEvent {
32 34
 
33 35
     private final ActionGroup group;

+ 2
- 0
src/com/dmdirc/events/ActionUpdatedEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.actions.Action;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Fired when an action is updated.
29 30
  */
31
+@AsyncEvent
30 32
 public class ActionUpdatedEvent extends ActionEvent {
31 33
 
32 34
     public ActionUpdatedEvent(final Action action) {

+ 2
- 0
src/com/dmdirc/events/AppErrorEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.logger.ErrorLevel;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Event class for app errors.
29 30
  */
31
+@AsyncEvent
30 32
 public class AppErrorEvent extends ErrorEvent {
31 33
 
32 34
     public AppErrorEvent(final ErrorLevel level, final Throwable throwable, final String message,

+ 2
- 0
src/com/dmdirc/events/ChannelGotnamesEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.Channel;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Fired when a channel names event is received.
29 30
  */
31
+@AsyncEvent
30 32
 public class ChannelGotnamesEvent extends ChannelEvent {
31 33
 
32 34
     public ChannelGotnamesEvent(final long timestamp, final Channel channel) {

+ 3
- 0
src/com/dmdirc/events/ClientClosedEvent.java Ver arquivo

@@ -22,9 +22,12 @@
22 22
 
23 23
 package com.dmdirc.events;
24 24
 
25
+import com.dmdirc.util.AsyncEvent;
26
+
25 27
 /**
26 28
  * Fired when the client is being closed.
27 29
  */
30
+@AsyncEvent
28 31
 public class ClientClosedEvent extends DMDircEvent {
29 32
 
30 33
 }

+ 3
- 0
src/com/dmdirc/events/ClientClosingEvent.java Ver arquivo

@@ -22,9 +22,12 @@
22 22
 
23 23
 package com.dmdirc.events;
24 24
 
25
+import com.dmdirc.util.AsyncEvent;
26
+
25 27
 /**
26 28
  * Fired when the client is about to close.
27 29
  */
30
+@AsyncEvent
28 31
 public class ClientClosingEvent extends DMDircEvent {
29 32
 
30 33
 }

+ 3
- 0
src/com/dmdirc/events/ClientFocusGainedEvent.java Ver arquivo

@@ -22,11 +22,14 @@
22 22
 
23 23
 package com.dmdirc.events;
24 24
 
25
+import com.dmdirc.util.AsyncEvent;
26
+
25 27
 /**
26 28
  * Fired when the the client is bought into focus.
27 29
  *
28 30
  * TODO: This should be moved into the Swing UI once the corresponding action types are removed.
29 31
  */
32
+@AsyncEvent
30 33
 public class ClientFocusGainedEvent extends DMDircEvent {
31 34
 
32 35
 }

+ 3
- 0
src/com/dmdirc/events/ClientFocusLostEvent.java Ver arquivo

@@ -22,11 +22,14 @@
22 22
 
23 23
 package com.dmdirc.events;
24 24
 
25
+import com.dmdirc.util.AsyncEvent;
26
+
25 27
 /**
26 28
  * Fired when the the client loses focus.
27 29
  *
28 30
  * TODO: This should be moved into the Swing UI once the corresponding action types are removed.
29 31
  */
32
+@AsyncEvent
30 33
 public class ClientFocusLostEvent extends DMDircEvent {
31 34
 
32 35
 }

+ 2
- 0
src/com/dmdirc/events/ClientFrameChangedEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.FrameContainer;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Event fired when a new frame has been focused.
29 30
  */
31
+@AsyncEvent
30 32
 public class ClientFrameChangedEvent extends DMDircEvent {
31 33
 
32 34
     private final FrameContainer container;

+ 3
- 0
src/com/dmdirc/events/ClientKeyPressedEvent.java Ver arquivo

@@ -22,6 +22,8 @@
22 22
 
23 23
 package com.dmdirc.events;
24 24
 
25
+import com.dmdirc.util.AsyncEvent;
26
+
25 27
 import javax.swing.KeyStroke;
26 28
 
27 29
 /**
@@ -29,6 +31,7 @@ import javax.swing.KeyStroke;
29 31
  *
30 32
  * TODO: This should be moved into the Swing UI once the corresponding action types are removed.
31 33
  */
34
+@AsyncEvent
32 35
 public class ClientKeyPressedEvent extends DMDircEvent {
33 36
 
34 37
     private final KeyStroke keyStroke;

+ 2
- 0
src/com/dmdirc/events/ClientLineAddedEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.FrameContainer;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Event fired when a line has been added to a window.
29 30
  */
31
+@AsyncEvent
30 32
 public class ClientLineAddedEvent extends DMDircEvent {
31 33
 
32 34
     private final FrameContainer container;

+ 3
- 0
src/com/dmdirc/events/ClientMinimisedEvent.java Ver arquivo

@@ -22,11 +22,14 @@
22 22
 
23 23
 package com.dmdirc.events;
24 24
 
25
+import com.dmdirc.util.AsyncEvent;
26
+
25 27
 /**
26 28
  * Fired when the the client is minimised.
27 29
  *
28 30
  * TODO: This should be moved into the Swing UI once the corresponding action types are removed.
29 31
  */
32
+@AsyncEvent
30 33
 public class ClientMinimisedEvent extends DMDircEvent {
31 34
 
32 35
 }

+ 3
- 0
src/com/dmdirc/events/ClientOpenedEvent.java Ver arquivo

@@ -22,8 +22,11 @@
22 22
 
23 23
 package com.dmdirc.events;
24 24
 
25
+import com.dmdirc.util.AsyncEvent;
26
+
25 27
 /**
26 28
  * Fired when the client is first opened.
27 29
  */
30
+@AsyncEvent
28 31
 public class ClientOpenedEvent extends DMDircEvent {
29 32
 }

+ 2
- 0
src/com/dmdirc/events/ClientPopupGeneratedEvent.java Ver arquivo

@@ -25,10 +25,12 @@ package com.dmdirc.events;
25 25
 import com.dmdirc.commandparser.PopupMenu;
26 26
 import com.dmdirc.commandparser.PopupType;
27 27
 import com.dmdirc.interfaces.config.AggregateConfigProvider;
28
+import com.dmdirc.util.AsyncEvent;
28 29
 
29 30
 /**
30 31
  * Raised when a popup is being generated.
31 32
  */
33
+@AsyncEvent
32 34
 public class ClientPopupGeneratedEvent extends DMDircEvent {
33 35
 
34 36
     private final PopupType type;

+ 3
- 0
src/com/dmdirc/events/ClientPrefsClosedEvent.java Ver arquivo

@@ -22,9 +22,12 @@
22 22
 
23 23
 package com.dmdirc.events;
24 24
 
25
+import com.dmdirc.util.AsyncEvent;
26
+
25 27
 /**
26 28
  * Raised when the preferences dialog is closed.
27 29
  */
30
+@AsyncEvent
28 31
 public class ClientPrefsClosedEvent extends PreferencesEvent {
29 32
 
30 33
 }

+ 2
- 0
src/com/dmdirc/events/ClientPrefsOpenedEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.config.prefs.PreferencesDialogModel;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Raised when the preferences dialog is opened.
29 30
  */
31
+@AsyncEvent
30 32
 public class ClientPrefsOpenedEvent extends PreferencesEvent {
31 33
 
32 34
     private final PreferencesDialogModel model;

+ 3
- 0
src/com/dmdirc/events/ClientUnminimisedEvent.java Ver arquivo

@@ -22,11 +22,14 @@
22 22
 
23 23
 package com.dmdirc.events;
24 24
 
25
+import com.dmdirc.util.AsyncEvent;
26
+
25 27
 /**
26 28
  * Fired when the the client is unminimised.
27 29
  *
28 30
  * TODO: This should be moved into the Swing UI once the corresponding action types are removed.
29 31
  */
32
+@AsyncEvent
30 33
 public class ClientUnminimisedEvent extends DMDircEvent {
31 34
 
32 35
 }

+ 2
- 0
src/com/dmdirc/events/ClientUserInputEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.FrameContainer;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Event fired when some input has been entered into the client.
29 30
  */
31
+@AsyncEvent
30 32
 public class ClientUserInputEvent extends DMDircEvent {
31 33
 
32 34
     private final FrameContainer container;

+ 3
- 0
src/com/dmdirc/events/FeedbackNagEvent.java Ver arquivo

@@ -22,9 +22,12 @@
22 22
 
23 23
 package com.dmdirc.events;
24 24
 
25
+import com.dmdirc.util.AsyncEvent;
26
+
25 27
 /**
26 28
  * Fired when its time to nag for feedback.
27 29
  */
30
+@AsyncEvent
28 31
 public class FeedbackNagEvent extends DMDircEvent {
29 32
 
30 33
 }

+ 2
- 0
src/com/dmdirc/events/FrameChangedEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.FrameContainer;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Base class for all frame info events.
29 30
  */
31
+@AsyncEvent
30 32
 public class FrameChangedEvent extends DMDircEvent {
31 33
 
32 34
     private final FrameContainer container;

+ 2
- 0
src/com/dmdirc/events/FrameIconChangedEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.FrameContainer;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Fired when a frame icon changes.
29 30
  */
31
+@AsyncEvent
30 32
 public class FrameIconChangedEvent extends FrameChangedEvent {
31 33
 
32 34
     private final String icon;

+ 2
- 0
src/com/dmdirc/events/FrameNameChangedEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.FrameContainer;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Fired when a frame's name changes.
29 30
  */
31
+@AsyncEvent
30 32
 public class FrameNameChangedEvent extends FrameChangedEvent {
31 33
 
32 34
     private final String name;

+ 2
- 0
src/com/dmdirc/events/FrameTitleChangedEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.FrameContainer;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Fired when a frame title changes.
29 30
  */
31
+@AsyncEvent
30 32
 public class FrameTitleChangedEvent extends FrameChangedEvent {
31 33
 
32 34
     private final String title;

+ 2
- 0
src/com/dmdirc/events/LinkChannelClickedEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.interfaces.ui.Window;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Raised when a channel link has been clicked.
29 30
  */
31
+@AsyncEvent
30 32
 public class LinkChannelClickedEvent extends LinkEvent {
31 33
 
32 34
     public LinkChannelClickedEvent(final Window window, final String target) {

+ 2
- 0
src/com/dmdirc/events/LinkNicknameClickedEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.interfaces.ui.Window;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Raised when a nickname link has been clicked.
29 30
  */
31
+@AsyncEvent
30 32
 public class LinkNicknameClickedEvent extends LinkEvent {
31 33
 
32 34
     public LinkNicknameClickedEvent(final Window window, final String target) {

+ 2
- 0
src/com/dmdirc/events/LinkUrlClickedEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.interfaces.ui.Window;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Raised when a URL link has been clicked.
29 30
  */
31
+@AsyncEvent
30 32
 public class LinkUrlClickedEvent extends LinkEvent {
31 33
 
32 34
     public LinkUrlClickedEvent(final Window window, final String target) {

+ 2
- 0
src/com/dmdirc/events/PluginLoadedEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.plugins.PluginInfo;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Fired when a plugin is loaded.
29 30
  */
31
+@AsyncEvent
30 32
 public class PluginLoadedEvent extends PluginEvent {
31 33
 
32 34
     public PluginLoadedEvent(final PluginInfo plugin) {

+ 3
- 0
src/com/dmdirc/events/PluginRefreshEvent.java Ver arquivo

@@ -22,9 +22,12 @@
22 22
 
23 23
 package com.dmdirc.events;
24 24
 
25
+import com.dmdirc.util.AsyncEvent;
26
+
25 27
 /**
26 28
  * Fired when the list of available plugins may have updated.
27 29
  */
30
+@AsyncEvent
28 31
 public class PluginRefreshEvent extends DMDircEvent {
29 32
 
30 33
 }

+ 2
- 0
src/com/dmdirc/events/PluginUnloadedEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.plugins.PluginInfo;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Fired when a plugin is loaded.
29 30
  */
31
+@AsyncEvent
30 32
 public class PluginUnloadedEvent extends PluginEvent {
31 33
 
32 34
     public PluginUnloadedEvent(final PluginInfo plugin) {

+ 2
- 0
src/com/dmdirc/events/QueryClosedEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.Query;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Fired when a query window is closed.
29 30
  */
31
+@AsyncEvent
30 32
 public class QueryClosedEvent extends QueryEvent {
31 33
 
32 34
     public QueryClosedEvent(final long timestamp, final Query query) {

+ 2
- 0
src/com/dmdirc/events/ServerGotpingEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.interfaces.Connection;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Fired when we receive a server ping reply.
29 30
  */
31
+@AsyncEvent
30 32
 public class ServerGotpingEvent extends ServerEvent {
31 33
 
32 34
     private final long ping;

+ 2
- 0
src/com/dmdirc/events/ServerNopingEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.interfaces.Connection;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Fired when we miss a server ping reply.
29 30
  */
31
+@AsyncEvent
30 32
 public class ServerNopingEvent extends ServerEvent {
31 33
 
32 34
     private final long ping;

+ 2
- 0
src/com/dmdirc/events/ServerPingsentEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.interfaces.Connection;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Fired when sending a server ping request.
29 30
  */
31
+@AsyncEvent
30 32
 public class ServerPingsentEvent extends ServerEvent {
31 33
 
32 34
     public ServerPingsentEvent(final long timestamp, final Connection connection) {

+ 2
- 0
src/com/dmdirc/events/UserErrorEvent.java Ver arquivo

@@ -23,10 +23,12 @@
23 23
 package com.dmdirc.events;
24 24
 
25 25
 import com.dmdirc.logger.ErrorLevel;
26
+import com.dmdirc.util.AsyncEvent;
26 27
 
27 28
 /**
28 29
  * Event class for user errors.
29 30
  */
31
+@AsyncEvent
30 32
 public class UserErrorEvent extends ErrorEvent {
31 33
 
32 34
     public UserErrorEvent(final ErrorLevel level, final Throwable throwable, final String message,

src/com/dmdirc/events/ChanelNotopicEvent.java → src/com/dmdirc/util/AsyncEvent.java Ver arquivo

@@ -20,21 +20,18 @@
20 20
  * SOFTWARE.
21 21
  */
22 22
 
23
-package com.dmdirc.events;
23
+package com.dmdirc.util;
24 24
 
25
-import com.dmdirc.Channel;
25
+import java.lang.annotation.ElementType;
26
+import java.lang.annotation.Retention;
27
+import java.lang.annotation.RetentionPolicy;
28
+import java.lang.annotation.Target;
26 29
 
27 30
 /**
28
- * Fired when a channel topic is cleared.
31
+ * Marker interface used to identify an event that should be dispatched asynchronously by a
32
+ * {@link DynamicAsyncEventBus}.
29 33
  */
30
-public class ChanelNotopicEvent extends ChannelDisplayableEvent {
31
-
32
-    public ChanelNotopicEvent(final long timestamp, final Channel channel) {
33
-        super(timestamp, channel);
34
-    }
35
-
36
-    public ChanelNotopicEvent(final Channel channel) {
37
-        super(channel);
38
-    }
39
-
34
+@Target(ElementType.TYPE)
35
+@Retention(RetentionPolicy.RUNTIME)
36
+public @interface AsyncEvent {
40 37
 }

+ 55
- 0
src/com/dmdirc/util/DynamicAsyncEventBus.java Ver arquivo

@@ -0,0 +1,55 @@
1
+/*
2
+ * Copyright (c) 2006-2014 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.util;
24
+
25
+import com.google.common.eventbus.EventBus;
26
+
27
+import java.util.concurrent.Executor;
28
+
29
+/**
30
+ * An {@link EventBus} that will dispatch events asynchronously if they annotated with
31
+ * {@link AsyncEvent}.
32
+ */
33
+public class DynamicAsyncEventBus extends EventBus {
34
+
35
+    private final Executor executor;
36
+
37
+    public DynamicAsyncEventBus(final Executor executor) {
38
+        this.executor = executor;
39
+    }
40
+
41
+    @Override
42
+    public void post(final Object event) {
43
+        if (event.getClass().isAnnotationPresent(AsyncEvent.class)) {
44
+            executor.execute(new Runnable() {
45
+                @Override
46
+                public void run() {
47
+                    DynamicAsyncEventBus.super.post(event);
48
+                }
49
+            });
50
+        } else {
51
+            super.post(event);
52
+        }
53
+    }
54
+
55
+}

Carregando…
Cancelar
Salvar