2 * jFCPlib - FcpListenerManager.java - Copyright © 2009–2016 David Roden
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 package net.pterodactylus.fcp;
20 import java.util.List;
21 import java.util.concurrent.CopyOnWriteArrayList;
24 * Manages FCP listeners and event firing.
26 * @author David ‘Bombe’ Roden <bombe@pterodactylus.net>
28 public class FcpListenerManager {
30 private final FcpConnection source;
31 private final List<FcpListener> listeners = new CopyOnWriteArrayList<FcpListener>();
34 * Creates a new listener manager.
36 * @param fcpConnection
37 * The source FCP connection
39 public FcpListenerManager(FcpConnection fcpConnection) {
40 this.source = fcpConnection;
43 public void addListener(FcpListener fcpListener) {
44 listeners.add(fcpListener);
47 public void removeListener(FcpListener fcpListener) {
48 listeners.remove(fcpListener);
51 private FcpConnection getSource() {
55 private List<FcpListener> getListeners() {
60 * Notifies listeners that a “NodeHello” message was received.
62 * @see FcpListener#receivedNodeHello(FcpConnection, NodeHello)
64 * The “NodeHello” message
66 public void fireReceivedNodeHello(NodeHello nodeHello) {
67 for (FcpListener fcpListener : getListeners()) {
68 fcpListener.receivedNodeHello(getSource(), nodeHello);
73 * Notifies listeners that a “CloseConnectionDuplicateClientName” message
76 * @see FcpListener#receivedCloseConnectionDuplicateClientName(FcpConnection,
77 * CloseConnectionDuplicateClientName)
78 * @param closeConnectionDuplicateClientName
79 * The “CloseConnectionDuplicateClientName” message
81 public void fireReceivedCloseConnectionDuplicateClientName(CloseConnectionDuplicateClientName closeConnectionDuplicateClientName) {
82 for (FcpListener fcpListener : getListeners()) {
83 fcpListener.receivedCloseConnectionDuplicateClientName(getSource(), closeConnectionDuplicateClientName);
88 * Notifies listeners that a “SSKKeypair” message was received.
90 * @see FcpListener#receivedSSKKeypair(FcpConnection, SSKKeypair)
92 * The “SSKKeypair” message
94 public void fireReceivedSSKKeypair(SSKKeypair sskKeypair) {
95 for (FcpListener fcpListener : getListeners()) {
96 fcpListener.receivedSSKKeypair(getSource(), sskKeypair);
101 * Notifies listeners that a “Peer” message was received.
103 * @see FcpListener#receivedPeer(FcpConnection, Peer)
107 public void fireReceivedPeer(Peer peer) {
108 for (FcpListener fcpListener : getListeners()) {
109 fcpListener.receivedPeer(getSource(), peer);
114 * Notifies all listeners that an “EndListPeers” message was received.
116 * @see FcpListener#receivedEndListPeers(FcpConnection, EndListPeers)
117 * @param endListPeers
118 * The “EndListPeers” message
120 public void fireReceivedEndListPeers(EndListPeers endListPeers) {
121 for (FcpListener fcpListener : getListeners()) {
122 fcpListener.receivedEndListPeers(getSource(), endListPeers);
127 * Notifies all listeners that a “PeerNote” message was received.
129 * @see FcpListener#receivedPeerNote(FcpConnection, PeerNote)
131 * The “PeerNote” message
133 public void fireReceivedPeerNote(PeerNote peerNote) {
134 for (FcpListener fcpListener : getListeners()) {
135 fcpListener.receivedPeerNote(getSource(), peerNote);
140 * Notifies all listeners that an “EndListPeerNotes” message was received.
142 * @see FcpListener#receivedEndListPeerNotes(FcpConnection,
144 * @param endListPeerNotes
145 * The “EndListPeerNotes” message
147 public void fireReceivedEndListPeerNotes(EndListPeerNotes endListPeerNotes) {
148 for (FcpListener fcpListener : getListeners()) {
149 fcpListener.receivedEndListPeerNotes(getSource(), endListPeerNotes);
154 * Notifies all listeners that a “PeerRemoved” message was received.
156 * @see FcpListener#receivedPeerRemoved(FcpConnection, PeerRemoved)
158 * The “PeerRemoved” message
160 public void fireReceivedPeerRemoved(PeerRemoved peerRemoved) {
161 for (FcpListener fcpListener : getListeners()) {
162 fcpListener.receivedPeerRemoved(getSource(), peerRemoved);
167 * Notifies all listeners that a “NodeData” message was received.
169 * @see FcpListener#receivedNodeData(FcpConnection, NodeData)
171 * The “NodeData” message
173 public void fireReceivedNodeData(NodeData nodeData) {
174 for (FcpListener fcpListener : getListeners()) {
175 fcpListener.receivedNodeData(getSource(), nodeData);
180 * Notifies all listeners that a “TestDDAReply” message was received.
182 * @see FcpListener#receivedTestDDAReply(FcpConnection, TestDDAReply)
183 * @param testDDAReply
184 * The “TestDDAReply” message
186 public void fireReceivedTestDDAReply(TestDDAReply testDDAReply) {
187 for (FcpListener fcpListener : getListeners()) {
188 fcpListener.receivedTestDDAReply(getSource(), testDDAReply);
193 * Notifies all listeners that a “TestDDAComplete” message was received.
195 * @see FcpListener#receivedTestDDAComplete(FcpConnection, TestDDAComplete)
196 * @param testDDAComplete
197 * The “TestDDAComplete” message
199 public void fireReceivedTestDDAComplete(TestDDAComplete testDDAComplete) {
200 for (FcpListener fcpListener : getListeners()) {
201 fcpListener.receivedTestDDAComplete(getSource(), testDDAComplete);
206 * Notifies all listeners that a “PersistentGet” message was received.
208 * @see FcpListener#receivedPersistentGet(FcpConnection, PersistentGet)
209 * @param persistentGet
210 * The “PersistentGet” message
212 public void fireReceivedPersistentGet(PersistentGet persistentGet) {
213 for (FcpListener fcpListener : getListeners()) {
214 fcpListener.receivedPersistentGet(getSource(), persistentGet);
219 * Notifies all listeners that a “PersistentPut” message was received.
221 * @see FcpListener#receivedPersistentPut(FcpConnection, PersistentPut)
222 * @param persistentPut
223 * The “PersistentPut” message
225 public void fireReceivedPersistentPut(PersistentPut persistentPut) {
226 for (FcpListener fcpListener : getListeners()) {
227 fcpListener.receivedPersistentPut(getSource(), persistentPut);
232 * Notifies all listeners that a “EndListPersistentRequests” message was
235 * @see FcpListener#receivedEndListPersistentRequests(FcpConnection,
236 * EndListPersistentRequests)
237 * @param endListPersistentRequests
238 * The “EndListPersistentRequests” message
240 public void fireReceivedEndListPersistentRequests(EndListPersistentRequests endListPersistentRequests) {
241 for (FcpListener fcpListener : getListeners()) {
242 fcpListener.receivedEndListPersistentRequests(getSource(), endListPersistentRequests);
247 * Notifies all listeners that a “URIGenerated” message was received.
249 * @see FcpListener#receivedURIGenerated(FcpConnection, URIGenerated)
250 * @param uriGenerated
251 * The “URIGenerated” message
253 public void fireReceivedURIGenerated(URIGenerated uriGenerated) {
254 for (FcpListener fcpListener : getListeners()) {
255 fcpListener.receivedURIGenerated(getSource(), uriGenerated);
260 * Notifies all listeners that a “DataFound” message was received.
262 * @see FcpListener#receivedDataFound(FcpConnection, DataFound)
264 * The “DataFound” message
266 public void fireReceivedDataFound(DataFound dataFound) {
267 for (FcpListener fcpListener : getListeners()) {
268 fcpListener.receivedDataFound(getSource(), dataFound);
273 * Notifies all listeners that an “AllData” message was received.
275 * @see FcpListener#receivedAllData(FcpConnection, AllData)
277 * The “AllData” message
279 public void fireReceivedAllData(AllData allData) {
280 for (FcpListener fcpListener : getListeners()) {
281 fcpListener.receivedAllData(getSource(), allData);
286 * Notifies all listeners that a “SimpleProgress” message was received.
288 * @see FcpListener#receivedSimpleProgress(FcpConnection, SimpleProgress)
289 * @param simpleProgress
290 * The “SimpleProgress” message
292 public void fireReceivedSimpleProgress(SimpleProgress simpleProgress) {
293 for (FcpListener fcpListener : getListeners()) {
294 fcpListener.receivedSimpleProgress(getSource(), simpleProgress);
299 * Notifies all listeners that a “StartedCompression” message was received.
301 * @see FcpListener#receivedStartedCompression(FcpConnection,
302 * StartedCompression)
303 * @param startedCompression
304 * The “StartedCompression” message
306 public void fireReceivedStartedCompression(StartedCompression startedCompression) {
307 for (FcpListener fcpListener : getListeners()) {
308 fcpListener.receivedStartedCompression(getSource(), startedCompression);
313 * Notifies all listeners that a “FinishedCompression” message was
316 * @see FcpListener#receivedFinishedCompression(FcpConnection,
317 * FinishedCompression)
318 * @param finishedCompression
319 * The “FinishedCompression” message
321 public void fireReceivedFinishedCompression(FinishedCompression finishedCompression) {
322 for (FcpListener fcpListener : getListeners()) {
323 fcpListener.receivedFinishedCompression(getSource(), finishedCompression);
328 * Notifies all listeners that an “UnknownPeerNoteType” message was
331 * @see FcpListener#receivedUnknownPeerNoteType(FcpConnection,
332 * UnknownPeerNoteType)
333 * @param unknownPeerNoteType
334 * The “UnknownPeerNoteType” message
336 public void fireReceivedUnknownPeerNoteType(UnknownPeerNoteType unknownPeerNoteType) {
337 for (FcpListener fcpListener : getListeners()) {
338 fcpListener.receivedUnknownPeerNoteType(getSource(), unknownPeerNoteType);
343 * Notifies all listeners that an “UnknownNodeIdentifier” message was
346 * @see FcpListener#receivedUnknownNodeIdentifier(FcpConnection,
347 * UnknownNodeIdentifier)
348 * @param unknownNodeIdentifier
349 * The “UnknownNodeIdentifier” message
351 public void fireReceivedUnknownNodeIdentifier(UnknownNodeIdentifier unknownNodeIdentifier) {
352 for (FcpListener fcpListener : getListeners()) {
353 fcpListener.receivedUnknownNodeIdentifier(getSource(), unknownNodeIdentifier);
358 * Notifies all listeners that a “ConfigData” message was received.
360 * @see FcpListener#receivedConfigData(FcpConnection, ConfigData)
362 * The “ConfigData” message
364 public void fireReceivedConfigData(ConfigData configData) {
365 for (FcpListener fcpListener : getListeners()) {
366 fcpListener.receivedConfigData(getSource(), configData);
371 * Notifies all listeners that a “GetFailed” message was received.
373 * @see FcpListener#receivedGetFailed(FcpConnection, GetFailed)
375 * The “GetFailed” message
377 public void fireReceivedGetFailed(GetFailed getFailed) {
378 for (FcpListener fcpListener : getListeners()) {
379 fcpListener.receivedGetFailed(getSource(), getFailed);
384 * Notifies all listeners that a “PutFailed” message was received.
386 * @see FcpListener#receivedPutFailed(FcpConnection, PutFailed)
388 * The “PutFailed” message
390 public void fireReceivedPutFailed(PutFailed putFailed) {
391 for (FcpListener fcpListener : getListeners()) {
392 fcpListener.receivedPutFailed(getSource(), putFailed);
397 * Notifies all listeners that an “IdentifierCollision” message was
400 * @see FcpListener#receivedIdentifierCollision(FcpConnection,
401 * IdentifierCollision)
402 * @param identifierCollision
403 * The “IdentifierCollision” message
405 public void fireReceivedIdentifierCollision(IdentifierCollision identifierCollision) {
406 for (FcpListener fcpListener : getListeners()) {
407 fcpListener.receivedIdentifierCollision(getSource(), identifierCollision);
412 * Notifies all listeners that an “PersistentPutDir” message was received.
414 * @see FcpListener#receivedPersistentPutDir(FcpConnection,
416 * @param persistentPutDir
417 * The “PersistentPutDir” message
419 public void fireReceivedPersistentPutDir(PersistentPutDir persistentPutDir) {
420 for (FcpListener fcpListener : getListeners()) {
421 fcpListener.receivedPersistentPutDir(getSource(), persistentPutDir);
426 * Notifies all listeners that a “PersistentRequestRemoved” message was
429 * @see FcpListener#receivedPersistentRequestRemoved(FcpConnection,
430 * PersistentRequestRemoved)
431 * @param persistentRequestRemoved
432 * The “PersistentRequestRemoved” message
434 public void fireReceivedPersistentRequestRemoved(PersistentRequestRemoved persistentRequestRemoved) {
435 for (FcpListener fcpListener : getListeners()) {
436 fcpListener.receivedPersistentRequestRemoved(getSource(), persistentRequestRemoved);
440 public void fireReceivedSubscribedUSK(SubscribedUSK subscribedUSK) {
441 for (FcpListener fcpListener : getListeners()) {
442 fcpListener.receivedSubscribedUSK(getSource(), subscribedUSK);
447 * Notifies all listeners that a “SubscribedUSKUpdate” message was
450 * @see FcpListener#receivedSubscribedUSKUpdate(FcpConnection,
451 * SubscribedUSKUpdate)
452 * @param subscribedUSKUpdate
453 * The “SubscribedUSKUpdate” message
455 public void fireReceivedSubscribedUSKUpdate(SubscribedUSKUpdate subscribedUSKUpdate) {
456 for (FcpListener fcpListener : getListeners()) {
457 fcpListener.receivedSubscribedUSKUpdate(getSource(), subscribedUSKUpdate);
462 * Notifies all listeners that a “PluginInfo” message was received.
464 * @see FcpListener#receivedPluginInfo(FcpConnection, PluginInfo)
466 * The “PluginInfo” message
468 public void fireReceivedPluginInfo(PluginInfo pluginInfo) {
469 for (FcpListener fcpListener : getListeners()) {
470 fcpListener.receivedPluginInfo(getSource(), pluginInfo);
474 public void fireReceivedPluginRemoved(PluginRemoved pluginRemoved) {
475 for (FcpListener fcpListener : getListeners()) {
476 fcpListener.receivedPluginRemoved(getSource(), pluginRemoved);
481 * Notifies all listeners that an “FCPPluginReply” message was received.
483 * @see FcpListener#receivedFCPPluginReply(FcpConnection, FCPPluginReply)
484 * @param fcpPluginReply
485 * The “FCPPluginReply” message
487 public void fireReceivedFCPPluginReply(FCPPluginReply fcpPluginReply) {
488 for (FcpListener fcpListener : getListeners()) {
489 fcpListener.receivedFCPPluginReply(getSource(), fcpPluginReply);
494 * Notifies all listeners that a “PersistentRequestModified” message was
497 * @see FcpListener#receivedPersistentRequestModified(FcpConnection,
498 * PersistentRequestModified)
499 * @param persistentRequestModified
500 * The “PersistentRequestModified” message
502 public void fireReceivedPersistentRequestModified(PersistentRequestModified persistentRequestModified) {
503 for (FcpListener fcpListener : getListeners()) {
504 fcpListener.receivedPersistentRequestModified(getSource(), persistentRequestModified);
509 * Notifies all listeners that a “PutSuccessful” message was received.
511 * @see FcpListener#receivedPutSuccessful(FcpConnection, PutSuccessful)
512 * @param putSuccessful
513 * The “PutSuccessful” message
515 public void fireReceivedPutSuccessful(PutSuccessful putSuccessful) {
516 for (FcpListener fcpListener : getListeners()) {
517 fcpListener.receivedPutSuccessful(getSource(), putSuccessful);
522 * Notifies all listeners that a “PutFetchable” message was received.
524 * @see FcpListener#receivedPutFetchable(FcpConnection, PutFetchable)
525 * @param putFetchable
526 * The “PutFetchable” message
528 public void fireReceivedPutFetchable(PutFetchable putFetchable) {
529 for (FcpListener fcpListener : getListeners()) {
530 fcpListener.receivedPutFetchable(getSource(), putFetchable);
535 * Notifies all listeners that a “ProtocolError” message was received.
537 * @see FcpListener#receivedProtocolError(FcpConnection, ProtocolError)
538 * @param protocolError
539 * The “ProtocolError” message
541 public void fireReceivedProtocolError(ProtocolError protocolError) {
542 for (FcpListener fcpListener : getListeners()) {
543 fcpListener.receivedProtocolError(getSource(), protocolError);
548 * Notifies all listeners that a “SentFeed” message was received.
550 * @see FcpListener#receivedSentFeed(FcpConnection, SentFeed)
552 * The “SentFeed” message.
554 public void fireSentFeed(SentFeed sentFeed) {
555 for (FcpListener fcpListener : getListeners()) {
556 fcpListener.receivedSentFeed(getSource(), sentFeed);
561 * Notifies all listeners that a “ReceivedBookmarkFeed” message was
564 * @see FcpListener#receivedBookmarkFeed(FcpConnection,
565 * ReceivedBookmarkFeed)
566 * @param receivedBookmarkFeed
567 * The “ReceivedBookmarkFeed” message
569 public void fireReceivedBookmarkFeed(ReceivedBookmarkFeed receivedBookmarkFeed) {
570 for (FcpListener fcpListener : getListeners()) {
571 fcpListener.receivedBookmarkFeed(getSource(), receivedBookmarkFeed);
576 * Notifies all registered listeners that a message has been received.
578 * @see FcpListener#receivedMessage(FcpConnection, FcpMessage)
580 * The message that was received
582 public void fireMessageReceived(FcpMessage fcpMessage) {
583 for (FcpListener fcpListener : getListeners()) {
584 fcpListener.receivedMessage(getSource(), fcpMessage);
589 * Notifies all listeners that the connection to the node was closed.
592 * The exception that caused the disconnect, or
593 * <code>null</code> if there was no exception
594 * @see FcpListener#connectionClosed(FcpConnection, Throwable)
596 public void fireConnectionClosed(Throwable throwable) {
597 for (FcpListener fcpListener : getListeners()) {
598 fcpListener.connectionClosed(getSource(), throwable);