diff --git a/JisolGameCocos/assets/script/App.ts b/JisolGameCocos/assets/script/App.ts index 26dd4400..545de8d5 100644 --- a/JisolGameCocos/assets/script/App.ts +++ b/JisolGameCocos/assets/script/App.ts @@ -21,8 +21,9 @@ import { SpriteFrame } from "cc"; import Loading from "../../extensions/ngame/assets/ngame/util/Loading"; import { TB, Tables } from "../resources/config/data/schema"; import { JsonAsset } from "cc"; +import { GAction } from "./GActionEnum"; -let IP = "kyu.jisol.cn"; +let IP = "localhost"; //重写UI class JNGLayer extends JNLayer{ @@ -32,8 +33,16 @@ class JNGLayer extends JNLayer{ //重写Socket class JNGSocket extends JNSocket{ + async onInit() { + this.on(GAction.TOKEN_EXPIRED,this.onTokenExpired.bind(this)); + await super.onInit(); + } public url() { - return `ws://${IP}:8080/websocket`; + return `ws://${IP}:8080/websocket/b113a866e5664f46b386c12c985d394a`; + } + //Token失效 + onTokenExpired(){ + console.log("onTokenExpired"); } } diff --git a/JisolGameCocos/assets/script/GActionEnum.ts b/JisolGameCocos/assets/script/GActionEnum.ts new file mode 100644 index 00000000..05e2180e --- /dev/null +++ b/JisolGameCocos/assets/script/GActionEnum.ts @@ -0,0 +1,5 @@ +export enum GAction { + + TOKEN_EXPIRED = 1001, //Token过期 + +} \ No newline at end of file diff --git a/JisolGameCocos/assets/script/GActionEnum.ts.meta b/JisolGameCocos/assets/script/GActionEnum.ts.meta new file mode 100644 index 00000000..6c211ca7 --- /dev/null +++ b/JisolGameCocos/assets/script/GActionEnum.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "b0d5a426-cf84-4bbb-b06f-533234076520", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/JisolGameCocos/assets/script/Main.ts b/JisolGameCocos/assets/script/Main.ts index 92fd8e1f..39614648 100644 --- a/JisolGameCocos/assets/script/Main.ts +++ b/JisolGameCocos/assets/script/Main.ts @@ -23,11 +23,11 @@ export class Main extends Component { {path:"proto/GDemo"} ]); - //发生帧同步开始 - app.socket.Send(JNSyncAction.NSyncFrameStart); + // //发生帧同步开始 + // app.socket.Send(JNSyncAction.NSyncFrameStart); - // 创建世界 - director.getScene().addChild(instantiate(this.WorldPrefab)); + // // 创建世界 + // director.getScene().addChild(instantiate(this.WorldPrefab)); } diff --git a/JisolGameCocos/extensions/ngame b/JisolGameCocos/extensions/ngame index 6349055e..661098ae 160000 --- a/JisolGameCocos/extensions/ngame +++ b/JisolGameCocos/extensions/ngame @@ -1 +1 @@ -Subproject commit 6349055e1f9362860a81a92c971d343ef9ab483a +Subproject commit 661098aefe9d7e1c6f0d3a4c587b3b15cc27abd8 diff --git a/JisolGameServer/JNGame b/JisolGameServer/JNGame index 8951e60a..a23b0bc2 160000 --- a/JisolGameServer/JNGame +++ b/JisolGameServer/JNGame @@ -1 +1 @@ -Subproject commit 8951e60a10df0ede0db4e2415f3658daa4790b33 +Subproject commit a23b0bc24282b113594d777e7db34d03379f07b6 diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/actions/GActionEnum.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/actions/GActionEnum.java new file mode 100644 index 00000000..4de8b4aa --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/actions/GActionEnum.java @@ -0,0 +1,7 @@ +package cn.jisol.game.actions; + +public interface GActionEnum { + + int TOKEN_EXPIRED = 1001; //Token过期 + +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/UserController.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/UserController.java index 447361b8..8edd0aa2 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/UserController.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/UserController.java @@ -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 login(@RequestBody User user){ + public NewsContext 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("登录失败"); } diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/data/Cache.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/data/Cache.java index 180bba10..356d784f 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/data/Cache.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/data/Cache.java @@ -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 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 TOKEN = new HashMap<>(); } diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/dto/LoginDTO.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/dto/LoginDTO.java new file mode 100644 index 00000000..567ac9d2 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/dto/LoginDTO.java @@ -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 +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/network/WebSocket.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/network/WebSocket.java index 185cb626..dc8f5c37 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/network/WebSocket.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/network/WebSocket.java @@ -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 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 diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/network/client/GClient.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/network/client/GClient.java new file mode 100644 index 00000000..714ca20e --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/network/client/GClient.java @@ -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) {} + } + } +}