diff --git a/src/main/java/org/p2p/solanaj/ws/SubscriptionWebSocketClient.java b/src/main/java/org/p2p/solanaj/ws/SubscriptionWebSocketClient.java index 521d19a7..d5867a93 100644 --- a/src/main/java/org/p2p/solanaj/ws/SubscriptionWebSocketClient.java +++ b/src/main/java/org/p2p/solanaj/ws/SubscriptionWebSocketClient.java @@ -3,9 +3,9 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; import com.squareup.moshi.JsonAdapter; @@ -32,16 +32,34 @@ private class SubscriptionParams { } } - private static SubscriptionWebSocketClient instance; - - private Map subscriptions = new HashMap<>(); - private Map subscriptionIds = new HashMap<>(); - private Map subscriptionListeners = new HashMap<>(); + private Map subscriptions = new ConcurrentHashMap<>(); + private Map subscriptionIds = new ConcurrentHashMap<>(); + private Map subscriptionListeners = new ConcurrentHashMap<>(); private static final Logger LOGGER = Logger.getLogger(SubscriptionWebSocketClient.class.getName()); + public static SubscriptionWebSocketClient getExactPathInstance(String endpoint) { + URI serverURI; + SubscriptionWebSocketClient instance; + + try { + serverURI = new URI(endpoint); + } catch (URISyntaxException e) { + throw new IllegalArgumentException(e); + } + + instance = new SubscriptionWebSocketClient(serverURI); + + if (!instance.isOpen()) { + instance.connect(); + } + + return instance; + } + public static SubscriptionWebSocketClient getInstance(String endpoint) { - URI endpointURI; URI serverURI; + URI endpointURI; + SubscriptionWebSocketClient instance; try { endpointURI = new URI(endpoint); @@ -50,16 +68,13 @@ public static SubscriptionWebSocketClient getInstance(String endpoint) { throw new IllegalArgumentException(e); } - if (instance == null) { - instance = new SubscriptionWebSocketClient(serverURI); - } + instance = new SubscriptionWebSocketClient(serverURI); if (!instance.isOpen()) { instance.connect(); } return instance; - } public SubscriptionWebSocketClient(URI serverURI) { @@ -75,7 +90,7 @@ public void accountSubscribe(String key, NotificationEventListener listener) { RpcRequest rpcRequest = new RpcRequest("accountSubscribe", params); subscriptions.put(rpcRequest.getId(), new SubscriptionParams(rpcRequest, listener)); - subscriptionIds.put(rpcRequest.getId(), null); + subscriptionIds.put(rpcRequest.getId(), 0L); updateSubscriptions(); } @@ -87,7 +102,7 @@ public void signatureSubscribe(String signature, NotificationEventListener liste RpcRequest rpcRequest = new RpcRequest("signatureSubscribe", params); subscriptions.put(rpcRequest.getId(), new SubscriptionParams(rpcRequest, listener)); - subscriptionIds.put(rpcRequest.getId(), null); + subscriptionIds.put(rpcRequest.getId(), 0L); updateSubscriptions(); }