From a374e1278bd21c31452acb82d4a151e6617a2295 Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Sun, 11 Feb 2018 15:57:13 +0800 Subject: [PATCH] --- test/org/redkale/test/ws/ChatMessage.java | 2 ++ test/org/redkale/test/ws/ChatService.java | 25 ++++++++++----------- test/org/redkale/test/ws/ChatWebSocket.java | 11 ++++++--- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/test/org/redkale/test/ws/ChatMessage.java b/test/org/redkale/test/ws/ChatMessage.java index c7d61e21d..398c8e302 100644 --- a/test/org/redkale/test/ws/ChatMessage.java +++ b/test/org/redkale/test/ws/ChatMessage.java @@ -14,6 +14,8 @@ import org.redkale.convert.json.JsonConvert; public class ChatMessage { public int fromuserid; + + public int touserid; public String fromusername; diff --git a/test/org/redkale/test/ws/ChatService.java b/test/org/redkale/test/ws/ChatService.java index 90ac79620..5ed3c4928 100644 --- a/test/org/redkale/test/ws/ChatService.java +++ b/test/org/redkale/test/ws/ChatService.java @@ -5,8 +5,8 @@ */ package org.redkale.test.ws; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; +import java.util.*; +import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; import org.redkale.service.*; import org.redkale.util.Comment; @@ -17,24 +17,23 @@ import org.redkale.util.Comment; */ public class ChatService implements Service { - private final Map rooms = new ConcurrentHashMap<>(); + @Comment("key=用户ID,value=房间ID") + private final Map userToRooms = new ConcurrentHashMap<>(); + + @Comment("key=房间ID,value=用户ID列表") + private final Map> roomToUsers = new ConcurrentHashMap<>(); protected final AtomicInteger idcreator = new AtomicInteger(10000); + @Comment("创建一个用户ID") public int createUserid() { - int v = idcreator.incrementAndGet(); - setIdcreator(v); - return v; - } - - @Comment("同步到其他服务的idcreator") - @RpcMultiRun - public void setIdcreator(int v) { - idcreator.set(v); + return idcreator.incrementAndGet(); } + @Comment("用户加入指定房间") public boolean joinRoom(int userid, int roomid) { - rooms.put(userid, roomid); + userToRooms.put(userid, roomid); + roomToUsers.computeIfAbsent(roomid, (id) -> new CopyOnWriteArrayList()).add(userid); return true; } } diff --git a/test/org/redkale/test/ws/ChatWebSocket.java b/test/org/redkale/test/ws/ChatWebSocket.java index 4f3e3c616..6cdfc2d18 100644 --- a/test/org/redkale/test/ws/ChatWebSocket.java +++ b/test/org/redkale/test/ws/ChatWebSocket.java @@ -8,7 +8,6 @@ package org.redkale.test.ws; import java.lang.reflect.Method; import java.util.*; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.atomic.AtomicInteger; import javax.annotation.Resource; import org.redkale.net.http.*; @@ -16,14 +15,20 @@ import org.redkale.net.http.*; * * @author zhangjx */ +//anyuser = true 表示WebSocket.createUserid返回的值不表示用户登录态 @RestWebSocket(name = "chat", catalog = "ws", comment = "文字聊天", anyuser = true) public class ChatWebSocket extends WebSocket { - protected static final AtomicInteger idcreator = new AtomicInteger(10000); - + //@Resource标记的Field只能被修饰为public或protected @Resource protected ChatService service; + @Override + protected CompletableFuture onOpen(final HttpRequest request) { + //随机创建一个sessionid + return CompletableFuture.completedFuture(request.getSessionid(true)); + } + @Override protected CompletableFuture createUserid() { return CompletableFuture.completedFuture(service.createUserid());