This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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=用户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);
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
Reference in New Issue
Block a user