File tree 5 files changed +37
-0
lines changed
rosjava/src/main/java/org/ros
5 files changed +37
-0
lines changed Original file line number Diff line number Diff line change @@ -42,4 +42,9 @@ public void loop() throws InterruptedException {
42
42
SignalRunnable <T > signalRunnable = events .takeFirst ();
43
43
signalRunnable .run (listener );
44
44
}
45
+
46
+ public T getListener ()
47
+ {
48
+ return listener ;
49
+ }
45
50
}
Original file line number Diff line number Diff line change @@ -101,6 +101,25 @@ public Collection<EventDispatcher<T>> addAll(Collection<T> listeners) {
101
101
return addAll (listeners , DEFAULT_QUEUE_CAPACITY );
102
102
}
103
103
104
+ /**
105
+ * Removes and cancels the {@EventDispatcher} specified by the listener
106
+ * from the {@link ListenerGroup}.
107
+ * @param listener the listener to remove
108
+ * @return flag indicating successful removal
109
+ */
110
+ public boolean remove (T listener )
111
+ {
112
+ for (EventDispatcher <T > eventDispatcher : eventDispatchers ) {
113
+ if (listener .equals (eventDispatcher .getListener ()))
114
+ {
115
+ eventDispatcher .cancel ();
116
+ eventDispatchers .remove (eventDispatcher );
117
+ return true ;
118
+ }
119
+ }
120
+ return false ;
121
+ }
122
+
104
123
/**
105
124
* @return the number of listeners in the group
106
125
*/
@@ -151,5 +170,6 @@ public void shutdown() {
151
170
for (EventDispatcher <T > eventDispatcher : eventDispatchers ) {
152
171
eventDispatcher .cancel ();
153
172
}
173
+ eventDispatchers .clear ();
154
174
}
155
175
}
Original file line number Diff line number Diff line change @@ -493,6 +493,11 @@ public void run(NodeListener listener) {
493
493
});
494
494
}
495
495
496
+ @ Override
497
+ public void removeListeners () {
498
+ nodeListeners .shutdown ();
499
+ }
500
+
496
501
/**
497
502
* SignalRunnable all {@link NodeListener}s that the {@link Node} has started.
498
503
* <p>
Original file line number Diff line number Diff line change @@ -213,6 +213,7 @@ private void registerNode(ConnectedNode connectedNode) {
213
213
* the {@link Node} to unregister
214
214
*/
215
215
private void unregisterNode (Node node ) {
216
+ node .removeListeners ();
216
217
connectedNodes .get (node .getName ()).remove (node );
217
218
nodeMains .remove (node );
218
219
}
Original file line number Diff line number Diff line change @@ -126,4 +126,10 @@ public interface Node {
126
126
* Shut the node down.
127
127
*/
128
128
void shutdown ();
129
+
130
+ /**
131
+ * Stops and Clears node listeners.
132
+ */
133
+
134
+ void removeListeners ();
129
135
}
You can’t perform that action at this time.
0 commit comments