Java example: store update handlers separately.
GitOrigin-RevId: dc035dc72756db604731ae7549b172ba54b5d78e
This commit is contained in:
parent
d2d0cb5cc0
commit
c72d18bcd3
@ -112,7 +112,7 @@ public final class Client implements Runnable {
|
|||||||
* exception thrown from updatesHandler, if it is null, defaultExceptionHandler will be invoked.
|
* exception thrown from updatesHandler, if it is null, defaultExceptionHandler will be invoked.
|
||||||
*/
|
*/
|
||||||
public void setUpdatesHandler(ResultHandler updatesHandler, ExceptionHandler exceptionHandler) {
|
public void setUpdatesHandler(ResultHandler updatesHandler, ExceptionHandler exceptionHandler) {
|
||||||
handlers.put(0L, new Handler(updatesHandler, exceptionHandler));
|
updateHandlers.put(nativeClientId, new Handler(updatesHandler, exceptionHandler));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -174,9 +174,10 @@ public final class Client implements Runnable {
|
|||||||
while (!stopFlag) {
|
while (!stopFlag) {
|
||||||
Thread.yield();
|
Thread.yield();
|
||||||
}
|
}
|
||||||
while (handlers.size() != 1) {
|
while (!handlers.isEmpty()) {
|
||||||
receiveQueries(300.0);
|
receiveQueries(300.0);
|
||||||
}
|
}
|
||||||
|
updateHandlers.remove(nativeClientId);
|
||||||
destroyNativeClient(nativeClientId);
|
destroyNativeClient(nativeClientId);
|
||||||
} finally {
|
} finally {
|
||||||
writeLock.unlock();
|
writeLock.unlock();
|
||||||
@ -191,6 +192,8 @@ public final class Client implements Runnable {
|
|||||||
private volatile boolean isClientDestroyed = false;
|
private volatile boolean isClientDestroyed = false;
|
||||||
private final long nativeClientId;
|
private final long nativeClientId;
|
||||||
|
|
||||||
|
private static final ConcurrentHashMap<Long, Handler> updateHandlers = new ConcurrentHashMap<Long, Handler>();
|
||||||
|
|
||||||
private final ConcurrentHashMap<Long, Handler> handlers = new ConcurrentHashMap<Long, Handler>();
|
private final ConcurrentHashMap<Long, Handler> handlers = new ConcurrentHashMap<Long, Handler>();
|
||||||
private final AtomicLong currentQueryId = new AtomicLong();
|
private final AtomicLong currentQueryId = new AtomicLong();
|
||||||
|
|
||||||
@ -212,7 +215,7 @@ public final class Client implements Runnable {
|
|||||||
|
|
||||||
private Client(ResultHandler updatesHandler, ExceptionHandler updateExceptionHandler, ExceptionHandler defaultExceptionHandler) {
|
private Client(ResultHandler updatesHandler, ExceptionHandler updateExceptionHandler, ExceptionHandler defaultExceptionHandler) {
|
||||||
nativeClientId = createNativeClient();
|
nativeClientId = createNativeClient();
|
||||||
handlers.put(0L, new Handler(updatesHandler, updateExceptionHandler));
|
updateHandlers.put(nativeClientId, new Handler(updatesHandler, updateExceptionHandler));
|
||||||
this.defaultExceptionHandler = defaultExceptionHandler;
|
this.defaultExceptionHandler = defaultExceptionHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -234,7 +237,7 @@ public final class Client implements Runnable {
|
|||||||
Handler handler;
|
Handler handler;
|
||||||
if (id == 0) {
|
if (id == 0) {
|
||||||
// update handler stays forever
|
// update handler stays forever
|
||||||
handler = handlers.get(id);
|
handler = updateHandlers.get(nativeClientId);
|
||||||
} else {
|
} else {
|
||||||
handler = handlers.remove(id);
|
handler = handlers.remove(id);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user