int getConnectionCount() { assert currentThread() == getWorkerThread(); return count; } }
void freeConnection() { assert currentThread() == getWorkerThread(); if (count-- <= low && tokenCount != 0 && stopped) { stopped = false; if (server.resumed) { super.resume(SelectionKey.OP_ACCEPT); } } }
public int getConnectionCount() { final AtomicInteger counter = new AtomicInteger(); final CountDownLatch latch = new CountDownLatch(handles.length); for (final NioTcpServerHandle handle : handles) { handle.getWorkerThread().execute(() -> { counter.getAndAdd(handle.getConnectionCount()); latch.countDown(); }); } try { latch.await(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } return counter.get(); }
void resume() { final WorkerThread thread = getWorkerThread(); if (thread == currentThread()) { if (! stopped && server.resumed) super.resume(SelectionKey.OP_ACCEPT); } else { thread.execute(new Runnable() { public void run() { resume(); } }); } }
void suspend() { final WorkerThread thread = getWorkerThread(); if (thread == currentThread()) { if (stopped || ! server.resumed) super.suspend(SelectionKey.OP_ACCEPT); } else { thread.execute(new Runnable() { public void run() { suspend(); } }); } }
public void channelClosed() { final WorkerThread thread = getWorkerThread(); if (thread == currentThread()) { freeConnection(); } else { thread.execute(freeTask); } }
boolean getConnection() { assert currentThread() == getWorkerThread(); if (stopped) { return false; } if (tokenCount != -1 && --tokenCount == 0) { setThreadNewCount(getWorkerThread().getNextThread(), server.getTokenConnectionCount()); } if (++count >= high || tokenCount == 0) { stopped = true; super.suspend(SelectionKey.OP_ACCEPT); } return true; }
void initializeTokenCount(final int newCount) { WorkerThread workerThread = getWorkerThread(); final int number = workerThread.getNumber(); if (workerThread == currentThread()) { tokenCount = newCount; if (newCount == 0) { stopped = true; super.suspend(SelectionKey.OP_ACCEPT); } } else { workerThread.execute(new Runnable() { public void run() { server.getHandle(number).initializeTokenCount(newCount); } }); } }
void setTokenCount(final int newCount) { WorkerThread workerThread = getWorkerThread(); if (workerThread == currentThread()) { if (tokenCount == 0) { tokenCount = newCount; if (count <= low && stopped) { stopped = false; if (server.resumed) { super.resume(SelectionKey.OP_ACCEPT); } } return; } workerThread = workerThread.getNextThread(); } setThreadNewCount(workerThread, newCount); }
public void executeSetTask(final int high, final int low) { final WorkerThread thread = getWorkerThread(); if (thread == currentThread()) { this.high = high; this.low = low; if (count >= high && ! stopped) { stopped = true; suspend(); } else if (count <= low && stopped) { stopped = false; if (server.resumed) resume(); } } else { thread.execute(new Runnable() { public void run() { executeSetTask(high, low); } }); } }
int getConnectionCount() { assert currentThread() == getWorkerThread(); return count; } }
int getConnectionCount() { assert currentThread() == getWorkerThread(); return count; } }
void freeConnection() { assert currentThread() == getWorkerThread(); if (count-- <= low && tokenCount != 0 && stopped) { stopped = false; if (server.resumed) { super.resume(SelectionKey.OP_ACCEPT); } } }
void freeConnection() { assert currentThread() == getWorkerThread(); if (count-- <= low && tokenCount != 0 && stopped) { stopped = false; if (server.resumed) { super.resume(SelectionKey.OP_ACCEPT); } } }
void suspend() { final WorkerThread thread = getWorkerThread(); if (thread == currentThread()) { if (stopped || ! server.resumed) super.suspend(SelectionKey.OP_ACCEPT); } else { thread.execute(new Runnable() { public void run() { suspend(); } }); } }
public void channelClosed() { final WorkerThread thread = getWorkerThread(); if (thread == currentThread()) { freeConnection(); } else { thread.execute(freeTask); } }
public void channelClosed() { final WorkerThread thread = getWorkerThread(); if (thread == currentThread()) { freeConnection(); } else { thread.execute(freeTask); } }
void suspend() { final WorkerThread thread = getWorkerThread(); if (thread == currentThread()) { if (stopped || ! server.resumed) super.suspend(SelectionKey.OP_ACCEPT); } else { thread.execute(new Runnable() { public void run() { suspend(); } }); } }
void resume() { final WorkerThread thread = getWorkerThread(); if (thread == currentThread()) { if (! stopped && server.resumed) super.resume(SelectionKey.OP_ACCEPT); } else { thread.execute(new Runnable() { public void run() { resume(); } }); } }
void resume() { final WorkerThread thread = getWorkerThread(); if (thread == currentThread()) { if (! stopped && server.resumed) super.resume(SelectionKey.OP_ACCEPT); } else { thread.execute(new Runnable() { public void run() { resume(); } }); } }