Browse Source

Merge pull request #554 from greboid/dev2

Fix client after parser changes. Eventbouseseses.
pull/556/head
Chris Smith 9 years ago
parent
commit
898cc1ad9b

+ 1
- 1
src/com/dmdirc/Channel.java View File

@@ -282,7 +282,7 @@ public class Channel extends FrameContainer implements GroupChat {
282 282
         getConfigManager().getBinder().unbind(this);
283 283
 
284 284
         connection.getParser().map(Parser::getCallbackManager)
285
-                .ifPresent(cm -> cm.delAllCallback(eventHandler));
285
+                .ifPresent(cm -> cm.unsubscribe(eventHandler));
286 286
 
287 287
         // Trigger any actions neccessary
288 288
         if (isOnChannel && connection.getState() != ServerState.CLOSING) {

+ 166
- 146
src/com/dmdirc/ChannelEventHandler.java View File

@@ -47,27 +47,14 @@ import com.dmdirc.events.ChannelUserAwayEvent;
47 47
 import com.dmdirc.events.ChannelUserBackEvent;
48 48
 import com.dmdirc.interfaces.Connection;
49 49
 import com.dmdirc.parser.common.AwayState;
50
-import com.dmdirc.parser.common.CallbackManager;
50
+import com.dmdirc.parser.events.ChannelCTCPEvent;
51
+import com.dmdirc.parser.events.ChannelListModeEvent;
52
+import com.dmdirc.parser.events.ChannelNamesEvent;
53
+import com.dmdirc.parser.events.ChannelTopicEvent;
54
+import com.dmdirc.parser.events.OtherAwayStateEvent;
51 55
 import com.dmdirc.parser.interfaces.ChannelClientInfo;
52 56
 import com.dmdirc.parser.interfaces.ChannelInfo;
53
-import com.dmdirc.parser.interfaces.ClientInfo;
54 57
 import com.dmdirc.parser.interfaces.Parser;
55
-import com.dmdirc.parser.interfaces.callbacks.CallbackInterface;
56
-import com.dmdirc.parser.interfaces.callbacks.ChannelActionListener;
57
-import com.dmdirc.parser.interfaces.callbacks.ChannelCtcpListener;
58
-import com.dmdirc.parser.interfaces.callbacks.ChannelJoinListener;
59
-import com.dmdirc.parser.interfaces.callbacks.ChannelKickListener;
60
-import com.dmdirc.parser.interfaces.callbacks.ChannelListModeListener;
61
-import com.dmdirc.parser.interfaces.callbacks.ChannelMessageListener;
62
-import com.dmdirc.parser.interfaces.callbacks.ChannelModeChangeListener;
63
-import com.dmdirc.parser.interfaces.callbacks.ChannelModeNoticeListener;
64
-import com.dmdirc.parser.interfaces.callbacks.ChannelNamesListener;
65
-import com.dmdirc.parser.interfaces.callbacks.ChannelNickChangeListener;
66
-import com.dmdirc.parser.interfaces.callbacks.ChannelNoticeListener;
67
-import com.dmdirc.parser.interfaces.callbacks.ChannelPartListener;
68
-import com.dmdirc.parser.interfaces.callbacks.ChannelQuitListener;
69
-import com.dmdirc.parser.interfaces.callbacks.ChannelTopicListener;
70
-import com.dmdirc.parser.interfaces.callbacks.OtherAwayStateListener;
71 58
 import com.dmdirc.util.EventUtils;
72 59
 
73 60
 import com.google.common.base.Strings;
@@ -78,15 +65,12 @@ import java.util.stream.Collectors;
78 65
 
79 66
 import javax.annotation.Nonnull;
80 67
 
68
+import net.engio.mbassy.listener.Handler;
69
+
81 70
 /**
82 71
  * Handles events for channel objects.
83 72
  */
84
-public class ChannelEventHandler extends EventHandler implements
85
-        ChannelMessageListener, ChannelNamesListener, ChannelTopicListener,
86
-        ChannelJoinListener, ChannelPartListener, ChannelKickListener,
87
-        ChannelQuitListener, ChannelActionListener, ChannelNickChangeListener,
88
-        ChannelModeChangeListener, ChannelCtcpListener, OtherAwayStateListener,
89
-        ChannelNoticeListener, ChannelModeNoticeListener, ChannelListModeListener {
73
+public class ChannelEventHandler extends EventHandler {
90 74
 
91 75
     /** The channel that owns this event handler. */
92 76
     private final Channel owner;
@@ -96,23 +80,11 @@ public class ChannelEventHandler extends EventHandler implements
96 80
 
97 81
     public ChannelEventHandler(final Channel owner, final DMDircMBassador eventBus,
98 82
             final GroupChatUserManager groupChatUserManager) {
99
-        super(eventBus);
100 83
         this.owner = owner;
101 84
         this.eventBus = eventBus;
102 85
         this.groupChatUserManager = groupChatUserManager;
103 86
     }
104 87
 
105
-    @SuppressWarnings("unchecked")
106
-    @Override
107
-    protected <T extends CallbackInterface> void addCallback(final CallbackManager cbm,
108
-            final Class<T> type) {
109
-        if (OtherAwayStateListener.class.equals(type)) {
110
-            cbm.addCallback(type, (T) this);
111
-        } else {
112
-            cbm.addCallback(type, (T) this, owner.getChannelInfo().getName());
113
-        }
114
-    }
115
-
116 88
     @Nonnull
117 89
     @Override
118 90
     protected Connection getConnection() {
@@ -131,36 +103,45 @@ public class ChannelEventHandler extends EventHandler implements
131 103
                 .map(c -> client.getClient().equals(c)).orElse(false);
132 104
     }
133 105
 
134
-    @Override
135
-    public void onChannelMessage(final Parser parser, final Date date,
136
-            final ChannelInfo channel, final ChannelClientInfo client,
137
-            final String message, final String host) {
138
-        checkParser(parser);
106
+    @Handler
107
+    public void onChannelMessage(final com.dmdirc.parser.events.ChannelMessageEvent event) {
108
+        checkParser(event.getParser());
109
+        if (!checkChannel(event.getChannel())) {
110
+            return;
111
+        }
139 112
 
140
-        eventBus.publishAsync(new ChannelMessageEvent(date.getTime(), owner,
141
-                groupChatUserManager.getUserFromClient(client, owner), message));
113
+        eventBus.publishAsync(new ChannelMessageEvent(event.getDate().getTime(), owner,
114
+                groupChatUserManager.getUserFromClient(event.getClient(), owner), event.getMessage()));
142 115
     }
143 116
 
144
-    @Override
145
-    public void onChannelGotNames(final Parser parser, final Date date, final ChannelInfo channel) {
146
-        checkParser(parser);
117
+    @Handler
118
+    public void onChannelGotNames(final ChannelNamesEvent event) {
119
+        checkParser(event.getParser());
120
+        if (!checkChannel(event.getChannel())) {
121
+            return;
122
+        }
147 123
 
148
-        owner.setClients(channel.getChannelClients().stream()
124
+        owner.setClients(event.getChannel().getChannelClients().stream()
149 125
                 .map(client -> groupChatUserManager.getUserFromClient(client, owner))
150 126
                 .collect(Collectors.toList()));
151
-        eventBus.publishAsync(new ChannelGotNamesEvent(date.getTime(), owner));
127
+        eventBus.publishAsync(new ChannelGotNamesEvent(event.getDate().getTime(), owner));
152 128
     }
153 129
 
154
-    @Override
155
-    public void onChannelTopic(final Parser parser, final Date date,
156
-            final ChannelInfo channel, final boolean isJoinTopic) {
157
-        checkParser(parser);
130
+    @Handler
131
+    public void onChannelTopic(final ChannelTopicEvent event) {
132
+        checkParser(event.getParser());
133
+        if (!checkChannel(event.getChannel())) {
134
+            return;
135
+        }
136
+
137
+        final ChannelInfo channel = event.getChannel();
138
+        final Date date = event.getDate();
158 139
 
159 140
         final Topic topic = Topic.create(channel.getTopic(),
160 141
                 owner.getUser(getConnection().getUser(channel.getTopicSetter())).orElse(null),
161 142
                 channel.getTopicTime());
162 143
 
163
-        if (isJoinTopic) {
144
+        if (event.isJoinTopic()) {
164 145
             if (Strings.isNullOrEmpty(channel.getTopic())) {
165 146
                 eventBus.publishAsync(new ChannelNoTopicEvent(owner));
166 147
             } else {
@@ -181,7 +162,7 @@ public class ChannelEventHandler extends EventHandler implements
181 162
 
182 163
         final Optional<Topic> currentTopic = owner.getCurrentTopic();
183 164
         final boolean hasNewTopic = !Strings.isNullOrEmpty(channel.getTopic());
184
-        if (!isJoinTopic
165
+        if (!event.isJoinTopic()
185 166
                 || !currentTopic.isPresent() && hasNewTopic
186 167
                 || currentTopic.isPresent() && !channel.getTopic().equals(
187 168
                         owner.getCurrentTopic().get().getTopic())) {
@@ -193,20 +174,28 @@ public class ChannelEventHandler extends EventHandler implements
193 174
         }
194 175
     }
195 176
 
196
-    @Override
197
-    public void onChannelJoin(final Parser parser, final Date date, final ChannelInfo channel,
198
-            final ChannelClientInfo client) {
199
-        checkParser(parser);
177
+    @Handler
178
+    public void onChannelJoin(final com.dmdirc.parser.events.ChannelJoinEvent event) {
179
+        checkParser(event.getParser());
180
+        if (!checkChannel(event.getChannel())) {
181
+            return;
182
+        }
200 183
 
201
-        eventBus.publish(new ChannelJoinEvent(date.getTime(), owner,
202
-                groupChatUserManager.getUserFromClient(client, owner)));
203
-        owner.addClient(groupChatUserManager.getUserFromClient(client, owner));
184
+        eventBus.publish(new ChannelJoinEvent(event.getDate().getTime(), owner,
185
+                groupChatUserManager.getUserFromClient(event.getClient(), owner)));
186
+        owner.addClient(groupChatUserManager.getUserFromClient(event.getClient(), owner));
204 187
     }
205 188
 
206
-    @Override
207
-    public void onChannelPart(final Parser parser, final Date date, final ChannelInfo channel,
208
-            final ChannelClientInfo client, final String reason) {
209
-        checkParser(parser);
189
+    @Handler
190
+    public void onChannelPart(final com.dmdirc.parser.events.ChannelPartEvent event) {
191
+        checkParser(event.getParser());
192
+        if (!checkChannel(event.getChannel())) {
193
+            return;
194
+        }
195
+
196
+        final ChannelClientInfo client = event.getClient();
197
+        final Date date = event.getDate();
198
+        final String reason = event.getReason();
210 199
 
211 200
         if (isMyself(client)) {
212 201
             eventBus.publishAsync(new ChannelSelfPartEvent(date.getTime(), owner,
@@ -218,66 +207,82 @@ public class ChannelEventHandler extends EventHandler implements
218 207
         owner.removeClient(groupChatUserManager.getUserFromClient(client, owner));
219 208
     }
220 209
 
221
-    @Override
222
-    public void onChannelKick(final Parser parser, final Date date, final ChannelInfo channel,
223
-            final ChannelClientInfo kickedClient, final ChannelClientInfo client,
224
-            final String reason, final String host) {
225
-        checkParser(parser);
226
-
227
-        eventBus.publishAsync(new ChannelKickEvent(date.getTime(), owner,
228
-                groupChatUserManager.getUserFromClient(client, owner),
229
-                groupChatUserManager.getUserFromClient(kickedClient, owner), reason));
210
+    @Handler
211
+    public void onChannelKick(final com.dmdirc.parser.events.ChannelKickEvent event) {
212
+        checkParser(event.getParser());
213
+        if (!checkChannel(event.getChannel())) {
214
+            return;
215
+        }
216
+        final ChannelClientInfo kickedClient = event.getKickedClient();
217
+
218
+        eventBus.publishAsync(new ChannelKickEvent(event.getDate().getTime(), owner,
219
+                groupChatUserManager.getUserFromClient(event.getClient(), owner),
220
+                groupChatUserManager.getUserFromClient(kickedClient, owner), event.getReason()));
230 221
         owner.removeClient(groupChatUserManager.getUserFromClient(kickedClient, owner));
231 222
     }
232 223
 
233
-    @Override
234
-    public void onChannelQuit(final Parser parser, final Date date, final ChannelInfo channel,
235
-            final ChannelClientInfo client, final String reason) {
236
-        checkParser(parser);
224
+    @Handler
225
+    public void onChannelQuit(final com.dmdirc.parser.events.ChannelQuitEvent event) {
226
+        checkParser(event.getParser());
227
+        if (!checkChannel(event.getChannel())) {
228
+            return;
229
+        }
237 230
 
238
-        eventBus.publishAsync(new ChannelQuitEvent(date.getTime(), owner,
239
-                groupChatUserManager.getUserFromClient(client, owner), reason));
240
-        owner.removeClient(groupChatUserManager.getUserFromClient(client, owner));
231
+        eventBus.publishAsync(new ChannelQuitEvent(event.getDate().getTime(), owner,
232
+                groupChatUserManager.getUserFromClient(event.getClient(), owner), event.getReason()));
233
+        owner.removeClient(groupChatUserManager.getUserFromClient(event.getClient(), owner));
241 234
     }
242 235
 
243
-    @Override
244
-    public void onChannelAction(final Parser parser, final Date date, final ChannelInfo channel,
245
-            final ChannelClientInfo client, final String message,
246
-            final String host) {
247
-        checkParser(parser);
236
+    @Handler
237
+    public void onChannelAction(final com.dmdirc.parser.events.ChannelActionEvent event) {
238
+        checkParser(event.getParser());
239
+        if (!checkChannel(event.getChannel())) {
240
+            return;
241
+        }
248 242
 
249
-        eventBus.publishAsync(new ChannelActionEvent(date.getTime(), owner,
250
-                groupChatUserManager.getUserFromClient(client, owner), message));
243
+        eventBus.publishAsync(new ChannelActionEvent(event.getDate().getTime(), owner,
244
+                groupChatUserManager.getUserFromClient(event.getClient(), owner), event.getMessage()));
251 245
     }
252 246
 
253
-    @Override
254
-    public void onChannelNickChanged(final Parser parser, final Date date,
255
-            final ChannelInfo channel, final ChannelClientInfo client, final String oldNick) {
256
-        checkParser(parser);
247
+    @Handler
248
+    public void onChannelNickChanged(final com.dmdirc.parser.events.ChannelNickChangeEvent event) {
249
+        checkParser(event.getParser());
250
+        if (!checkChannel(event.getChannel())) {
251
+            return;
252
+        }
253
+
254
+        final String oldNick = event.getOldNick();
255
+        final ChannelClientInfo client = event.getClient();
257 256
 
258 257
         owner.renameClient(oldNick, client.getClient().getNickname());
259 258
 
260 259
         if (isMyself(client)) {
261 260
             eventBus.publishAsync(
262
-                    new ChannelSelfNickChangeEvent(date.getTime(), owner,
261
+                    new ChannelSelfNickChangeEvent(event.getDate().getTime(), owner,
263 262
                             groupChatUserManager.getUserFromClient(client, owner), oldNick));
264 263
         } else {
265 264
             eventBus.publishAsync(
266
-                    new ChannelNickChangeEvent(date.getTime(), owner,
265
+                    new ChannelNickChangeEvent(event.getDate().getTime(), owner,
267 266
                             groupChatUserManager.getUserFromClient(client, owner), oldNick));
268 267
         }
269 268
     }
270 269
 
271
-    @Override
272
-    public void onChannelModeChanged(final Parser parser, final Date date,
273
-            final ChannelInfo channel, final ChannelClientInfo client, final String host,
274
-            final String modes) {
275
-        checkParser(parser);
270
+    @Handler
271
+    public void onChannelModeChanged(final com.dmdirc.parser.events.ChannelModeChangeEvent event) {
272
+        checkParser(event.getParser());
273
+        if (!checkChannel(event.getChannel())) {
274
+            return;
275
+        }
276
+
277
+        final String host = event.getHost();
278
+        final String modes = event.getModes();
279
+        final ChannelClientInfo client = event.getClient();
280
+        final Date date = event.getDate();
276 281
 
277 282
         if (host.isEmpty()) {
278
-            final ChannelModesDiscoveredEvent event = new ChannelModesDiscoveredEvent(
283
+            final ChannelModesDiscoveredEvent coreEvent = new ChannelModesDiscoveredEvent(
279 284
                     date.getTime(), owner, modes.length() <= 1 ? "" : modes);
280
-            final String format = EventUtils.postDisplayable(eventBus, event,
285
+            final String format = EventUtils.postDisplayable(eventBus, coreEvent,
281 286
                     modes.length() <= 1 ? "channelNoModes" : "channelModeDiscovered");
282 287
             owner.doNotification(date, format, modes.length() <= 1 ? "" : modes);
283 288
         } else if (isMyself(client)) {
@@ -291,66 +296,81 @@ public class ChannelEventHandler extends EventHandler implements
291 296
         owner.refreshClients();
292 297
     }
293 298
 
294
-    @Override
295
-    public void onChannelCTCP(final Parser parser, final Date date,
296
-            final ChannelInfo channel, final ChannelClientInfo client,
297
-            final String type, final String message, final String host) {
298
-        checkParser(parser);
299
+    @Handler
300
+    public void onChannelCTCP(final ChannelCTCPEvent event) {
301
+        checkParser(event.getParser());
302
+        if (!checkChannel(event.getChannel())) {
303
+            return;
304
+        }
305
+
306
+        final ChannelClientInfo client = event.getClient();
307
+        final String message = event.getMessage();
308
+        final Date date = event.getDate();
309
+        final String type = event.getType();
299 310
 
300
-        final ChannelCtcpEvent event = new ChannelCtcpEvent(date.getTime(), owner,
311
+        final ChannelCtcpEvent coreEvent = new ChannelCtcpEvent(date.getTime(), owner,
301 312
                 groupChatUserManager.getUserFromClient(client, owner),type, message);
302
-        eventBus.publish(event);
303
-        if (!event.isHandled()) {
313
+        eventBus.publish(coreEvent);
314
+        if (!coreEvent.isHandled()) {
304 315
             getConnection().sendCTCPReply(client.getClient().getNickname(), type, message);
305 316
         }
306 317
     }
307 318
 
308
-    @Override
309
-    public void onAwayStateOther(final Parser parser, final Date date,
310
-            final ClientInfo client, final AwayState oldState, final AwayState state) {
311
-        checkParser(parser);
312
-
313
-        owner.getUser(owner.getConnection().get().getUser(client.getNickname())).ifPresent(c -> {
314
-            if (state == AwayState.AWAY) {
315
-                eventBus.publishAsync(new ChannelUserAwayEvent(date.getTime(), owner, c));
316
-            } else {
317
-                eventBus.publishAsync(new ChannelUserBackEvent(date.getTime(), owner, c));
318
-            }
319
-        });
319
+    @Handler
320
+    public void onAwayStateOther(final OtherAwayStateEvent event) {
321
+        checkParser(event.getParser());
322
+
323
+        owner.getUser(owner.getConnection().get().getUser(event.getClient().getNickname()))
324
+                .ifPresent(c -> {
325
+                    if (event.getNewState() == AwayState.AWAY) {
326
+                        eventBus.publishAsync(
327
+                                new ChannelUserAwayEvent(event.getDate().getTime(), owner, c));
328
+                    } else {
329
+                        eventBus.publishAsync(
330
+                                new ChannelUserBackEvent(event.getDate().getTime(), owner, c));
331
+                    }
332
+                });
320 333
     }
321 334
 
322
-    @Override
323
-    public void onChannelNotice(final Parser parser, final Date date,
324
-            final ChannelInfo channel, final ChannelClientInfo client,
325
-            final String message, final String host) {
326
-        checkParser(parser);
335
+    @Handler
336
+    public void onChannelNotice(final com.dmdirc.parser.events.ChannelNoticeEvent event) {
337
+        checkParser(event.getParser());
338
+        if (!checkChannel(event.getChannel())) {
339
+            return;
340
+        }
327 341
 
328
-        eventBus.publishAsync(new ChannelNoticeEvent(date.getTime(), owner,
329
-                groupChatUserManager.getUserFromClient(client, owner), message));
342
+        eventBus.publishAsync(new ChannelNoticeEvent(event.getDate().getTime(), owner,
343
+                groupChatUserManager.getUserFromClient(event.getClient(), owner), event.getMessage()));
330 344
     }
331 345
 
332
-    @Override
333
-    public void onChannelModeNotice(final Parser parser, final Date date,
334
-            final ChannelInfo channel, final char prefix,
335
-            final ChannelClientInfo client, final String message,
336
-            final String host) {
337
-        checkParser(parser);
338
-
339
-        eventBus.publishAsync(new ChannelModeNoticeEvent(date.getTime(), owner,
340
-                groupChatUserManager.getUserFromClient(client, owner), String.valueOf(prefix),
341
-                message));
346
+    @Handler
347
+    public void onChannelModeNotice(final com.dmdirc.parser.events.ChannelModeNoticeEvent event) {
348
+        checkParser(event.getParser());
349
+        if (!checkChannel(event.getChannel())) {
350
+            return;
351
+        }
352
+
353
+        eventBus.publishAsync(new ChannelModeNoticeEvent(event.getDate().getTime(), owner,
354
+                groupChatUserManager.getUserFromClient(event.getClient(), owner), String.valueOf
355
+                (event.getPrefix()), event.getMessage()));
342 356
     }
343 357
 
344
-    @Override
345
-    public void onChannelGotListModes(final Parser parser, final Date date,
346
-            final ChannelInfo channel, final char mode) {
347
-        checkParser(parser);
358
+    @Handler
359
+    public void onChannelGotListModes(final ChannelListModeEvent event) {
360
+        checkParser(event.getParser());
361
+        if (!checkChannel(event.getChannel())) {
362
+            return;
363
+        }
348 364
 
349
-        final ChannelListModesRetrievedEvent event = new ChannelListModesRetrievedEvent(
350
-                date.getTime(), owner, mode);
351
-        final String format = EventUtils.postDisplayable(eventBus, event,
365
+        final ChannelListModesRetrievedEvent coreEvent = new ChannelListModesRetrievedEvent(
366
+                event.getDate().getTime(), owner, event.getMode());
367
+        final String format = EventUtils.postDisplayable(eventBus, coreEvent,
352 368
                 "channelListModeRetrieved");
353
-        owner.doNotification(date, format, mode);
369
+        owner.doNotification(event.getDate(), format, event.getMode());
370
+    }
371
+
372
+    private boolean checkChannel(final ChannelInfo channelInfo) {
373
+        return owner.getChannelInfo().equals(channelInfo);
354 374
     }
355 375
 
356 376
 }

+ 4
- 38
src/com/dmdirc/EventHandler.java View File

@@ -22,70 +22,36 @@
22 22
 
23 23
 package com.dmdirc;
24 24
 
25
-import com.dmdirc.events.AppErrorEvent;
26 25
 import com.dmdirc.interfaces.Connection;
27
-import com.dmdirc.logger.ErrorLevel;
28
-import com.dmdirc.parser.common.CallbackManager;
29
-import com.dmdirc.parser.common.CallbackNotFoundException;
30 26
 import com.dmdirc.parser.interfaces.Parser;
31
-import com.dmdirc.parser.interfaces.callbacks.CallbackInterface;
32 27
 
33 28
 import javax.annotation.Nonnull;
34 29
 
35 30
 /**
36 31
  * Abstracts some behaviour used by Event Handlers.
37 32
  */
38
-public abstract class EventHandler implements CallbackInterface {
39
-
40
-    private final DMDircMBassador eventBus;
33
+public abstract class EventHandler {
41 34
 
42 35
     /**
43 36
      * Creates a new instance.
44
-     *
45
-     * @param eventBus The event bus to post errors to.
46 37
      */
47
-    protected EventHandler(final DMDircMBassador eventBus) {
48
-        this.eventBus = eventBus;
38
+    protected EventHandler() {
49 39
     }
50 40
 
51 41
     /**
52 42
      * Registers all callbacks that this event handler implements with the owner's parser.
53 43
      */
54 44
     public void registerCallbacks() {
55
-        final CallbackManager cbm = getConnection().getParser().get().getCallbackManager();
56
-
57
-        try {
58
-            for (Class<?> iface : getClass().getInterfaces()) {
59
-                if (CallbackInterface.class.isAssignableFrom(iface)) {
60
-                    addCallback(cbm, iface.asSubclass(CallbackInterface.class));
61
-                }
62
-            }
63
-        } catch (CallbackNotFoundException exception) {
64
-            eventBus.publishAsync(new AppErrorEvent(ErrorLevel.FATAL, exception,
65
-                    "Unable to register callbacks", ""));
66
-        }
45
+        getConnection().getParser().get().getCallbackManager().subscribe(this);
67 46
     }
68 47
 
69 48
     /**
70 49
      * Unregisters all callbacks that have been registered by this event handler.
71 50
      */
72 51
     public void unregisterCallbacks() {
73
-        getConnection().getParser().map(Parser::getCallbackManager)
74
-                .ifPresent(cm -> cm.delAllCallback(this));
52
+        getConnection().getParser().map(Parser::getCallbackManager).ifPresent(cm -> cm.unsubscribe(this));
75 53
     }
76 54
 
77
-    /**
78
-     * Adds a callback to this event handler.
79
-     *
80
-     * @param <T>  The type of callback to be added
81
-     * @param cbm  The callback manager to use
82
-     * @param type The type of the callback to be added
83
-     *
84
-     * @throws CallbackNotFoundException if the specified callback isn't found
85
-     */
86
-    protected abstract <T extends CallbackInterface> void addCallback(
87
-            final CallbackManager cbm, final Class<T> type);
88
-
89 55
     /**
90 56
      * Retrieves the connection that this event handler is for.
91 57
      *

+ 52
- 44
src/com/dmdirc/Query.java View File

@@ -40,13 +40,13 @@ import com.dmdirc.logger.ErrorLevel;
40 40
 import com.dmdirc.parser.common.CallbackManager;
41 41
 import com.dmdirc.parser.common.CallbackNotFoundException;
42 42
 import com.dmdirc.parser.common.CompositionState;
43
+import com.dmdirc.parser.events.CompositionStateChangeEvent;
44
+import com.dmdirc.parser.events.NickChangeEvent;
45
+import com.dmdirc.parser.events.PrivateActionEvent;
46
+import com.dmdirc.parser.events.PrivateMessageEvent;
47
+import com.dmdirc.parser.events.QuitEvent;
43 48
 import com.dmdirc.parser.interfaces.ClientInfo;
44 49
 import com.dmdirc.parser.interfaces.Parser;
45
-import com.dmdirc.parser.interfaces.callbacks.CompositionStateChangeListener;
46
-import com.dmdirc.parser.interfaces.callbacks.NickChangeListener;
47
-import com.dmdirc.parser.interfaces.callbacks.PrivateActionListener;
48
-import com.dmdirc.parser.interfaces.callbacks.PrivateMessageListener;
49
-import com.dmdirc.parser.interfaces.callbacks.QuitListener;
50 50
 import com.dmdirc.ui.core.components.WindowComponent;
51 51
 import com.dmdirc.ui.input.TabCompleterFactory;
52 52
 import com.dmdirc.ui.messages.BackBufferFactory;
@@ -54,18 +54,17 @@ import com.dmdirc.ui.messages.sink.MessageSinkManager;
54 54
 
55 55
 import java.awt.Toolkit;
56 56
 import java.util.Arrays;
57
-import java.util.Date;
58 57
 import java.util.List;
59 58
 import java.util.Optional;
60 59
 
60
+import net.engio.mbassy.listener.Handler;
61
+
61 62
 /**
62 63
  * The Query class represents the client's view of a query with another user. It handles callbacks
63 64
  * for query events from the parser, maintains the corresponding QueryWindow, and handles user input
64 65
  * for the query.
65 66
  */
66
-public class Query extends FrameContainer implements PrivateActionListener,
67
-        PrivateMessageListener, NickChangeListener, QuitListener,
68
-        CompositionStateChangeListener, PrivateChat {
67
+public class Query extends FrameContainer implements PrivateChat {
69 68
 
70 69
     /** The connection this Query is on. */
71 70
     private final Connection connection;
@@ -158,18 +157,25 @@ public class Query extends FrameContainer implements PrivateActionListener,
158 157
         }
159 158
     }
160 159
 
161
-    @Override
162
-    public void onPrivateMessage(final Parser parser, final Date date,
163
-            final String message, final String host) {
160
+    @Handler
161
+    public void onPrivateMessage(final PrivateMessageEvent event) {
162
+        if (!checkQuery(event.getHost())) {
163
+            return;
164
+        }
165
+        if (checkQuery(event.getHost())) {
166
+
167
+        }
164 168
         getEventBus().publishAsync(
165
-                new QueryMessageEvent(this, connection.getUser(host), message));
169
+                new QueryMessageEvent(this, connection.getUser(event.getHost()), event.getMessage()));
166 170
     }
167 171
 
168
-    @Override
169
-    public void onPrivateAction(final Parser parser, final Date date,
170
-            final String message, final String host) {
172
+    @Handler
173
+    public void onPrivateAction(final PrivateActionEvent event) {
174
+        if (!checkQuery(event.getHost())) {
175
+            return;
176
+        }
171 177
         getEventBus().publishAsync(
172
-                new QueryActionEvent(this, connection.getUser(host), message));
178
+                new QueryActionEvent(this, connection.getUser(event.getHost()), event.getMessage()));
173 179
     }
174 180
 
175 181
     /**
@@ -187,33 +193,26 @@ public class Query extends FrameContainer implements PrivateActionListener,
187 193
         final String nick = getNickname();
188 194
 
189 195
         try {
190
-            callbackManager.addCallback(PrivateActionListener.class, this, nick);
191
-            callbackManager.addCallback(PrivateMessageListener.class, this, nick);
192
-            callbackManager.addCallback(CompositionStateChangeListener.class, this, nick);
193
-            callbackManager.addCallback(QuitListener.class, this);
194
-            callbackManager.addCallback(NickChangeListener.class, this);
196
+            callbackManager.subscribe(this);
195 197
         } catch (CallbackNotFoundException ex) {
196 198
             getEventBus().publishAsync(new AppErrorEvent(ErrorLevel.HIGH, ex,
197 199
                     "Unable to get query events", ex.getMessage()));
198 200
         }
199 201
     }
200 202
 
201
-    @Override
202
-    public void onNickChanged(final Parser parser, final Date date,
203
-            final ClientInfo client, final String oldNick) {
203
+    @Handler
204
+    public void onNickChanged(final NickChangeEvent event) {
205
+        if (!checkQuery(event.getClient().getHostname())) {
206
+            return;
207
+        }
208
+        final ClientInfo client = event.getClient();
209
+        final String oldNick = event.getOldNick();
204 210
         if (client.getNickname().equals(getNickname())) {
205 211
             final CallbackManager callbackManager = connection.getParser().get().getCallbackManager();
206 212
 
207
-            callbackManager.delCallback(PrivateActionListener.class, this);
208
-            callbackManager.delCallback(PrivateMessageListener.class, this);
209
-            callbackManager.delCallback(CompositionStateChangeListener.class, this);
210
-
213
+            // TODO: Not specific now.
211 214
             try {
212
-                callbackManager.addCallback(PrivateActionListener.class, this, client.getNickname());
213
-                callbackManager.
214
-                        addCallback(PrivateMessageListener.class, this, client.getNickname());
215
-                callbackManager.addCallback(CompositionStateChangeListener.class, this, client.
216
-                        getNickname());
215
+                callbackManager.subscribe(this);
217 216
             } catch (CallbackNotFoundException ex) {
218 217
                 getEventBus().publishAsync(
219 218
                         new AppErrorEvent(ErrorLevel.HIGH, ex, "Unable to get query events",
@@ -229,18 +228,22 @@ public class Query extends FrameContainer implements PrivateActionListener,
229 228
         }
230 229
     }
231 230
 
232
-    @Override
233
-    public void onQuit(final Parser parser, final Date date,
234
-            final ClientInfo client, final String reason) {
235
-        if (client.getNickname().equals(getNickname())) {
236
-            getEventBus().publish(new QueryQuitEvent(this, reason));
231
+    @Handler
232
+    public void onQuit(final QuitEvent event) {
233
+        if (!checkQuery(event.getClient().getHostname())) {
234
+            return;
235
+        }
236
+        if (event.getClient().getNickname().equals(getNickname())) {
237
+            getEventBus().publish(new QueryQuitEvent(this, event.getReason()));
237 238
         }
238 239
     }
239 240
 
240
-    @Override
241
-    public void onCompositionStateChanged(final Parser parser, final Date date,
242
-            final CompositionState state, final String host) {
243
-        if (state == CompositionState.TYPING) {
241
+    @Handler
242
+    public void onCompositionStateChanged(final CompositionStateChangeEvent event) {
243
+        if (!checkQuery(event.getHost())) {
244
+            return;
245
+        }
246
+        if (event.getState() == CompositionState.TYPING) {
244 247
             addComponent(WindowComponent.TYPING_INDICATOR.getIdentifier());
245 248
         } else {
246 249
             removeComponent(WindowComponent.TYPING_INDICATOR.getIdentifier());
@@ -257,7 +260,8 @@ public class Query extends FrameContainer implements PrivateActionListener,
257 260
         super.close();
258 261
 
259 262
         // Remove any callbacks or listeners
260
-        connection.getParser().map(Parser::getCallbackManager).ifPresent(cm -> cm.delAllCallback(this));
263
+        connection.getParser().map(Parser::getCallbackManager).ifPresent(cm -> cm.unsubscribe(this));
264
+
261 265
 
262 266
         // Trigger action for the window closing
263 267
         getEventBus().publishAsync(new QueryClosedEvent(this));
@@ -286,4 +290,8 @@ public class Query extends FrameContainer implements PrivateActionListener,
286 290
         return user;
287 291
     }
288 292
 
293
+    private boolean checkQuery(final String host) {
294
+        return user.getHostname().orElse("").equals(host);
295
+    }
296
+
289 297
 }

+ 233
- 267
src/com/dmdirc/ServerEventHandler.java View File

@@ -55,50 +55,42 @@ import com.dmdirc.events.UserErrorEvent;
55 55
 import com.dmdirc.interfaces.Connection;
56 56
 import com.dmdirc.logger.ErrorLevel;
57 57
 import com.dmdirc.parser.common.AwayState;
58
-import com.dmdirc.parser.common.CallbackManager;
59
-import com.dmdirc.parser.common.ParserError;
60
-import com.dmdirc.parser.interfaces.ChannelInfo;
61
-import com.dmdirc.parser.interfaces.ClientInfo;
58
+import com.dmdirc.parser.events.AuthNoticeEvent;
59
+import com.dmdirc.parser.events.AwayStateEvent;
60
+import com.dmdirc.parser.events.ChannelSelfJoinEvent;
61
+import com.dmdirc.parser.events.ConnectErrorEvent;
62
+import com.dmdirc.parser.events.ErrorInfoEvent;
63
+import com.dmdirc.parser.events.InviteEvent;
64
+import com.dmdirc.parser.events.MOTDEndEvent;
65
+import com.dmdirc.parser.events.MOTDLineEvent;
66
+import com.dmdirc.parser.events.MOTDStartEvent;
67
+import com.dmdirc.parser.events.NickChangeEvent;
68
+import com.dmdirc.parser.events.NickInUseEvent;
69
+import com.dmdirc.parser.events.NumericEvent;
70
+import com.dmdirc.parser.events.PingFailureEvent;
71
+import com.dmdirc.parser.events.PingSentEvent;
72
+import com.dmdirc.parser.events.PingSuccessEvent;
73
+import com.dmdirc.parser.events.PrivateActionEvent;
74
+import com.dmdirc.parser.events.PrivateCTCPEvent;
75
+import com.dmdirc.parser.events.PrivateCTCPReplyEvent;
76
+import com.dmdirc.parser.events.PrivateMessageEvent;
77
+import com.dmdirc.parser.events.PrivateNoticeEvent;
78
+import com.dmdirc.parser.events.ServerReadyEvent;
79
+import com.dmdirc.parser.events.SocketCloseEvent;
80
+import com.dmdirc.parser.events.UnknownActionEvent;
81
+import com.dmdirc.parser.events.UnknownMessageEvent;
82
+import com.dmdirc.parser.events.UnknownNoticeEvent;
83
+import com.dmdirc.parser.events.UserModeChangeEvent;
84
+import com.dmdirc.parser.events.UserModeDiscoveryEvent;
85
+import com.dmdirc.parser.events.WallDesyncEvent;
86
+import com.dmdirc.parser.events.WallopEvent;
87
+import com.dmdirc.parser.events.WalluserEvent;
62 88
 import com.dmdirc.parser.interfaces.Parser;
63
-import com.dmdirc.parser.interfaces.callbacks.AuthNoticeListener;
64
-import com.dmdirc.parser.interfaces.callbacks.AwayStateListener;
65
-import com.dmdirc.parser.interfaces.callbacks.CallbackInterface;
66
-import com.dmdirc.parser.interfaces.callbacks.ChannelSelfJoinListener;
67
-import com.dmdirc.parser.interfaces.callbacks.ConnectErrorListener;
68
-import com.dmdirc.parser.interfaces.callbacks.ErrorInfoListener;
69
-import com.dmdirc.parser.interfaces.callbacks.InviteListener;
70
-import com.dmdirc.parser.interfaces.callbacks.MotdEndListener;
71
-import com.dmdirc.parser.interfaces.callbacks.MotdLineListener;
72
-import com.dmdirc.parser.interfaces.callbacks.MotdStartListener;
73
-import com.dmdirc.parser.interfaces.callbacks.NickChangeListener;
74
-import com.dmdirc.parser.interfaces.callbacks.NickInUseListener;
75
-import com.dmdirc.parser.interfaces.callbacks.NumericListener;
76
-import com.dmdirc.parser.interfaces.callbacks.PingFailureListener;
77
-import com.dmdirc.parser.interfaces.callbacks.PingSentListener;
78
-import com.dmdirc.parser.interfaces.callbacks.PingSuccessListener;
79
-import com.dmdirc.parser.interfaces.callbacks.PrivateActionListener;
80
-import com.dmdirc.parser.interfaces.callbacks.PrivateCtcpListener;
81
-import com.dmdirc.parser.interfaces.callbacks.PrivateCtcpReplyListener;
82
-import com.dmdirc.parser.interfaces.callbacks.PrivateMessageListener;
83
-import com.dmdirc.parser.interfaces.callbacks.PrivateNoticeListener;
84
-import com.dmdirc.parser.interfaces.callbacks.ServerErrorListener;
85
-import com.dmdirc.parser.interfaces.callbacks.ServerNoticeListener;
86
-import com.dmdirc.parser.interfaces.callbacks.ServerReadyListener;
87
-import com.dmdirc.parser.interfaces.callbacks.SocketCloseListener;
88
-import com.dmdirc.parser.interfaces.callbacks.UnknownActionListener;
89
-import com.dmdirc.parser.interfaces.callbacks.UnknownMessageListener;
90
-import com.dmdirc.parser.interfaces.callbacks.UnknownNoticeListener;
91
-import com.dmdirc.parser.interfaces.callbacks.UserModeChangeListener;
92
-import com.dmdirc.parser.interfaces.callbacks.UserModeDiscoveryListener;
93
-import com.dmdirc.parser.interfaces.callbacks.WallDesyncListener;
94
-import com.dmdirc.parser.interfaces.callbacks.WallopListener;
95
-import com.dmdirc.parser.interfaces.callbacks.WalluserListener;
96 89
 import com.dmdirc.ui.StatusMessage;
97 90
 import com.dmdirc.util.EventUtils;
98 91
 
99 92
 import com.google.common.base.Strings;
100 93
 
101
-import java.util.Date;
102 94
 import java.util.List;
103 95
 import java.util.Optional;
104 96
 import java.util.Random;
@@ -108,22 +100,13 @@ import javax.annotation.Nonnull;
108 100
 import org.slf4j.Logger;
109 101
 import org.slf4j.LoggerFactory;
110 102
 
103
+import net.engio.mbassy.listener.Handler;
104
+
111 105
 
112 106
 /**
113 107
  * Handles parser events for a Server object.
114 108
  */
115
-public class ServerEventHandler extends EventHandler implements
116
-        ChannelSelfJoinListener, PrivateMessageListener, PrivateActionListener,
117
-        ErrorInfoListener, PrivateCtcpListener, PrivateCtcpReplyListener,
118
-        SocketCloseListener, PrivateNoticeListener, MotdStartListener,
119
-        MotdLineListener, MotdEndListener, NumericListener, PingFailureListener,
120
-        PingSuccessListener, AwayStateListener, ConnectErrorListener,
121
-        NickInUseListener, AuthNoticeListener, UnknownNoticeListener,
122
-        UserModeChangeListener, InviteListener, WallopListener,
123
-        WalluserListener, WallDesyncListener, NickChangeListener,
124
-        ServerErrorListener, PingSentListener, UserModeDiscoveryListener,
125
-        ServerNoticeListener, UnknownMessageListener, UnknownActionListener,
126
-        ServerReadyListener {
109
+public class ServerEventHandler extends EventHandler {
127 110
 
128 111
     private static final Logger LOG = LoggerFactory.getLogger(ServerEventHandler.class);
129 112
 
@@ -142,147 +125,135 @@ public class ServerEventHandler extends EventHandler implements
142 125
      */
143 126
     public ServerEventHandler(final Server owner, final GroupChatManagerImpl groupChatManager,
144 127
             final DMDircMBassador eventBus) {
145
-        super(eventBus);
146 128
         this.owner = owner;
147 129
         this.groupChatManager = groupChatManager;
148 130
         this.eventBus = eventBus;
149 131
     }
150 132
 
151
-    @Override
152
-    @SuppressWarnings("unchecked")
153
-    protected <T extends CallbackInterface> void addCallback(
154
-            final CallbackManager cbm, final Class<T> type) {
155
-        cbm.addCallback(type, (T) this);
156
-    }
157
-
158 133
     @Nonnull
159 134
     @Override
160 135
     protected Connection getConnection() {
161 136
         return owner;
162 137
     }
163 138
 
164
-    @Override
165
-    public void onChannelSelfJoin(final Parser parser, final Date date, final ChannelInfo channel) {
166
-        checkParser(parser);
167
-        groupChatManager.addChannel(channel);
139
+    @Handler
140
+    public void onChannelSelfJoin(final ChannelSelfJoinEvent event) {
141
+        checkParser(event.getParser());
142
+        groupChatManager.addChannel(event.getChannel());
168 143
     }
169 144
 
170
-    @Override
171
-    public void onPrivateMessage(final Parser parser, final Date date, final String message,
172
-            final String host) {
173
-        checkParser(parser);
145
+    @Handler
146
+    public void onPrivateMessage(final PrivateMessageEvent event) {
147
+        checkParser(event.getParser());
174 148
 
175
-        if (!owner.hasQuery(host)) {
176
-            owner.getQuery(host).onPrivateMessage(parser, date, message, host);
149
+        if (!owner.hasQuery(event.getHost())) {
150
+            owner.getQuery(event.getHost()).onPrivateMessage(event);
177 151
         }
178 152
     }
179 153
 
180
-    @Override
181
-    public void onPrivateAction(final Parser parser, final Date date, final String message,
182
-            final String host) {
183
-        checkParser(parser);
154
+    @Handler
155
+    public void onPrivateAction(final PrivateActionEvent event) {
156
+        checkParser(event.getParser());
184 157
 
185
-        if (!owner.hasQuery(host)) {
186
-            owner.getQuery(host).onPrivateAction(parser, date, message, host);
158
+        if (!owner.hasQuery(event.getHost())) {
159
+            owner.getQuery(event.getHost()).onPrivateAction(event);
187 160
         }
188 161
     }
189 162
 
190 163
     @SuppressWarnings("ThrowableResultOfMethodCallIgnored")
191
-    @Override
192
-    public void onErrorInfo(final Parser parser, final Date date, final ParserError errorInfo) {
164
+    @Handler
165
+    public void onErrorInfo(final ErrorInfoEvent event) {
193 166
 
194 167
         final StringBuilder errorString = new StringBuilder();
195 168
         errorString.append("Parser exception.\n\n");
196 169
 
197 170
         errorString.append("\tLast line:\t");
198
-        errorString.append(errorInfo.getLastLine()).append('\n');
171
+        errorString.append(event.getErrorInfo().getLastLine()).append('\n');
199 172
 
200 173
         errorString.append("\tServer:\t");
201 174
         errorString.append(owner.getAddress()).append('\n');
202 175
 
203 176
         errorString.append("\tAdditional Information:\n");
204
-        for (final String line : parser.getServerInformationLines()) {
177
+        for (final String line : event.getParser().getServerInformationLines()) {
205 178
             errorString.append("\t\t").append(line).append('\n');
206 179
         }
207 180
 
208
-        final Exception ex = errorInfo.isException() ? errorInfo.getException()
181
+        final Exception ex = event.getErrorInfo().isException() ? event.getErrorInfo().getException()
209 182
                 : new Exception(errorString.toString()); // NOPMD
210 183
 
211 184
         final ErrorLevel errorLevel = ErrorLevel.UNKNOWN;
212
-        if (errorInfo.isUserError()) {
213
-            eventBus.publishAsync(new UserErrorEvent(errorLevel, ex, errorInfo.getData(), ""));
185
+        if (event.getErrorInfo().isUserError()) {
186
+            eventBus.publishAsync(new UserErrorEvent(errorLevel, ex, event.getErrorInfo().getData(), ""));
214 187
         } else {
215
-            eventBus.publishAsync(new AppErrorEvent(errorLevel, ex, errorInfo.getData(), ""));
188
+            eventBus.publishAsync(new AppErrorEvent(errorLevel, ex, event.getErrorInfo().getData(), ""));
216 189
         }
217 190
     }
218 191
 
219
-    @Override
220
-    public void onPrivateCTCP(final Parser parser, final Date date, final String type,
221
-            final String message, final String host) {
222
-        checkParser(parser);
223
-
224
-        final ServerCtcpEvent event = new ServerCtcpEvent(owner, owner.getUser(host),
225
-                type, message);
226
-        eventBus.publish(event);
227
-        if (!event.isHandled()) {
228
-            owner.sendCTCPReply(owner.getUser(host).getNickname(), type, message);
192
+    @Handler
193
+    public void onPrivateCTCP(final PrivateCTCPEvent event) {
194
+        checkParser(event.getParser());
195
+
196
+        final ServerCtcpEvent coreEvent = new ServerCtcpEvent(owner, owner.getUser(event.getHost()),
197
+                event.getType(), event.getMessage());
198
+        eventBus.publish(coreEvent);
199
+        if (!coreEvent.isHandled()) {
200
+            owner.sendCTCPReply(owner.getUser(event.getHost()).getNickname(), event.getType(),
201
+                    event.getMessage());
229 202
         }
230 203
     }
231 204
 
232
-    @Override
233
-    public void onPrivateCTCPReply(final Parser parser, final Date date, final String type,
234
-            final String message, final String host) {
235
-        checkParser(parser);
236
-        eventBus.publish(new ServerCtcpReplyEvent(owner, owner.getUser(host), type, message));
205
+    @Handler
206
+    public void onPrivateCTCPReply(final PrivateCTCPReplyEvent event) {
207
+        checkParser(event.getParser());
208
+        eventBus.publish(new ServerCtcpReplyEvent(owner, owner.getUser(event.getHost()),
209
+                event.getType(), event.getMessage()));
237 210
     }
238 211
 
239
-    @Override
240
-    public void onSocketClosed(final Parser parser, final Date date) {
241
-        if (owner.getParser().orElse(null) == parser) {
212
+    @Handler
213
+    public void onSocketClosed(final SocketCloseEvent event) {
214
+        if (owner.getParser().orElse(null) == event.getParser()) {
242 215
             owner.onSocketClosed();
243 216
         }
244 217
     }
245 218
 
246
-    @Override
247
-    public void onPrivateNotice(final Parser parser, final Date date,
248
-            final String message, final String host) {
249
-        checkParser(parser);
250
-        eventBus.publishAsync(new ServerNoticeEvent(owner, owner.getLocalUser().get(), message));
219
+    @Handler
220
+    public void onPrivateNotice(final PrivateNoticeEvent event) {
221
+        checkParser(event.getParser());
222
+        eventBus.publishAsync(new ServerNoticeEvent(owner, owner.getLocalUser().get(),
223
+                event.getMessage()));
251 224
     }
252 225
 
253
-    @Override
254
-    public void onServerNotice(final Parser parser, final Date date,
255
-            final String message, final String host) {
256
-        checkParser(parser);
257
-        eventBus.publishAsync(new ServerServerNoticeEvent(owner, owner.getLocalUser().get(),
258
-                message));
226
+    @Handler
227
+    public void onServerNotice(final com.dmdirc.parser.events.ServerNoticeEvent event) {
228
+        checkParser(event.getParser());
229
+        eventBus.publishAsync(
230
+                new ServerServerNoticeEvent(owner, owner.getLocalUser().get(), event.getMessage()));
259 231
     }
260 232
 
261
-    @Override
262
-    public void onMOTDStart(final Parser parser, final Date date, final String data) {
263
-        checkParser(parser);
264
-        eventBus.publishAsync(new ServerMotdStartEvent(owner, data));
233
+    @Handler
234
+    public void onMOTDStart(final MOTDStartEvent event) {
235
+        checkParser(event.getParser());
236
+        eventBus.publishAsync(new ServerMotdStartEvent(owner, event.getData()));
265 237
     }
266 238
 
267
-    @Override
268
-    public void onMOTDLine(final Parser parser, final Date date, final String data) {
269
-        checkParser(parser);
270
-        eventBus.publishAsync(new ServerMotdLineEvent(owner, data));
239
+    @Handler
240
+    public void onMOTDLine(final MOTDLineEvent event) {
241
+        checkParser(event.getParser());
242
+        eventBus.publishAsync(new ServerMotdLineEvent(owner, event.getData()));
271 243
     }
272 244
 
273
-    @Override
274
-    public void onMOTDEnd(final Parser parser, final Date date,
275
-            final boolean noMOTD, final String data) {
276
-        checkParser(parser);
277
-        eventBus.publishAsync(new ServerMotdEndEvent(owner, data));
245
+    @Handler
246
+    public void onMOTDEnd(final MOTDEndEvent event) {
247
+        checkParser(event.getParser());
248
+        eventBus.publishAsync(new ServerMotdEndEvent(owner, event.getData()));
278 249
     }
279 250
 
280
-    @Override
281
-    public void onNumeric(final Parser parser, final Date date, final int numeric,
282
-            final String[] token) {
283
-        checkParser(parser);
251
+    @Handler
252
+    public void onNumeric(final NumericEvent event) {
253
+        checkParser(event.getParser());
284 254
 
285
-        final String sansIrcd = "numeric_" + Strings.padStart(String.valueOf(numeric), 3, '0');
255
+        final String sansIrcd = "numeric_" + Strings
256
+                .padStart(String.valueOf(event.getNumeric()), 3, '0');
286 257
         String target = "";
287 258
 
288 259
         if (owner.getConfigManager().hasOptionString("formatter", sansIrcd)) {
@@ -291,23 +262,24 @@ public class ServerEventHandler extends EventHandler implements
291 262
             target = "numeric_unknown";
292 263
         }
293 264
 
294
-        final ServerNumericEvent event = new ServerNumericEvent(owner, numeric, token);
295
-        final String format = EventUtils.postDisplayable(eventBus, event, target);
296
-        owner.handleNotification(format, (Object[]) token);
265
+        final ServerNumericEvent coreEvent = new ServerNumericEvent(owner, event.getNumeric(),
266
+                event.getToken());
267
+        final String format = EventUtils.postDisplayable(eventBus, coreEvent, target);
268
+        owner.handleNotification(format, (Object[]) event.getToken());
297 269
     }
298 270
 
299
-    @Override
300
-    public void onPingFailed(final Parser parser, final Date date) {
301
-        checkParser(parser);
271
+    @Handler
272
+    public void onPingFailed(final PingFailureEvent event) {
273
+        checkParser(event.getParser());
302 274
 
303 275
         eventBus.publishAsync(new StatusBarMessageEvent(new StatusMessage(
304 276
                 "No ping reply from " + owner.getName() + " for over " +
305
-                        (int) Math.floor(parser.getPingTime() / 1000.0) + " seconds.",
277
+                        (int) Math.floor(event.getParser().getPingTime() / 1000.0) + " seconds.",
306 278
                 owner.getConfigManager())));
307 279
 
308
-        eventBus.publishAsync(new ServerNoPingEvent(owner, parser.getPingTime()));
280
+        eventBus.publishAsync(new ServerNoPingEvent(owner, event.getParser().getPingTime()));
309 281
 
310
-        if (parser.getPingTime()
282
+        if (event.getParser().getPingTime()
311 283
                 >= owner.getConfigManager().getOptionInt("server", "pingtimeout")) {
312 284
             LOG.warn("Server appears to be stoned, reconnecting");
313 285
             eventBus.publishAsync(new ServerStonedEvent(owner));
@@ -315,47 +287,47 @@ public class ServerEventHandler extends EventHandler implements
315 287
         }
316 288
     }
317 289
 
318
-    @Override
319
-    public void onPingSent(final Parser parser, final Date date) {
320
-        checkParser(parser);
290
+    @Handler
291
+    public void onPingSent(final PingSentEvent event) {
292
+        checkParser(event.getParser());
321 293
         eventBus.publishAsync(new ServerPingSentEvent(owner));
322 294
     }
323 295
 
324
-    @Override
325
-    public void onPingSuccess(final Parser parser, final Date date) {
326
-        checkParser(parser);
296
+    @Handler
297
+    public void onPingSuccess(final PingSuccessEvent event) {
298
+        checkParser(event.getParser());
327 299
         eventBus.publishAsync(new ServerGotPingEvent(owner,
328 300
                 owner.getParser().get().getServerLatency()));
329 301
     }
330 302
 
331
-    @Override
332
-    public void onAwayState(final Parser parser, final Date date, final AwayState oldState,
333
-            final AwayState currentState, final String reason) {
334
-        checkParser(parser);
303
+    @Handler
304
+    public void onAwayState(final AwayStateEvent event) {
305
+        checkParser(event.getParser());
335 306
 
336
-        owner.updateAwayState(currentState == AwayState.AWAY ? Optional.of(reason) : Optional.empty());
307
+        owner.updateAwayState(event.getNewState() == AwayState.AWAY ?
308
+                Optional.of(event.getReason()) : Optional.empty());
337 309
 
338
-        if (currentState == AwayState.AWAY) {
339
-            eventBus.publishAsync(new ServerAwayEvent(owner, reason));
340
-        } else if (oldState != AwayState.UNKNOWN) {
310
+        if (event.getNewState() == AwayState.AWAY) {
311
+            eventBus.publishAsync(new ServerAwayEvent(owner, event.getReason()));
312
+        } else if (event.getOldState() != AwayState.UNKNOWN) {
341 313
             eventBus.publishAsync(new ServerBackEvent(owner));
342 314
         }
343 315
     }
344 316
 
345
-    @Override
346
-    public void onConnectError(final Parser parser, final Date date, final ParserError errorInfo) {
347
-        checkParser(parser);
348
-        owner.onConnectError(errorInfo);
317
+    @Handler
318
+    public void onConnectError(final ConnectErrorEvent event) {
319
+        checkParser(event.getParser());
320
+        owner.onConnectError(event.getErrorInfo());
349 321
     }
350 322
 
351
-    @Override
352
-    public void onNickInUse(final Parser parser, final Date date, final String nickname) {
353
-        checkParser(parser);
323
+    @Handler
324
+    public void onNickInUse(final NickInUseEvent event) {
325
+        checkParser(event.getParser());
354 326
 
355
-        final String lastNick = parser.getLocalClient().getNickname();
327
+        final String lastNick = event.getParser().getLocalClient().getNickname();
356 328
 
357 329
         // If our last nick is still valid, ignore the in use message
358
-        if (!parser.getStringConverter().equalsIgnoreCase(lastNick, nickname)) {
330
+        if (!event.getParser().getStringConverter().equalsIgnoreCase(lastNick, event.getNickname())) {
359 331
             return;
360 332
         }
361 333
 
@@ -367,7 +339,7 @@ public class ServerEventHandler extends EventHandler implements
367 339
         // Loop so we can check case sensitivity
368 340
         for (String alt : alts) {
369 341
             offset++;
370
-            if (parser.getStringConverter().equalsIgnoreCase(alt, lastNick)) {
342
+            if (event.getParser().getStringConverter().equalsIgnoreCase(alt, lastNick)) {
371 343
                 break;
372 344
             }
373 345
         }
@@ -376,160 +348,154 @@ public class ServerEventHandler extends EventHandler implements
376 348
             newNick = alts.get(offset);
377 349
         }
378 350
 
379
-        parser.getLocalClient().setNickname(newNick);
351
+        event.getParser().getLocalClient().setNickname(newNick);
380 352
     }
381 353
 
382
-    @Override
383
-    public void onServerReady(final Parser parser, final Date date) {
384
-        checkParser(parser);
354
+    @Handler
355
+    public void onServerReady(final ServerReadyEvent event) {
356
+        checkParser(event.getParser());
385 357
         owner.onPost005();
386 358
     }
387 359
 
388
-    @Override
389
-    public void onNoticeAuth(final Parser parser, final Date date, final String data) {
390
-        checkParser(parser);
360
+    @Handler
361
+    public void onNoticeAuth(final AuthNoticeEvent event) {
362
+        checkParser(event.getParser());
391 363
 
392
-        final ServerAuthNoticeEvent event = new ServerAuthNoticeEvent(owner, data);
393
-        final String format = EventUtils.postDisplayable(eventBus, event, "authNotice");
394
-        owner.doNotification(format, data);
364
+        final ServerAuthNoticeEvent coreEvent = new ServerAuthNoticeEvent(owner, event.getMessage());
365
+        final String format = EventUtils.postDisplayable(eventBus, coreEvent, "authNotice");
366
+        owner.doNotification(format, event.getDate());
395 367
     }
396 368
 
397
-    @Override
398
-    public void onUnknownNotice(final Parser parser, final Date date, final String message,
399
-            final String target, final String host) {
400
-        checkParser(parser);
369
+    @Handler
370
+    public void onUnknownNotice(final UnknownNoticeEvent event) {
371
+        checkParser(event.getParser());
401 372
 
402 373
         final ServerUnknownNoticeEvent
403
-                event = new ServerUnknownNoticeEvent(owner, host, target, message);
404
-        final String format = EventUtils.postDisplayable(eventBus, event, "unknownNotice");
405
-        owner.doNotification(format, host, target, message);
374
+                coreEvent = new ServerUnknownNoticeEvent(owner, event.getHost(), event.getTarget(),
375
+                event.getMessage());
376
+        final String format = EventUtils.postDisplayable(eventBus, coreEvent, "unknownNotice");
377
+        owner.doNotification(format, event.getHost(), event.getTarget(), event.getMessage());
406 378
     }
407 379
 
408
-    @Override
409
-    public void onUnknownMessage(final Parser parser, final Date date, final String message,
410
-            final String target, final String host) {
411
-        checkParser(parser);
380
+    @Handler
381
+    public void onUnknownMessage(final UnknownMessageEvent event) {
382
+        checkParser(event.getParser());
412 383
 
413
-        if (parser.getLocalClient().equals(parser.getClient(host))) {
384
+        if (event.getParser().getLocalClient().equals(event.getParser().getClient(event.getHost()))) {
414 385
             // Local client
415
-            eventBus.publishAsync(new QuerySelfMessageEvent(owner.getQuery(target),
416
-                    owner.getLocalUser().get(), message));
386
+            eventBus.publishAsync(
387
+                    new QuerySelfMessageEvent(owner.getQuery(event.getTarget()), owner.getLocalUser().get(),
388
+                            event.getMessage()));
417 389
         } else {
418
-            final ServerUnknownMessageEvent event
419
-                    = new ServerUnknownMessageEvent(owner, host, target, message);
420
-            final String format = EventUtils.postDisplayable(eventBus, event, "unknownMessage");
421
-            owner.doNotification(format, host, target, message);
390
+            final ServerUnknownMessageEvent coreEvent
391
+                    = new ServerUnknownMessageEvent(owner, event.getHost(), event.getTarget(), event.getMessage());
392
+            final String format = EventUtils.postDisplayable(eventBus, coreEvent, "unknownMessage");
393
+            owner.doNotification(format, event.getHost(), event.getTarget(), event.getMessage());
422 394
         }
423 395
     }
424 396
 
425
-    @Override
426
-    public void onUnknownAction(final Parser parser, final Date date, final String message,
427
-            final String target, final String host) {
428
-        checkParser(parser);
397
+    @Handler
398
+    public void onUnknownAction(final UnknownActionEvent event) {
399
+        checkParser(event.getParser());
429 400
 
430
-        if (parser.getLocalClient().equals(parser.getClient(host))) {
401
+        if (event.getParser().getLocalClient().equals(event.getParser().getClient(event.getHost()))) {
431 402
             // Local client
432
-            eventBus.publishAsync(new QuerySelfActionEvent(owner.getQuery(target),
433
-                    owner.getLocalUser().get(), message));
403
+            eventBus.publishAsync(
404
+                    new QuerySelfActionEvent(owner.getQuery(event.getTarget()), owner.getLocalUser().get(),
405
+                            event.getMessage()));
434 406
         } else {
435
-            final ServerUnknownActionEvent event
436
-                    = new ServerUnknownActionEvent(owner, host, target, message);
437
-            final String format = EventUtils.postDisplayable(eventBus, event, "unknownAction");
438
-            owner.doNotification(format, host, target, message);
407
+            final ServerUnknownActionEvent coreEvent
408
+                    = new ServerUnknownActionEvent(owner, event.getHost(), event.getTarget(), event.getMessage());
409
+            final String format = EventUtils.postDisplayable(eventBus, coreEvent, "unknownAction");
410
+            owner.doNotification(format, event.getHost(), event.getTarget(), event.getMessage());
439 411
         }
440 412
     }
441 413
 
442
-    @Override
443
-    public void onUserModeChanged(final Parser parser, final Date date,
444
-            final ClientInfo client, final String host, final String modes) {
445
-        checkParser(parser);
414
+    @Handler
415
+    public void onUserModeChanged(final UserModeChangeEvent event) {
416
+        checkParser(event.getParser());
446 417
 
447
-        final ServerUserModesEvent event = new ServerUserModesEvent(owner,
448
-                owner.getUser(client.getHostname()), modes);
449
-        final String format = EventUtils.postDisplayable(eventBus, event, "userModeChanged");
450
-        owner.doNotification(format, owner.getUser(client.getHostname()), modes);
418
+        final ServerUserModesEvent coreEvent = new ServerUserModesEvent(owner,
419
+                owner.getUser(event.getClient().getHostname()), event.getModes());
420
+        final String format = EventUtils.postDisplayable(eventBus, coreEvent, "userModeChanged");
421
+        owner.doNotification(format, owner.getUser(event.getClient().getHostname()), event.getModes());
451 422
     }
452 423
 
453
-    @Override
454
-    public void onUserModeDiscovered(final Parser parser, final Date date,
455
-            final ClientInfo client, final String modes) {
456
-        checkParser(parser);
424
+    @Handler
425
+    public void onUserModeDiscovered(final UserModeDiscoveryEvent event) {
426
+        checkParser(event.getParser());
457 427
 
458
-        final ServerUserModesEvent event = new ServerUserModesEvent(owner,
459
-                owner.getUser(client.getHostname()), modes);
460
-        final String format = EventUtils.postDisplayable(eventBus, event,
461
-                modes.isEmpty() || "+".equals(modes) ? "userNoModes" : "userModeDiscovered");
462
-        owner.doNotification(format, owner.getUser(client.getHostname()), modes);
428
+        final ServerUserModesEvent coreEvent = new ServerUserModesEvent(owner,
429
+                owner.getUser(event.getClient().getHostname()), event.getModes());
430
+        final String format = EventUtils.postDisplayable(eventBus, coreEvent,
431
+                event.getModes().isEmpty() || "+".equals(event.getModes()) ? "userNoModes" : "userModeDiscovered");
432
+        owner.doNotification(format, owner.getUser(event.getClient().getHostname()), event.getModes());
463 433
     }
464 434
 
465
-    @Override
466
-    public void onInvite(final Parser parser, final Date date, final String userHost,
467
-            final String channel) {
468
-        checkParser(parser);
435
+    @Handler
436
+    public void onInvite(final InviteEvent event) {
437
+        checkParser(event.getParser());
469 438
 
470
-        final Invite invite = new Invite(owner.getInviteManager(), channel, owner.getUser(userHost));
439
+        final Invite invite = new Invite(owner.getInviteManager(), event.getChannel(),
440
+                owner.getUser(event.getUserHost()));
471 441
         owner.getInviteManager().addInvite(invite);
472
-        final ServerInviteReceivedEvent event = new ServerInviteReceivedEvent(owner,
473
-                owner.getUser(userHost), channel, invite);
474
-        final String format = EventUtils.postDisplayable(eventBus, event, "inviteReceived");
475
-        owner.doNotification(format, owner.getUser(userHost), channel);
442
+        final ServerInviteReceivedEvent coreEvent = new ServerInviteReceivedEvent(owner,
443
+                owner.getUser(event.getUserHost()), event.getChannel(), invite);
444
+        final String format = EventUtils.postDisplayable(eventBus, coreEvent, "inviteReceived");
445
+        owner.doNotification(format, owner.getUser(event.getUserHost()), event.getChannel());
476 446
     }
477 447
 
478
-    @Override
479
-    public void onWallop(final Parser parser, final Date date, final String message,
480
-            final String host) {
481
-        checkParser(parser);
448
+    @Handler
449
+    public void onWallop(final WallopEvent event) {
450
+        checkParser(event.getParser());
482 451
 
483
-        final ServerWallopsEvent event = new ServerWallopsEvent(owner,
484
-                owner.getUser(host), message);
485
-        final String format = EventUtils.postDisplayable(eventBus, event, "wallop");
486
-        owner.doNotification(format, owner.getUser(host), message);
452
+        final ServerWallopsEvent coreEvent = new ServerWallopsEvent(owner,
453
+                owner.getUser(event.getHost()), event.getMessage());
454
+        final String format = EventUtils.postDisplayable(eventBus, coreEvent, "wallop");
455
+        owner.doNotification(format, owner.getUser(event.getHost()), event.getMessage());
487 456
 
488 457
     }
489 458
 
490
-    @Override
491
-    public void onWalluser(final Parser parser, final Date date, final String message,
492
-            final String host) {
493
-        checkParser(parser);
459
+    @Handler
460
+    public void onWalluser(final WalluserEvent event) {
461
+        checkParser(event.getParser());
494 462
 
495
-        final ServerWallusersEvent event = new ServerWallusersEvent(owner,
496
-                owner.getLocalUser().get(), message);
497
-        final String format = EventUtils.postDisplayable(eventBus, event, "walluser");
498
-        owner.doNotification(format, owner.getUser(host), message);
463
+        final ServerWallusersEvent coreEvent = new ServerWallusersEvent(owner,
464
+                owner.getLocalUser().get(), event.getMessage());
465
+        final String format = EventUtils.postDisplayable(eventBus, coreEvent, "walluser");
466
+        owner.doNotification(format, owner.getUser(event.getHost()), event.getMessage());
499 467
     }
500 468
 
501
-    @Override
502
-    public void onWallDesync(final Parser parser, final Date date, final String message,
503
-            final String host) {
504
-        checkParser(parser);
469
+    @Handler
470
+    public void onWallDesync(final WallDesyncEvent event) {
471
+        checkParser(event.getParser());
505 472
 
506
-        final ServerWalldesyncEvent event = new ServerWalldesyncEvent(owner,
507
-                owner.getLocalUser().get(), message);
508
-        final String format = EventUtils.postDisplayable(eventBus, event, "walldesync");
509
-        owner.doNotification(format, owner.getUser(host), message);
473
+        final ServerWalldesyncEvent coreEvent = new ServerWalldesyncEvent(owner,
474
+                owner.getLocalUser().get(), event.getMessage());
475
+        final String format = EventUtils.postDisplayable(eventBus, coreEvent, "walldesync");
476
+        owner.doNotification(format, owner.getUser(event.getHost()), event.getMessage());
510 477
     }
511 478
 
512
-    @Override
513
-    public void onNickChanged(final Parser parser, final Date date, final ClientInfo client,
514
-            final String oldNick) {
515
-        checkParser(parser);
516
-
517
-        if (client.equals(owner.getParser().get().getLocalClient())) {
518
-            final ServerNickChangeEvent event = new ServerNickChangeEvent(owner, oldNick,
519
-                    client.getNickname());
520
-            final String format = EventUtils.postDisplayable(eventBus, event, "selfNickChange");
521
-            owner.doNotification(format, oldNick, client.getNickname());
479
+    @Handler
480
+    public void onNickChanged(final NickChangeEvent event) {
481
+        checkParser(event.getParser());
482
+
483
+        if (event.getClient().equals(owner.getParser().get().getLocalClient())) {
484
+            final ServerNickChangeEvent coreEvent = new ServerNickChangeEvent(owner,
485
+                    event.getOldNick(), event.getClient().getNickname());
486
+            final String format = EventUtils.postDisplayable(eventBus, coreEvent, "selfNickChange");
487
+            owner.doNotification(format, event.getOldNick(), event.getClient().getNickname());
522 488
             owner.updateTitle();
523 489
         }
524 490
     }
525 491
 
526
-    @Override
527
-    public void onServerError(final Parser parser, final Date date, final String message) {
528
-        checkParser(parser);
492
+    @Handler
493
+    public void onServerError(final com.dmdirc.parser.events.ServerErrorEvent event) {
494
+        checkParser(event.getParser());
529 495
 
530
-        final ServerErrorEvent event = new ServerErrorEvent(owner, message);
531
-        final String format = EventUtils.postDisplayable(eventBus, event, "serverError");
532
-        owner.doNotification(format, message);
496
+        final ServerErrorEvent coreEvent = new ServerErrorEvent(owner, event.getMessage());
497
+        final String format = EventUtils.postDisplayable(eventBus, coreEvent, "serverError");
498
+        owner.doNotification(format, event.getMessage());
533 499
     }
534 500
 
535 501
     @Override

+ 15
- 18
src/com/dmdirc/lists/GroupListManager.java View File

@@ -24,22 +24,22 @@ package com.dmdirc.lists;
24 24
 
25 25
 import com.dmdirc.interfaces.Connection;
26 26
 import com.dmdirc.parser.common.ChannelJoinRequest;
27
+import com.dmdirc.parser.events.GroupListEndEvent;
28
+import com.dmdirc.parser.events.GroupListEntryEvent;
29
+import com.dmdirc.parser.events.GroupListStartEvent;
27 30
 import com.dmdirc.parser.interfaces.Parser;
28
-import com.dmdirc.parser.interfaces.callbacks.GroupListEndListener;
29
-import com.dmdirc.parser.interfaces.callbacks.GroupListEntryListener;
30
-import com.dmdirc.parser.interfaces.callbacks.GroupListStartListener;
31 31
 import com.dmdirc.util.collections.ListenerList;
32 32
 import com.dmdirc.util.collections.ObservableList;
33 33
 import com.dmdirc.util.collections.ObservableListDecorator;
34 34
 
35
-import java.util.Date;
36 35
 import java.util.LinkedList;
37 36
 
37
+import net.engio.mbassy.listener.Handler;
38
+
38 39
 /**
39 40
  * Manages a group list request.
40 41
  */
41
-public class GroupListManager implements GroupListStartListener,
42
-        GroupListEntryListener, GroupListEndListener {
42
+public class GroupListManager {
43 43
 
44 44
     /** List of registered listeners. */
45 45
     private final ListenerList listenerList = new ListenerList();
@@ -68,27 +68,24 @@ public class GroupListManager implements GroupListStartListener,
68 68
         groups.clear();
69 69
 
70 70
         connection.getParser().ifPresent(p -> {
71
-            p.getCallbackManager().addCallback(GroupListStartListener.class, this);
72
-            p.getCallbackManager().addCallback(GroupListEntryListener.class, this);
73
-            p.getCallbackManager().addCallback(GroupListEndListener.class, this);
71
+            p.getCallbackManager().subscribe(this);
74 72
             p.requestGroupList(searchTerm);
75 73
         });
76 74
     }
77 75
 
78
-    @Override
79
-    public void onGroupListStart(final Parser parser, final Date date) {
76
+    @Handler
77
+    public void onGroupListStart(final GroupListStartEvent event) {
80 78
         listenerList.getCallable(GroupListObserver.class).onGroupListStarted();
81 79
     }
82 80
 
83
-    @Override
84
-    public void onGroupListEntry(final Parser parser, final Date date,
85
-            final String name, final int users, final String topic) {
86
-        groups.add(new GroupListEntry(name, users, topic));
81
+    @Handler
82
+    public void onGroupListEntry(final GroupListEntryEvent event) {
83
+        groups.add(new GroupListEntry(event.getName(), event.getUsers(), event.getTopic()));
87 84
     }
88 85
 
89
-    @Override
90
-    public void onGroupListEnd(final Parser parser, final Date date) {
91
-        parser.getCallbackManager().delAllCallback(this);
86
+    @Handler
87
+    public void onGroupListEnd(final GroupListEndEvent event) {
88
+        event.getParser().getCallbackManager().unsubscribe(this);
92 89
         listenerList.getCallable(GroupListObserver.class).onGroupListFinished();
93 90
     }
94 91
 

+ 0
- 260
test/com/dmdirc/ServerEventHandlerTest.java View File

@@ -1,260 +0,0 @@
1
-/*
2
- * Copyright (c) 2006-2015 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;
24
-
25
-import com.dmdirc.events.AppErrorEvent;
26
-import com.dmdirc.events.DMDircEvent;
27
-import com.dmdirc.events.ServerCtcpEvent;
28
-import com.dmdirc.events.UserErrorEvent;
29
-import com.dmdirc.interfaces.Connection;
30
-import com.dmdirc.interfaces.User;
31
-import com.dmdirc.parser.common.CallbackManager;
32
-import com.dmdirc.parser.common.ParserError;
33
-import com.dmdirc.parser.interfaces.ChannelInfo;
34
-import com.dmdirc.parser.interfaces.ClientInfo;
35
-import com.dmdirc.parser.interfaces.Parser;
36
-import com.dmdirc.parser.interfaces.callbacks.CallbackInterface;
37
-import com.dmdirc.parser.interfaces.callbacks.ChannelSelfJoinListener;
38
-import com.dmdirc.parser.interfaces.callbacks.ErrorInfoListener;
39
-import com.dmdirc.parser.interfaces.callbacks.PrivateActionListener;
40
-import com.dmdirc.parser.interfaces.callbacks.PrivateCtcpListener;
41
-import com.dmdirc.parser.interfaces.callbacks.PrivateMessageListener;
42
-
43
-import com.google.common.collect.Lists;
44
-
45
-import java.util.Date;
46
-import java.util.Optional;
47
-
48
-import org.junit.Before;
49
-import org.junit.Test;
50
-import org.junit.runner.RunWith;
51
-import org.mockito.ArgumentCaptor;
52
-import org.mockito.Mock;
53
-import org.mockito.runners.MockitoJUnitRunner;
54
-
55
-import static org.junit.Assert.assertEquals;
56
-import static org.junit.Assert.assertNotNull;
57
-import static org.junit.Assert.assertTrue;
58
-import static org.mockito.Matchers.any;
59
-import static org.mockito.Matchers.anyString;
60
-import static org.mockito.Matchers.eq;
61
-import static org.mockito.Mockito.mock;
62
-import static org.mockito.Mockito.verify;
63
-import static org.mockito.Mockito.when;
64
-
65
-@RunWith(MockitoJUnitRunner.class)
66
-public class ServerEventHandlerTest {
67
-
68
-    @Mock private Server server;
69
-    @Mock private GroupChatManagerImpl groupChatManager;
70
-    @Mock private Parser parser;
71
-    @Mock private CallbackManager callbackManager;
72
-    @Mock private DMDircMBassador eventBus;
73
-    @Mock private ChannelInfo channelInfo;
74
-    @Mock private User user;
75
-    @Mock private UserFactory userFactory;
76
-    @Mock private Query query;
77
-    @Mock private Date date;
78
-    @Mock private ClientInfo clientInfo;
79
-
80
-    @Before
81
-    public void setUp() {
82
-        when(server.getParser()).thenReturn(Optional.of(parser));
83
-        when(server.getState()).thenReturn(ServerState.CONNECTED);
84
-        when(parser.getCallbackManager()).thenReturn(callbackManager);
85
-        when(server.getConnection()).thenReturn(Optional.ofNullable(server));
86
-        when(userFactory.getUser(any(Connection.class), eq(clientInfo))).thenReturn(user);
87
-        when(server.getUser(anyString())).thenReturn(user);
88
-        when(server.getLocalUser()).thenReturn(Optional.of(user));
89
-        final ServerEventHandler handler = new ServerEventHandler(server, groupChatManager,
90
-                eventBus);
91
-        handler.registerCallbacks();
92
-
93
-        when(user.getNickname()).thenReturn("ho");
94
-        when(user.getUsername()).thenReturn(Optional.of("st"));
95
-        when(user.getHostname()).thenReturn(Optional.of("name"));
96
-    }
97
-
98
-    @Test
99
-    public void testSelfJoinAddsChannel() {
100
-        final ChannelSelfJoinListener listener = getCallback(ChannelSelfJoinListener.class);
101
-        listener.onChannelSelfJoin(parser, date, channelInfo);
102
-        verify(groupChatManager).addChannel(channelInfo);
103
-    }
104
-
105
-    @Test
106
-    public void testOnPrivateMessageCreatesQuery() {
107
-        when(server.hasQuery("ho!st@name")).thenReturn(false);
108
-        when(server.getQuery("ho!st@name")).thenReturn(query);
109
-
110
-        final PrivateMessageListener listener = getCallback(PrivateMessageListener.class);
111
-        listener.onPrivateMessage(parser, date, "message", "ho!st@name");
112
-        verify(server).getQuery("ho!st@name");
113
-    }
114
-
115
-    @Test
116
-    public void testOnPrivateMessageRelaysMessage() {
117
-        when(server.hasQuery("ho!st@name")).thenReturn(false);
118
-        when(server.getQuery("ho!st@name")).thenReturn(query);
119
-
120
-        final PrivateMessageListener listener = getCallback(PrivateMessageListener.class);
121
-        listener.onPrivateMessage(parser, date, "message", "ho!st@name");
122
-        verify(query).onPrivateMessage(parser, date, "message", "ho!st@name");
123
-    }
124
-
125
-    @Test
126
-    public void testOnPrivateActionCreatesQuery() {
127
-        when(server.hasQuery("ho!st@name")).thenReturn(false);
128
-        when(server.getQuery("ho!st@name")).thenReturn(query);
129
-
130
-        final PrivateActionListener listener = getCallback(PrivateActionListener.class);
131
-        listener.onPrivateAction(parser, date, "message", "ho!st@name");
132
-        verify(server).getQuery("ho!st@name");
133
-    }
134
-
135
-    @Test
136
-    public void testOnPrivateActionRelaysMessage() {
137
-        when(server.hasQuery("ho!st@name")).thenReturn(false);
138
-        when(server.getQuery("ho!st@name")).thenReturn(query);
139
-
140
-        final PrivateActionListener listener = getCallback(PrivateActionListener.class);
141
-        listener.onPrivateAction(parser, date, "message", "ho!st@name");
142
-        verify(query).onPrivateAction(parser, date, "message", "ho!st@name");
143
-    }
144
-
145
-    @Test
146
-    public void testOnErrorInfoEmitsUserErrorEvent() {
147
-        final ParserError error = mock(ParserError.class);
148
-        when(parser.getServerInformationLines()).thenReturn(Lists.newArrayList("iline1", "iline2"));
149
-        when(error.getLastLine()).thenReturn("lastline");
150
-        when(server.getAddress()).thenReturn("serveraddress");
151
-        when(error.getData()).thenReturn("DATA");
152
-        when(error.isUserError()).thenReturn(true);
153
-
154
-        final ErrorInfoListener listener = getCallback(ErrorInfoListener.class);
155
-        listener.onErrorInfo(parser, date, error);
156
-
157
-        final UserErrorEvent event = getAsyncEvent(UserErrorEvent.class);
158
-        assertEquals("DATA", event.getMessage());
159
-    }
160
-
161
-    @Test
162
-    public void testOnErrorInfoEmitsAppErrorEvent() {
163
-        final ParserError error = mock(ParserError.class);
164
-        when(parser.getServerInformationLines()).thenReturn(Lists.newArrayList("iline1", "iline2"));
165
-        when(error.getLastLine()).thenReturn("lastline");
166
-        when(server.getAddress()).thenReturn("serveraddress");
167
-        when(error.getData()).thenReturn("DATA");
168
-        when(error.isUserError()).thenReturn(false);
169
-
170
-        final ErrorInfoListener listener = getCallback(ErrorInfoListener.class);
171
-        listener.onErrorInfo(parser, date, error);
172
-
173
-        final AppErrorEvent event = getAsyncEvent(AppErrorEvent.class);
174
-        assertEquals("DATA", event.getMessage());
175
-    }
176
-
177
-    @Test
178
-    public void testOnErrorInfoIncludesConnectionDetails() {
179
-        final ParserError error = mock(ParserError.class);
180
-        when(parser.getServerInformationLines()).thenReturn(Lists.newArrayList("iline1", "iline2"));
181
-        when(error.getLastLine()).thenReturn("lastline");
182
-        when(server.getAddress()).thenReturn("serveraddress");
183
-        when(error.getData()).thenReturn("DATA");
184
-        when(error.isUserError()).thenReturn(false);
185
-
186
-        final ErrorInfoListener listener = getCallback(ErrorInfoListener.class);
187
-        listener.onErrorInfo(parser, date, error);
188
-
189
-        final AppErrorEvent event = getAsyncEvent(AppErrorEvent.class);
190
-        assertNotNull(event.getThrowable());
191
-        assertTrue(event.getThrowable().getMessage().contains("lastline"));
192
-        assertTrue(event.getThrowable().getMessage().contains("iline1"));
193
-        assertTrue(event.getThrowable().getMessage().contains("iline2"));
194
-        assertTrue(event.getThrowable().getMessage().contains("serveraddress"));
195
-    }
196
-
197
-    @Test
198
-    public void testOnErrorInfoIncludesException() {
199
-        final ParserError error = mock(ParserError.class);
200
-        final Exception exception = mock(Exception.class);
201
-        when(parser.getServerInformationLines()).thenReturn(Lists.newArrayList("iline1", "iline2"));
202
-        when(error.getLastLine()).thenReturn("lastline");
203
-        when(server.getAddress()).thenReturn("serveraddress");
204
-        when(error.getData()).thenReturn("DATA");
205
-        when(error.isException()).thenReturn(true);
206
-        when(error.getException()).thenReturn(exception);
207
-
208
-        final ErrorInfoListener listener = getCallback(ErrorInfoListener.class);
209
-        listener.onErrorInfo(parser, date, error);
210
-
211
-        final AppErrorEvent event = getAsyncEvent(AppErrorEvent.class);
212
-        assertNotNull(event.getThrowable());
213
-        assertEquals(exception, event.getThrowable());
214
-    }
215
-
216
-    @Test
217
-    public void testOnPrivateCTCPRaisesEvent() {
218
-        when(server.getUser("ho!st@name")).thenReturn(user);
219
-
220
-        final PrivateCtcpListener listener = getCallback(PrivateCtcpListener.class);
221
-        listener.onPrivateCTCP(parser, date, "type", "message", "ho!st@name");
222
-
223
-        final ServerCtcpEvent event = getEvent(ServerCtcpEvent.class);
224
-        assertEquals("type", event.getType());
225
-        assertEquals("message", event.getContent());
226
-        assertEquals(user, event.getUser());
227
-    }
228
-
229
-    @Test
230
-    public void testOnPrivateCTCPSendsReplyIfEventUnhandled() {
231
-        when(server.getUser("ho!st@name")).thenReturn(user);
232
-
233
-        final PrivateCtcpListener listener = getCallback(PrivateCtcpListener.class);
234
-        listener.onPrivateCTCP(parser, date, "type", "message", "ho!st@name");
235
-
236
-        verify(server).sendCTCPReply("ho", "type", "message");
237
-    }
238
-
239
-    private <T extends CallbackInterface> T getCallback(final Class<T> type) {
240
-        final ArgumentCaptor<T> captor = ArgumentCaptor.forClass(type);
241
-        verify(callbackManager).addCallback(eq(type), captor.capture());
242
-        assertNotNull(captor.getValue());
243
-        return captor.getValue();
244
-    }
245
-
246
-    private <T extends DMDircEvent> T getAsyncEvent(final Class<T> type) {
247
-        final ArgumentCaptor<T> captor = ArgumentCaptor.forClass(type);
248
-        verify(eventBus).publishAsync(captor.capture());
249
-        assertNotNull(captor.getValue());
250
-        return captor.getValue();
251
-    }
252
-
253
-    private <T extends DMDircEvent> T getEvent(final Class<T> type) {
254
-        final ArgumentCaptor<T> captor = ArgumentCaptor.forClass(type);
255
-        verify(eventBus).publish(captor.capture());
256
-        assertNotNull(captor.getValue());
257
-        return captor.getValue();
258
-    }
259
-
260
-}

Loading…
Cancel
Save