This commit is contained in:
Redkale
2018-02-11 15:57:13 +08:00
parent 0a16fb85bd
commit a374e1278b
3 changed files with 22 additions and 16 deletions

View File

@@ -15,6 +15,8 @@ public class ChatMessage {
public int fromuserid; public int fromuserid;
public int touserid;
public String fromusername; public String fromusername;
public String content; public String content;

View File

@@ -5,8 +5,8 @@
*/ */
package org.redkale.test.ws; package org.redkale.test.ws;
import java.util.Map; import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import org.redkale.service.*; import org.redkale.service.*;
import org.redkale.util.Comment; import org.redkale.util.Comment;
@@ -17,24 +17,23 @@ import org.redkale.util.Comment;
*/ */
public class ChatService implements Service { public class ChatService implements Service {
private final Map<Integer, Integer> rooms = new ConcurrentHashMap<>(); @Comment("key=用户IDvalue=房间ID")
private final Map<Integer, Integer> userToRooms = new ConcurrentHashMap<>();
@Comment("key=房间IDvalue=用户ID列表")
private final Map<Integer, List<Integer>> roomToUsers = new ConcurrentHashMap<>();
protected final AtomicInteger idcreator = new AtomicInteger(10000); protected final AtomicInteger idcreator = new AtomicInteger(10000);
@Comment("创建一个用户ID")
public int createUserid() { public int createUserid() {
int v = idcreator.incrementAndGet(); return idcreator.incrementAndGet();
setIdcreator(v);
return v;
}
@Comment("同步到其他服务的idcreator")
@RpcMultiRun
public void setIdcreator(int v) {
idcreator.set(v);
} }
@Comment("用户加入指定房间")
public boolean joinRoom(int userid, int roomid) { 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; return true;
} }
} }

View File

@@ -8,7 +8,6 @@ package org.redkale.test.ws;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicInteger;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.redkale.net.http.*; import org.redkale.net.http.*;
@@ -16,14 +15,20 @@ import org.redkale.net.http.*;
* *
* @author zhangjx * @author zhangjx
*/ */
//anyuser = true 表示WebSocket.createUserid返回的值不表示用户登录态
@RestWebSocket(name = "chat", catalog = "ws", comment = "文字聊天", anyuser = true) @RestWebSocket(name = "chat", catalog = "ws", comment = "文字聊天", anyuser = true)
public class ChatWebSocket extends WebSocket<Integer, Object> { public class ChatWebSocket extends WebSocket<Integer, Object> {
protected static final AtomicInteger idcreator = new AtomicInteger(10000); //@Resource标记的Field只能被修饰为public或protected
@Resource @Resource
protected ChatService service; protected ChatService service;
@Override
protected CompletableFuture<String> onOpen(final HttpRequest request) {
//随机创建一个sessionid
return CompletableFuture.completedFuture(request.getSessionid(true));
}
@Override @Override
protected CompletableFuture<Integer> createUserid() { protected CompletableFuture<Integer> createUserid() {
return CompletableFuture.completedFuture(service.createUserid()); return CompletableFuture.completedFuture(service.createUserid());