This commit is contained in:
Redkale
2018-05-28 09:59:39 +08:00
parent 4a2ba4e914
commit d9ddd6d772
2 changed files with 17 additions and 8 deletions

View File

@@ -754,11 +754,10 @@ public abstract class WebSocket<G extends Serializable, T> {
} }
/** /**
* 当Single模式下用户重复登陆时回调函数 默认处理逻辑:关闭之前的WebSocket连接 * 当Single模式下用户重复登陆时回调函数调用完之后关闭之前的WebSocket连接
* *
*/ */
public void onSingleRepeatConnect() { public void onSingleRepeatConnect() {
this._engine.node.forceCloseWebSocket(getUserid());
} }
/** /**

View File

@@ -241,7 +241,9 @@ public abstract class WebSocketServlet extends HttpServlet implements Resourcabl
webSocket._userid = userid; webSocket._userid = userid;
if (single && !anyuser) { if (single && !anyuser) {
WebSocketServlet.this.node.existsWebSocket(userid).whenComplete((rs, nex) -> { WebSocketServlet.this.node.existsWebSocket(userid).whenComplete((rs, nex) -> {
if (rs) webSocket.onSingleRepeatConnect(); if (rs) {
webSocket.onSingleRepeatConnect();
webSocket.forceCloseWebSocket(userid).whenComplete((fr, fex) -> {
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());
webSocket._runner = runner; webSocket._runner = runner;
@@ -255,6 +257,14 @@ public abstract class WebSocketServlet extends HttpServlet implements Resourcabl
context.runAsync(runner); context.runAsync(runner);
response.finish(true); response.finish(true);
} }
});
} else {
WebSocketServlet.this.node.localEngine.add(webSocket);
WebSocketRunner runner = new WebSocketRunner(context, webSocket, restMessageConsumer, response.removeChannel());
webSocket._runner = runner;
context.runAsync(runner);
response.finish(true);
}
}; };
if (webSocket.delayPackets != null) { //存在待发送的消息 if (webSocket.delayPackets != null) { //存在待发送的消息
if (temprunner == null) temprunner = new WebSocketRunner(context, webSocket, restMessageConsumer, response.getChannel()); if (temprunner == null) temprunner = new WebSocketRunner(context, webSocket, restMessageConsumer, response.getChannel());