From 2d4b865432144481aedf5c26dfdab37f59624c42 Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Wed, 6 Dec 2017 10:20:13 +0800 Subject: [PATCH] =?UTF-8?q?RestWebSocket=E5=A2=9E=E5=8A=A0anyuser=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/org/redkale/net/http/Rest.java | 4 ++++ src/org/redkale/net/http/RestWebSocket.java | 7 +++++++ src/org/redkale/net/http/WebSocketServlet.java | 9 ++++++++- test/org/redkale/test/ws/ChatWebSocket.java | 2 +- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/org/redkale/net/http/Rest.java b/src/org/redkale/net/http/Rest.java index c1b1d34a8..8c4eb2489 100644 --- a/src/org/redkale/net/http/Rest.java +++ b/src/org/redkale/net/http/Rest.java @@ -328,6 +328,10 @@ public final class Rest { mv.visitInsn(rws.single() ? ICONST_1 : ICONST_0); mv.visitFieldInsn(PUTFIELD, newDynName, "single", "Z"); + mv.visitVarInsn(ALOAD, 0); + mv.visitInsn(rws.anyuser() ? ICONST_1 : ICONST_0); + mv.visitFieldInsn(PUTFIELD, newDynName, "anyuser", "Z"); + mv.visitInsn(RETURN); mv.visitMaxs(3, 1); mv.visitEnd(); diff --git a/src/org/redkale/net/http/RestWebSocket.java b/src/org/redkale/net/http/RestWebSocket.java index 34a63c76d..adf2247b1 100644 --- a/src/org/redkale/net/http/RestWebSocket.java +++ b/src/org/redkale/net/http/RestWebSocket.java @@ -52,6 +52,13 @@ public @interface RestWebSocket { */ boolean single() default true; + /** + * WebSocket.createUserid返回的值是否不能表示户登录态 + * + * @return 默认false + */ + boolean anyuser() default false; + /** * WebScoket服务器给客户端进行ping操作的间隔时间, 单位: 秒, 默认值:15秒 * diff --git a/src/org/redkale/net/http/WebSocketServlet.java b/src/org/redkale/net/http/WebSocketServlet.java index 2103af937..745af4472 100644 --- a/src/org/redkale/net/http/WebSocketServlet.java +++ b/src/org/redkale/net/http/WebSocketServlet.java @@ -62,14 +62,21 @@ public abstract class WebSocketServlet extends HttpServlet implements Resourcabl protected Type messageTextType; //RestWebSocket时会被修改 + //同RestWebSocket.single protected boolean single = true; //是否单用户单连接 + //同RestWebSocket.liveinterval protected int liveinterval = DEFAILT_LIVEINTERVAL; + //同RestWebSocket.wsmaxconns protected int wsmaxconns = 0; + //同RestWebSocket.wsmaxbody protected int wsmaxbody = 16 * 1024; + //同RestWebSocket.anyuser + protected boolean anyuser = false; + @Resource(name = "jsonconvert") protected Convert jsonConvert; @@ -203,7 +210,7 @@ public abstract class WebSocketServlet extends HttpServlet implements Resourcabl return; } webSocket._userid = userid; - if (single) { + if (single && !anyuser) { WebSocketServlet.this.node.existsWebSocket(userid).whenComplete((rs, ex) -> { if (rs) webSocket.onSingleRepeatConnect(); WebSocketServlet.this.node.localEngine.add(webSocket); diff --git a/test/org/redkale/test/ws/ChatWebSocket.java b/test/org/redkale/test/ws/ChatWebSocket.java index 3caa16e00..51ba06e5b 100644 --- a/test/org/redkale/test/ws/ChatWebSocket.java +++ b/test/org/redkale/test/ws/ChatWebSocket.java @@ -15,7 +15,7 @@ import org.redkale.net.http.*; * * @author zhangjx */ -@RestWebSocket(name = "chat", catalog = "ws", comment = "文字聊天") +@RestWebSocket(name = "chat", catalog = "ws", comment = "文字聊天", anyuser = true) public class ChatWebSocket extends WebSocket { protected static final AtomicInteger idcreator = new AtomicInteger(10000);