1717
1818import java .time .Duration ;
1919import java .lang .ref .WeakReference ;
20+ import java .lang .IllegalStateException ;
2021import java .lang .InterruptedException ;
2122import java .lang .Long ;
2223import java .util .AbstractMap ;
@@ -52,7 +53,6 @@ public class ClientImpl<T extends ServiceDefinition> implements Client<T> {
5253 private final WeakReference <Node > nodeReference ;
5354 private long handle ;
5455 private final String serviceName ;
55- private long sequenceNumber = 0 ;
5656 private Map <Long , Map .Entry <Consumer , RCLFuture >> pendingRequests ;
5757
5858 private final Class <MessageDefinition > requestType ;
@@ -79,8 +79,8 @@ public void accept(Future<V> input) {}
7979 public final <U extends MessageDefinition , V extends MessageDefinition > Future <V >
8080 asyncSendRequest (final U request , final Consumer <Future <V >> callback ) {
8181 synchronized (pendingRequests ) {
82- sequenceNumber ++;
83- nativeSendClientRequest ( handle , sequenceNumber , request .getFromJavaConverterInstance (),
82+ long sequenceNumber = nativeSendClientRequest (
83+ handle , request .getFromJavaConverterInstance (),
8484 request .getToJavaConverterInstance (), request .getDestructorInstance (), request );
8585 RCLFuture <V > future = new RCLFuture <V >(this .nodeReference );
8686
@@ -96,15 +96,20 @@ public final <U extends MessageDefinition> void handleResponse(
9696 synchronized (pendingRequests ) {
9797 long sequenceNumber = header .sequenceNumber ;
9898 Map .Entry <Consumer , RCLFuture > entry = pendingRequests .remove (sequenceNumber );
99- Consumer <Future > callback = entry .getKey ();
100- RCLFuture <U > future = entry .getValue ();
101- future .set (response );
102- callback .accept (future );
99+ if (entry != null ) {
100+ Consumer <Future > callback = entry .getKey ();
101+ RCLFuture <U > future = entry .getValue ();
102+ future .set (response );
103+ callback .accept (future );
104+ return ;
105+ }
106+ throw new IllegalStateException (
107+ "No request made with the given sequence number: " + sequenceNumber );
103108 }
104109 }
105110
106- private static native void nativeSendClientRequest (long handle , long sequenceNumber ,
107- long requestFromJavaConverterHandle , long requestToJavaConverterHandle ,
111+ private static native long nativeSendClientRequest (
112+ long handle , long requestFromJavaConverterHandle , long requestToJavaConverterHandle ,
108113 long requestDestructorHandle , MessageDefinition requestMessage );
109114
110115 public final Class <MessageDefinition > getRequestType () {
0 commit comments