This commit is contained in:
Redkale
2018-05-28 10:10:59 +08:00
parent f539633497
commit 6d1c4e6c85
2 changed files with 18 additions and 9 deletions

View File

@@ -756,8 +756,10 @@ public abstract class WebSocket<G extends Serializable, T> {
/** /**
* 当Single模式下用户重复登陆时回调函数调用完之后关闭之前的WebSocket连接 * 当Single模式下用户重复登陆时回调函数调用完之后关闭之前的WebSocket连接
* *
* @return Future 可以为null
*/ */
public void onSingleRepeatConnect() { public CompletableFuture<Integer> onSingleRepeatConnect() {
return null;
} }
/** /**

View File

@@ -242,14 +242,21 @@ public abstract class WebSocketServlet extends HttpServlet implements Resourcabl
if (single && !anyuser) { if (single && !anyuser) {
WebSocketServlet.this.node.existsWebSocket(userid).whenComplete((rs, nex) -> { WebSocketServlet.this.node.existsWebSocket(userid).whenComplete((rs, nex) -> {
if (rs) { if (rs) {
webSocket.onSingleRepeatConnect(); CompletableFuture rcFuture = webSocket.onSingleRepeatConnect();
node.forceCloseWebSocket(userid).whenComplete((fr, fex) -> { Runnable task = () -> {
WebSocketServlet.this.node.localEngine.add(webSocket); node.forceCloseWebSocket(userid).whenComplete((fr, fex) -> {
WebSocketRunner runner = new WebSocketRunner(context, webSocket, restMessageConsumer, response.removeChannel()); WebSocketServlet.this.node.localEngine.add(webSocket);
webSocket._runner = runner; WebSocketRunner runner = new WebSocketRunner(context, webSocket, restMessageConsumer, response.removeChannel());
context.runAsync(runner); webSocket._runner = runner;
response.finish(true); context.runAsync(runner);
}); response.finish(true);
});
};
if (rcFuture == null) {
task.run();
} else {
rcFuture.whenComplete((r, e) -> task.run());
}
} else { } else {
WebSocketServlet.this.node.localEngine.add(webSocket); WebSocketServlet.this.node.localEngine.add(webSocket);
WebSocketRunner runner = new WebSocketRunner(context, webSocket, restMessageConsumer, response.removeChannel()); WebSocketRunner runner = new WebSocketRunner(context, webSocket, restMessageConsumer, response.removeChannel());