22
22
import static org .openqa .selenium .json .Json .MAP_TYPE ;
23
23
import static org .openqa .selenium .remote .http .HttpMethod .GET ;
24
24
25
- import com .google .common .collect .HashMultimap ;
26
- import com .google .common .collect .Multimap ;
27
25
import java .io .Closeable ;
28
26
import java .io .StringReader ;
29
27
import java .time .Duration ;
28
+ import java .util .ArrayList ;
29
+ import java .util .HashMap ;
30
30
import java .util .List ;
31
31
import java .util .Map ;
32
32
import java .util .concurrent .CompletableFuture ;
@@ -70,7 +70,7 @@ public class Connection implements Closeable {
70
70
private final Map <Long , Consumer <Either <Throwable , JsonInput >>> methodCallbacks =
71
71
new ConcurrentHashMap <>();
72
72
private final ReadWriteLock callbacksLock = new ReentrantReadWriteLock (true );
73
- private final Multimap <Event <?>, Consumer <?>> eventCallbacks = HashMultimap . create ();
73
+ private final Map <Event <?>, List < Consumer <?>>> eventCallbacks = new HashMap <> ();
74
74
private final HttpClient client ;
75
75
private final AtomicBoolean underlyingSocketClosed ;
76
76
@@ -180,7 +180,7 @@ public <X> void addListener(Event<X> event, Consumer<X> handler) {
180
180
Lock lock = callbacksLock .writeLock ();
181
181
lock .lock ();
182
182
try {
183
- eventCallbacks .put (event , handler );
183
+ eventCallbacks .computeIfAbsent (event , ( key ) -> new ArrayList <>()). add ( handler );
184
184
} finally {
185
185
lock .unlock ();
186
186
}
@@ -190,7 +190,7 @@ public <X> void clearListener(Event<X> event) {
190
190
Lock lock = callbacksLock .writeLock ();
191
191
lock .lock ();
192
192
try {
193
- eventCallbacks .removeAll (event );
193
+ eventCallbacks .remove (event );
194
194
} finally {
195
195
lock .unlock ();
196
196
}
@@ -310,7 +310,7 @@ private void handleEventResponse(Map<String, Object> rawDataMap) {
310
310
"Method"
311
311
+ rawDataMap .get ("method" )
312
312
+ "called with"
313
- + eventCallbacks .keySet (). size ()
313
+ + eventCallbacks .size ()
314
314
+ "callbacks available" );
315
315
Lock lock = callbacksLock .readLock ();
316
316
// A waiting writer will block a reader to enter the lock, even if there are currently other
@@ -322,35 +322,35 @@ private void handleEventResponse(Map<String, Object> rawDataMap) {
322
322
lock .lock ();
323
323
}
324
324
try {
325
- eventCallbacks .keySet ().stream ()
325
+ eventCallbacks .entrySet ().stream ()
326
326
.filter (
327
327
event -> {
328
328
LOG .log (
329
329
getDebugLogLevel (),
330
330
"Matching {0} with {1}" ,
331
- new Object [] {rawDataMap .get ("method" ), event .getMethod ()});
332
- return rawDataMap .get ("method" ).equals (event .getMethod ());
331
+ new Object [] {rawDataMap .get ("method" ), event .getKey (). getMethod ()});
332
+ return rawDataMap .get ("method" ).equals (event .getKey (). getMethod ());
333
333
})
334
334
.forEach (
335
335
event -> {
336
336
Map <String , Object > params = (Map <String , Object >) rawDataMap .get ("params" );
337
337
Object value = null ;
338
338
if (params != null ) {
339
- value = event .getMapper ().apply (params );
339
+ value = event .getKey (). getMapper ().apply (params );
340
340
}
341
341
if (value == null ) {
342
342
return ;
343
343
}
344
344
345
345
final Object finalValue = value ;
346
346
347
- for (Consumer <?> action : eventCallbacks . get ( event )) {
347
+ for (Consumer <?> action : event . getValue ( )) {
348
348
@ SuppressWarnings ("unchecked" )
349
349
Consumer <Object > obj = (Consumer <Object >) action ;
350
350
LOG .log (
351
351
getDebugLogLevel (),
352
352
"Calling callback for {0} using {1} being passed {2}" ,
353
- new Object [] {event , obj , finalValue });
353
+ new Object [] {event . getKey () , obj , finalValue });
354
354
obj .accept (finalValue );
355
355
}
356
356
});
0 commit comments