@@ -11,102 +11,102 @@ import ThreadSafeSwift
11
11
import Observable
12
12
13
13
/**
14
- An implementation of `EventHandler` designed to Queue/Stack outbound events, and Dispatch them to all registered `listeners `
14
+ An implementation of `EventHandler` designed to Queue/Stack outbound events, and Dispatch them to all registered `receivers `
15
15
- Author: Simon J. Stuart
16
16
- Version: 1.0.0
17
17
- Note: While you can inherit from and even create instances of `EventDispatcher`, best practice would be to use `EventCentral.shared` as the central Event Dispatcher.
18
18
*/
19
19
open class EventDispatcher : EventHandler , EventDispatchable {
20
- struct ListenerContainer {
21
- weak var listener : ( any EventReceivable ) ?
20
+ struct ReceiverContainer {
21
+ weak var receiver : ( any EventReceivable ) ?
22
22
}
23
23
24
24
/**
25
- Stores all of the Listeners against the fully-qualified name of the corresponding `Eventable` Type
25
+ Stores all of the Receivers against the fully-qualified name of the corresponding `Eventable` Type
26
26
- Author: Simon J. Stuart
27
27
- Version: 1.0.0
28
28
*/
29
- @ThreadSafeSemaphore private var listeners = [ String: [ ListenerContainer ] ] ( )
29
+ @ThreadSafeSemaphore private var receivers = [ String: [ ReceiverContainer ] ] ( )
30
30
31
- public func addListener ( _ listener : any EventReceivable , forEventType: Eventable . Type ) {
31
+ public func addReceiver ( _ receiver : any EventReceivable , forEventType: Eventable . Type ) {
32
32
let eventTypeName = String ( reflecting: forEventType)
33
33
34
- _listeners . withLock { listeners in
35
- var bucket = listeners [ eventTypeName]
34
+ _receivers . withLock { receivers in
35
+ var bucket = receivers [ eventTypeName]
36
36
let newBucket = bucket == nil
37
- if newBucket { bucket = [ ListenerContainer ] ( ) } /// If there's no Bucket for this Event Type, create one
37
+ if newBucket { bucket = [ ReceiverContainer ] ( ) } /// If there's no Bucket for this Event Type, create one
38
38
39
- /// If it's NOT a New Bucket, and the Bucket already contains this Listener ...
40
- if !newBucket && bucket!. contains ( where: { listenerContainer in
41
- listenerContainer . listener != nil && ObjectIdentifier ( listenerContainer . listener !) == ObjectIdentifier ( listener )
39
+ /// If it's NOT a New Bucket, and the Bucket already contains this Receiver ...
40
+ if !newBucket && bucket!. contains ( where: { receiverContainer in
41
+ receiverContainer . receiver != nil && ObjectIdentifier ( receiverContainer . receiver !) == ObjectIdentifier ( receiver )
42
42
} ) {
43
43
return // ... just Return!
44
44
}
45
45
46
- /// If we reach here, the Listener is not already in the Bucket, so let's add it!
47
- bucket!. append ( ListenerContainer ( listener : listener ) )
48
- listeners [ eventTypeName] = bucket!
46
+ /// If we reach here, the Receiver is not already in the Bucket, so let's add it!
47
+ bucket!. append ( ReceiverContainer ( receiver : receiver ) )
48
+ receivers [ eventTypeName] = bucket!
49
49
}
50
50
}
51
51
52
- public func removeListener ( _ listener : any EventReceivable , forEventType: Eventable . Type ) {
52
+ public func removeReceiver ( _ receiver : any EventReceivable , forEventType: Eventable . Type ) {
53
53
let eventTypeName = String ( reflecting: forEventType)
54
54
55
- _listeners . withLock { listeners in
56
- var bucket = listeners [ eventTypeName]
57
- if bucket == nil { return } /// Can't remove a Listener if there isn't even a Bucket for hte Event Type
55
+ _receivers . withLock { receivers in
56
+ var bucket = receivers [ eventTypeName]
57
+ if bucket == nil { return } /// Can't remove a Receiver if there isn't even a Bucket for hte Event Type
58
58
59
- /// Remove any Listeners from this Event-Type Bucket for the given `listener ` instance.
60
- bucket!. removeAll { listenerContainer in
61
- listenerContainer . listener != nil && ObjectIdentifier ( listenerContainer . listener !) == ObjectIdentifier ( listener )
59
+ /// Remove any Receivers from this Event-Type Bucket for the given `receiver ` instance.
60
+ bucket!. removeAll { receiverContainer in
61
+ receiverContainer . receiver != nil && ObjectIdentifier ( receiverContainer . receiver !) == ObjectIdentifier ( receiver )
62
62
}
63
63
}
64
64
}
65
65
66
- public func removeListener ( _ listener : any EventReceivable ) {
67
- _listeners . withLock { listeners in
68
- for (eventTypeName, bucket) in listeners { /// Iterate every Event Type
66
+ public func removeReceiver ( _ receiver : any EventReceivable ) {
67
+ _receivers . withLock { receivers in
68
+ for (eventTypeName, bucket) in receivers { /// Iterate every Event Type
69
69
var newBucket = bucket // Copy the Bucket
70
- newBucket. removeAll { listenerContainer in /// Remove any occurences of the given Listener from the Bucket
71
- listenerContainer . listener != nil && ObjectIdentifier ( listenerContainer . listener !) == ObjectIdentifier ( listener )
70
+ newBucket. removeAll { receiverContainer in /// Remove any occurences of the given Receiver from the Bucket
71
+ receiverContainer . receiver != nil && ObjectIdentifier ( receiverContainer . receiver !) == ObjectIdentifier ( receiver )
72
72
}
73
- listeners [ eventTypeName] = newBucket /// Update the Bucket for this Event Type
73
+ receivers [ eventTypeName] = newBucket /// Update the Bucket for this Event Type
74
74
}
75
75
}
76
76
}
77
77
78
78
/**
79
- Dispatch the Event to all Subscribed Listeners
79
+ Dispatch the Event to all Subscribed Receivers
80
80
- Author: Simon J. Stuart
81
81
- Version: 1.0.0
82
82
*/
83
83
override internal func processEvent( _ event: any Eventable , dispatchMethod: EventDispatchMethod , priority: EventPriority ) {
84
84
let eventTypeName = String ( reflecting: type ( of: event) )
85
85
86
- var snapListeners = [ String: [ ListenerContainer ] ] ( )
86
+ var snapReceivers = [ String: [ ReceiverContainer ] ] ( )
87
87
88
- _listeners . withLock { listeners in
89
- // We should take this opportunity to remove any nil listeners
90
- listeners [ eventTypeName] ? . removeAll ( where: { listenerContainer in
91
- listenerContainer . listener == nil
88
+ _receivers . withLock { receivers in
89
+ // We should take this opportunity to remove any nil receivers
90
+ receivers [ eventTypeName] ? . removeAll ( where: { receiverContainer in
91
+ receiverContainer . receiver == nil
92
92
} )
93
- snapListeners = listeners
93
+ snapReceivers = receivers
94
94
}
95
95
96
- let bucket = snapListeners [ eventTypeName]
97
- if bucket == nil { return } /// No Listeners , so nothing more to do!
96
+ let bucket = snapReceivers [ eventTypeName]
97
+ if bucket == nil { return } /// No Receivers , so nothing more to do!
98
98
99
- for listener in bucket! {
100
- if listener . listener == nil { /// If the Listener is `nil`...
99
+ for receiver in bucket! {
100
+ if receiver . receiver == nil { /// If the Recevier is `nil`...
101
101
continue
102
102
}
103
103
104
- // so, we have a listener ... let's deal with it!
104
+ // so, we have a receiver ... let's deal with it!
105
105
switch dispatchMethod {
106
106
case . stack:
107
- listener . listener !. stackEvent ( event, priority: priority)
107
+ receiver . receiver !. stackEvent ( event, priority: priority)
108
108
case . queue:
109
- listener . listener !. queueEvent ( event, priority: priority)
109
+ receiver . receiver !. queueEvent ( event, priority: priority)
110
110
}
111
111
}
112
112
}
0 commit comments