mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-09-26 18:26:23 +00:00
update
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
package cn.jisol.game.actions;
|
||||
|
||||
public interface GActionEnum {
|
||||
|
||||
int TOKEN_EXPIRED = 1001; //Token过期
|
||||
|
||||
}
|
@@ -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("登录失败");
|
||||
}
|
||||
|
@@ -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<>();
|
||||
|
||||
}
|
||||
|
@@ -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
|
||||
}
|
@@ -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
|
||||
|
@@ -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) {}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user