Cleaning up websocket connection open/close in favor of session open/close
This commit is contained in:
parent
18e19260ff
commit
cff7c9dbcb
|
@ -99,7 +99,7 @@ public class ClientContainer extends ContainerLifeCycle implements WebSocketCont
|
|||
|
||||
client = new WebSocketClient(executor);
|
||||
client.setEventDriverFactory(new JsrEventDriverFactory(client.getPolicy()));
|
||||
client.setSessionFactory(new JsrSessionFactory(this,this));
|
||||
client.setSessionFactory(new JsrSessionFactory(this,this,client));
|
||||
addBean(client);
|
||||
|
||||
ShutdownThread.register(this);
|
||||
|
|
|
@ -31,18 +31,15 @@ import org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection;
|
|||
|
||||
public class WebSocketServerConnection extends AbstractWebSocketConnection
|
||||
{
|
||||
private final WebSocketServerFactory factory;
|
||||
private final AtomicBoolean opened = new AtomicBoolean(false);
|
||||
|
||||
public WebSocketServerConnection(EndPoint endp, Executor executor, Scheduler scheduler, WebSocketPolicy policy, ByteBufferPool bufferPool,
|
||||
WebSocketServerFactory factory)
|
||||
public WebSocketServerConnection(EndPoint endp, Executor executor, Scheduler scheduler, WebSocketPolicy policy, ByteBufferPool bufferPool)
|
||||
{
|
||||
super(endp,executor,scheduler,policy,bufferPool);
|
||||
if (policy.getIdleTimeout() > 0)
|
||||
{
|
||||
endp.setIdleTimeout(policy.getIdleTimeout());
|
||||
}
|
||||
this.factory = factory;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -57,20 +54,13 @@ public class WebSocketServerConnection extends AbstractWebSocketConnection
|
|||
return getEndPoint().getRemoteAddress();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClose()
|
||||
{
|
||||
super.onClose();
|
||||
factory.sessionClosed(getSession());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onOpen()
|
||||
{
|
||||
boolean beenOpened = opened.getAndSet(true);
|
||||
if (!beenOpened)
|
||||
{
|
||||
factory.sessionOpened(getSession());
|
||||
getSession().open();
|
||||
}
|
||||
super.onOpen();
|
||||
}
|
||||
|
|
|
@ -91,7 +91,6 @@ public class WebSocketServerFactory extends ContainerLifeCycle implements WebSoc
|
|||
* Have the factory maintain 1 and only 1 scheduler. All connections share this scheduler.
|
||||
*/
|
||||
private final Scheduler scheduler = new ScheduledExecutorScheduler();
|
||||
private final Queue<WebSocketSession> sessions = new ConcurrentLinkedQueue<>();
|
||||
private final String supportedVersions;
|
||||
private final WebSocketPolicy defaultPolicy;
|
||||
private final EventDriverFactory eventDriverFactory;
|
||||
|
@ -224,11 +223,11 @@ public class WebSocketServerFactory extends ContainerLifeCycle implements WebSoc
|
|||
|
||||
protected void closeAllConnections()
|
||||
{
|
||||
for (WebSocketSession session : sessions)
|
||||
for (WebSocketSession session : openSessions)
|
||||
{
|
||||
session.close();
|
||||
}
|
||||
sessions.clear();
|
||||
openSessions.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -423,27 +422,6 @@ public class WebSocketServerFactory extends ContainerLifeCycle implements WebSoc
|
|||
registeredSocketClasses.add(websocketPojo);
|
||||
}
|
||||
|
||||
public boolean sessionClosed(WebSocketSession session)
|
||||
{
|
||||
return isRunning() && sessions.remove(session);
|
||||
}
|
||||
|
||||
public boolean sessionOpened(WebSocketSession session)
|
||||
{
|
||||
if (LOG.isDebugEnabled())
|
||||
{
|
||||
LOG.debug("Session Opened: {}",session);
|
||||
}
|
||||
if (!isRunning())
|
||||
{
|
||||
LOG.warn("Factory is not running");
|
||||
return false;
|
||||
}
|
||||
boolean ret = sessions.offer(session);
|
||||
session.open();
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCreator(WebSocketCreator creator)
|
||||
{
|
||||
|
@ -536,7 +514,7 @@ public class WebSocketServerFactory extends ContainerLifeCycle implements WebSoc
|
|||
EndPoint endp = http.getEndPoint();
|
||||
Executor executor = http.getConnector().getExecutor();
|
||||
ByteBufferPool bufferPool = http.getConnector().getByteBufferPool();
|
||||
WebSocketServerConnection wsConnection = new WebSocketServerConnection(endp,executor,scheduler,driver.getPolicy(),bufferPool,this);
|
||||
WebSocketServerConnection wsConnection = new WebSocketServerConnection(endp,executor,scheduler,driver.getPolicy(),bufferPool);
|
||||
connection = wsConnection;
|
||||
|
||||
extensionStack.setPolicy(driver.getPolicy());
|
||||
|
|
Loading…
Reference in New Issue