WebSocket识别Single模式,Single模式下重复登陆时默认会关闭之前的WebSocket连接

This commit is contained in:
Redkale
2017-10-18 10:47:43 +08:00
parent a69d813bf5
commit f6b407aa44
2 changed files with 24 additions and 5 deletions

View File

@@ -596,6 +596,14 @@ public abstract class WebSocket<G extends Serializable, T> {
this.getLogger().log(Level.SEVERE, "WebSocket receive or send Message error", t); this.getLogger().log(Level.SEVERE, "WebSocket receive or send Message error", t);
} }
/**
* 当Single模式下用户重复登陆时回调函数 默认处理逻辑关闭之前的WebSocket连接
*
*/
public void onSingleRepeatConnect() {
this._engine.node.forceCloseWebSocket(getUserid());
}
/** /**
* 获取Logger * 获取Logger
* *

View File

@@ -186,11 +186,22 @@ public abstract class WebSocketServlet extends HttpServlet implements Resourcabl
return; return;
} }
webSocket._userid = userid; webSocket._userid = userid;
WebSocketServlet.this.node.localEngine.add(webSocket); if (single) {
WebSocketRunner runner = new WebSocketRunner(context, webSocket, restMessageConsumer, response.removeChannel()); WebSocketServlet.this.node.existsWebSocket(userid).whenComplete((rs, ex) -> {
webSocket._runner = runner; if (rs) webSocket.onSingleRepeatConnect();
context.runAsync(runner); WebSocketServlet.this.node.localEngine.add(webSocket);
response.finish(true); WebSocketRunner runner = new WebSocketRunner(context, webSocket, restMessageConsumer, response.removeChannel());
webSocket._runner = runner;
context.runAsync(runner);
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);
}
}); });
} }