This commit is contained in:
PC-20230316NUNE\Administrator
2023-11-07 18:56:52 +08:00
parent f9b5038f1c
commit 0b9cf0ea9b
12 changed files with 117 additions and 29 deletions

View File

@@ -0,0 +1,7 @@
package cn.jisol.game.actions;
public interface GActionEnum {
int TOKEN_EXPIRED = 1001; //Token过期
}

View File

@@ -1,6 +1,9 @@
package cn.jisol.game.controller;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import cn.jisol.game.data.Cache;
import cn.jisol.game.dto.LoginDTO;
import cn.jisol.game.entity.User;
import cn.jisol.game.service.UserService;
import cn.jisol.game.service.impl.UserServiceImpl;
@@ -41,7 +44,7 @@ public class UserController {
@ApiImplicitParams({})
@ApiOperation(value = "登录账号")
@PostMapping("/login")
public NewsContext<User> login(@RequestBody User user){
public NewsContext<LoginDTO> login(@RequestBody User user){
if(Objects.isNull(user.getUserId()) || Objects.isNull(user.getUserPass())){
return NewsContext.onFail("登录失败");
}
@@ -49,7 +52,11 @@ public class UserController {
query.eq(User::getUserId,user.getUserId());
query.eq(User::getUserPass,user.getUserPass());
if(Objects.nonNull(user = userService.getOne(query))){
return NewsContext.onSuccess("登录成功",user);
user.setUserPass("");
//生成Token
String token = IdUtil.simpleUUID();
Cache.TOKEN.put(token,user);
return NewsContext.onSuccess("登录成功", LoginDTO.builder().user(user).token(token).build());
}else{
return NewsContext.onFail("登录失败");
}

View File

@@ -1,5 +1,7 @@
package cn.jisol.game.data;
import cn.jisol.game.entity.User;
import java.util.HashMap;
import java.util.Map;
@@ -8,21 +10,6 @@ import java.util.Map;
*/
public class Cache {
public static Map<String,Object> DATA = new HashMap<>();
//存储数据
public void addData(String key,Object data){
DATA.put(key,data);
}
//读取数据
public Object getData(String key){
return DATA.get(key);
}
//删除数据
public void delData(String key){
DATA.remove(key);
}
public static Map<String, User> TOKEN = new HashMap<>();
}

View File

@@ -0,0 +1,14 @@
package cn.jisol.game.dto;
import cn.jisol.game.entity.User;
import io.swagger.annotations.ApiModel;
import lombok.Builder;
import lombok.Data;
@ApiModel(value = "登录返回")
@Builder
@Data
public class LoginDTO {
User user; //玩家信息
String token; //登录token
}

View File

@@ -1,5 +1,9 @@
package cn.jisol.game.network;
import cn.jisol.game.actions.GActionEnum;
import cn.jisol.game.data.Cache;
import cn.jisol.game.network.client.GClient;
import cn.jisol.ngame.actions.core.NActionEnum;
import cn.jisol.ngame.client.NClient;
import cn.jisol.ngame.network.JNetwork;
import org.springframework.stereotype.Controller;
@@ -11,21 +15,32 @@ import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.InputStream;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
@ServerEndpoint(
value = "/websocket"
value = "/websocket/{token}"
)
@Controller
public class WebSocket {
public static final Map<String, NClient> CLIENTS = new ConcurrentHashMap<>();
@OnOpen
public void onOpen(Session session){
CLIENTS.put(session.getId(),new NClient(session));
String token = session.getPathParameters().get("token");
NClient client = new GClient(session);
if(Objects.isNull(Cache.TOKEN.get(token))){
//发送Token过期请求
client.invoke(GActionEnum.TOKEN_EXPIRED);
//关闭连接
client.Close();
return;
}
CLIENTS.put(session.getId(),client);
System.out.printf("[WebSocket] %s 连接成功.\n",session.getId());
}
@OnMessage

View File

@@ -0,0 +1,35 @@
package cn.jisol.game.network.client;
import cn.jisol.ngame.client.QueueNClient;
import javax.websocket.EncodeException;
import javax.websocket.Session;
import java.io.IOException;
public class GClient extends QueueNClient {
public Session session;
public GClient(Session session){
super(session.getId());
this.session = session;
}
@Override
protected void onMessage(byte[] bytes) {
if (session.isOpen()){
try {
session.getBasicRemote().sendObject(bytes);
} catch (Exception ignored) {}
}
}
@Override
protected void onClose() {
if (session.isOpen()){
try {
session.close();
} catch (IOException ignored) {}
}
}
}