use of com.swiftmq.tools.concurrent.Semaphore in project swiftmq-client by iitsoftware.
the class Connection method close.
protected void close(String condition, String description) {
if (closed)
return;
if (condition == null) {
Semaphore sem = new Semaphore();
POSendClose po = new POSendClose(sem, condition == null ? null : new AMQPSymbol(condition), description == null ? null : new AMQPString(description));
connectionDispatcher.dispatch(po);
sem.waitHere();
} else {
POSendClose po = new POSendClose(null, condition == null ? null : new AMQPSymbol(condition), description == null ? null : new AMQPString(description));
connectionDispatcher.dispatch(po);
}
cancel();
if (exceptionListener != null && condition != null && description != null)
exceptionListener.onException(new ConnectionClosedException(condition + " / " + description));
}
use of com.swiftmq.tools.concurrent.Semaphore in project swiftmq-client by iitsoftware.
the class ConnectionDispatcher method close.
public void close() {
if (pTracer.isEnabled())
pTracer.trace(toString(), ", close ...");
try {
closeLock.lock();
if (closeInProgress) {
if (pTracer.isEnabled())
pTracer.trace(toString(), ", close in progress, return");
return;
}
closeInProgress = true;
if (heartBeatSender != null) {
TimerRegistry.Singleton().removeTimerListener(heartBeatDelay, heartBeatSender);
heartBeatSender = null;
}
if (idleTimeoutChecker != null) {
TimerRegistry.Singleton().removeTimerListener(idleTimeoutDelay, idleTimeoutChecker);
idleTimeoutChecker = null;
}
} finally {
closeLock.unlock();
}
Semaphore sem = new Semaphore();
dispatch(new POConnectionClose(sem));
sem.waitHere();
if (pTracer.isEnabled())
pTracer.trace(toString(), ", close done");
}
use of com.swiftmq.tools.concurrent.Semaphore in project swiftmq-ce by iitsoftware.
the class AMQPSwiftlet method shutdown.
protected void shutdown() throws SwiftletException {
// true when shutdown while standby
if (ctx == null)
return;
if (ctx.traceSpace.enabled)
ctx.traceSpace.trace(getName(), "shutdown ...");
try {
listenerAdapter.close();
if (ctx.traceSpace.enabled)
ctx.traceSpace.trace(getName(), "shutdown: shutdown all AMQP connections");
Semaphore sem = getShutdownSemaphore();
ConnectionManager connectionManager = ctx.networkSwiftlet.getConnectionManager();
Connection[] c = (Connection[]) connections.toArray(new Connection[connections.size()]);
connections.clear();
for (int i = 0; i < c.length; i++) {
connectionManager.removeConnection(c[i]);
}
if (sem != null) {
System.out.println("+++ waiting for connection shutdown ...");
sem.waitHere();
try {
Thread.sleep(5000);
} catch (Exception ignored) {
}
}
ctx.mgmtSwiftlet.removeMgmtListener(this);
Security.removeProvider(SASLProvider.PROVIDER_NAME);
} catch (Exception e) {
e.printStackTrace();
}
if (ctx.traceSpace.enabled)
ctx.traceSpace.trace(getName(), "shutdown done.");
ctx = null;
}
use of com.swiftmq.tools.concurrent.Semaphore in project swiftmq-ce by iitsoftware.
the class AMQPHandler method visit.
public void visit(POConnectionFrameReceived po) {
if (ctx.traceSpace.enabled)
ctx.traceSpace.trace(ctx.amqpSwiftlet.getName(), toString() + ", visit, po=" + po + " ...");
po.getFrame().accept(connectionVisitorAdapter);
Semaphore sem = po.getSemaphore();
if (sem != null)
sem.notifySingleWaiter();
if (ctx.traceSpace.enabled)
ctx.traceSpace.trace(ctx.amqpSwiftlet.getName(), toString() + ", visit, po=" + po + " done");
}
use of com.swiftmq.tools.concurrent.Semaphore in project swiftmq-ce by iitsoftware.
the class ChannelHandler method close.
public void close() {
if (ctx.traceSpace.enabled)
ctx.traceSpace.trace(ctx.amqpSwiftlet.getName(), toString() + ", close ...");
closeLock.lock();
if (closeInProgress) {
if (ctx.traceSpace.enabled)
ctx.traceSpace.trace(ctx.amqpSwiftlet.getName(), toString() + ", close in progress, return");
return;
}
closeInProgress = true;
closeLock.unlock();
channelDisabled = false;
Semaphore sem = new Semaphore();
dispatch(new POCloseChannel(sem));
sem.waitHere();
if (ctx.traceSpace.enabled)
ctx.traceSpace.trace(ctx.amqpSwiftlet.getName(), toString() + ", close done");
}
Aggregations