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

@@ -14,6 +14,8 @@ import org.redkale.convert.json.JsonConvert;
public class ChatMessage {
public int fromuserid;
public int touserid;
public String fromusername;

View File

@@ -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=用户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);
@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;
}
}

View File

@@ -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());