This commit is contained in:
@@ -14,6 +14,8 @@ import org.redkale.convert.json.JsonConvert;
|
||||
public class ChatMessage {
|
||||
|
||||
public int fromuserid;
|
||||
|
||||
public int touserid;
|
||||
|
||||
public String fromusername;
|
||||
|
||||
|
||||
@@ -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<Integer, Integer> rooms = new ConcurrentHashMap<>();
|
||||
@Comment("key=用户ID,value=房间ID")
|
||||
private final Map<Integer, Integer> userToRooms = new ConcurrentHashMap<>();
|
||||
|
||||
@Comment("key=房间ID,value=用户ID列表")
|
||||
private final Map<Integer, List<Integer>> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Integer, Object> {
|
||||
|
||||
protected static final AtomicInteger idcreator = new AtomicInteger(10000);
|
||||
|
||||
//@Resource标记的Field只能被修饰为public或protected
|
||||
@Resource
|
||||
protected ChatService service;
|
||||
|
||||
@Override
|
||||
protected CompletableFuture<String> onOpen(final HttpRequest request) {
|
||||
//随机创建一个sessionid
|
||||
return CompletableFuture.completedFuture(request.getSessionid(true));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CompletableFuture<Integer> createUserid() {
|
||||
return CompletableFuture.completedFuture(service.createUserid());
|
||||
|
||||
Reference in New Issue
Block a user