mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-09-26 18:26:23 +00:00
提交
This commit is contained in:
Submodule JisolGameServer/JNGame updated: b2141048e5...f3a45363ca
@@ -1,17 +1,24 @@
|
||||
package cn.jisol.game.config;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.cors.CorsConfiguration;
|
||||
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
|
||||
import org.springframework.web.filter.CorsFilter;
|
||||
import org.springframework.web.servlet.config.annotation.CorsRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
@Configuration
|
||||
class CorsConfig implements WebMvcConfigurer {
|
||||
@Override
|
||||
public void addCorsMappings(CorsRegistry registry) {
|
||||
registry.addMapping("/**")
|
||||
.allowedOrigins("*")
|
||||
.allowedMethods("GET","HEAD","POST","PUT","DELETE","OPTIONS")
|
||||
.allowCredentials(true)
|
||||
.maxAge(3600)
|
||||
.allowedHeaders("*");
|
||||
class CorsConfig {
|
||||
@Bean
|
||||
public CorsFilter corsFilter() {
|
||||
CorsConfiguration corsConfiguration = new CorsConfiguration();
|
||||
corsConfiguration.addAllowedOrigin("*");
|
||||
corsConfiguration.addAllowedHeader("*");
|
||||
corsConfiguration.addAllowedMethod("*");
|
||||
corsConfiguration.setAllowCredentials(true);
|
||||
|
||||
UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
|
||||
urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
|
||||
return new CorsFilter(urlBasedCorsConfigurationSource);
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,30 @@
|
||||
package cn.jisol.game.config;
|
||||
|
||||
import cn.jisol.game.controller.argsresolver.UserMethodArgumentResolver;
|
||||
import cn.jisol.game.interceptor.LoginInterceptor;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Configuration
|
||||
public class WebConfig implements WebMvcConfigurer {
|
||||
|
||||
/**
|
||||
* 添加登录拦截器
|
||||
* @param registry
|
||||
*/
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
WebMvcConfigurer.super.addInterceptors(registry);
|
||||
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/game/**");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
|
||||
WebMvcConfigurer.super.addArgumentResolvers(resolvers);
|
||||
resolvers.add(new UserMethodArgumentResolver());
|
||||
}
|
||||
}
|
@@ -0,0 +1,9 @@
|
||||
package cn.jisol.game.controller;
|
||||
|
||||
public interface HttpCode {
|
||||
|
||||
//没有创建用户
|
||||
int NOT_CREATE_PLAYER_INFO = 2001;
|
||||
|
||||
|
||||
}
|
@@ -0,0 +1,10 @@
|
||||
package cn.jisol.game.controller.argsresolver;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
@Target({ElementType.PARAMETER})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface CurrentUser {
|
||||
|
||||
}
|
@@ -0,0 +1,41 @@
|
||||
package cn.jisol.game.controller.argsresolver;
|
||||
|
||||
import cn.jisol.game.controller.exception.TokenException;
|
||||
import cn.jisol.game.data.Cache;
|
||||
import cn.jisol.game.entity.User;
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.bind.support.WebDataBinderFactory;
|
||||
import org.springframework.web.context.request.NativeWebRequest;
|
||||
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
||||
import org.springframework.web.method.support.ModelAndViewContainer;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@Component
|
||||
public class UserMethodArgumentResolver implements HandlerMethodArgumentResolver {
|
||||
|
||||
@Override
|
||||
public boolean supportsParameter(MethodParameter parameter) {
|
||||
if (parameter.hasParameterAnnotation(CurrentUser.class)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
|
||||
|
||||
//获取Token
|
||||
String token = nativeWebRequest.getHeader(Cache.KEY_TOKEN);
|
||||
User user;
|
||||
if(Objects.isNull(token) || Objects.isNull(user = Cache.TOKEN.get(token))){
|
||||
//抛出Token异常
|
||||
throw new TokenException();
|
||||
}
|
||||
|
||||
return user;
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,8 @@
|
||||
package cn.jisol.game.controller.exception;
|
||||
|
||||
public interface ExceptionEnum {
|
||||
|
||||
//Token 失效
|
||||
Integer LOGIN_TOKEN = 1001;
|
||||
|
||||
}
|
@@ -0,0 +1,27 @@
|
||||
package cn.jisol.game.controller.exception;
|
||||
|
||||
import cn.jisol.ngame.util.NewsContext;
|
||||
import org.springframework.web.bind.annotation.ControllerAdvice;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
|
||||
import static cn.jisol.game.controller.exception.ExceptionEnum.LOGIN_TOKEN;
|
||||
|
||||
@ControllerAdvice
|
||||
public class HTTPExceptionHandler {
|
||||
|
||||
//登录异常
|
||||
@ExceptionHandler(value = TokenException.class)
|
||||
@ResponseBody
|
||||
public NewsContext<String> loginExceptionHandler(TokenException e){
|
||||
return NewsContext.onMessage("Token 失效",null,LOGIN_TOKEN);
|
||||
}
|
||||
|
||||
//全局异常
|
||||
@ExceptionHandler(value = Exception.class)
|
||||
@ResponseBody
|
||||
public NewsContext<String> exceptionHandler(Exception e){
|
||||
e.printStackTrace();
|
||||
return NewsContext.onFail("异常错误:"+e.getMessage());
|
||||
}
|
||||
}
|
@@ -0,0 +1,4 @@
|
||||
package cn.jisol.game.controller.exception;
|
||||
|
||||
public class TokenException extends Exception{
|
||||
}
|
@@ -0,0 +1,45 @@
|
||||
package cn.jisol.game.controller.game;
|
||||
|
||||
import cn.jisol.game.controller.HttpCode;
|
||||
import cn.jisol.game.controller.argsresolver.CurrentUser;
|
||||
import cn.jisol.game.entity.User;
|
||||
import cn.jisol.game.entity.game.Player;
|
||||
import cn.jisol.game.service.PlayerService;
|
||||
import cn.jisol.game.service.impl.PlayerServiceImpl;
|
||||
import cn.jisol.ngame.util.NewsContext;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 新手API
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/game/player")
|
||||
@ResponseBody
|
||||
public class PlayerController {
|
||||
|
||||
@Autowired
|
||||
PlayerServiceImpl playerService;
|
||||
|
||||
//获取玩家信息
|
||||
@GetMapping("/info")
|
||||
public NewsContext<Player> getPlayerInfo(@CurrentUser User user){
|
||||
|
||||
Player info = playerService.getOne(Wrappers.lambdaQuery(Player.class).eq(Player::getUserId,user.getUserId()));
|
||||
|
||||
if (Objects.isNull(info)){
|
||||
//玩家没有进入过游戏 前往 新手引导
|
||||
return NewsContext.onMessage("前往新手引导",null, HttpCode.NOT_CREATE_PLAYER_INFO);
|
||||
}else{
|
||||
return NewsContext.onSuccess("获取成功",info);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -10,6 +10,7 @@ import java.util.Map;
|
||||
*/
|
||||
public class Cache {
|
||||
|
||||
public static String KEY_TOKEN = "Token";
|
||||
public static Map<String, User> TOKEN = new HashMap<>();
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,18 @@
|
||||
package cn.jisol.game.entity.game;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@TableName("`player`")
|
||||
public class Player {
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long playerId; //游戏玩家Id
|
||||
private String userId; //玩家Id
|
||||
private String playerName; //游戏玩家名称
|
||||
private Long playerCreateTime; //玩家创建时间
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
package cn.jisol.game.entity.game;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 玩家宠物
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@TableName("`player_pet`")
|
||||
public class PlayerPet {
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long petId; //宠物唯一Id
|
||||
private String petTbId; //宠物配置表Id
|
||||
private String petGrade; //宠物等级
|
||||
}
|
@@ -0,0 +1,30 @@
|
||||
package cn.jisol.game.interceptor;
|
||||
|
||||
import cn.jisol.game.controller.exception.TokenException;
|
||||
import cn.jisol.game.data.Cache;
|
||||
import cn.jisol.game.entity.User;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 游戏登录拦截器
|
||||
*/
|
||||
@Component
|
||||
public class LoginInterceptor implements HandlerInterceptor {
|
||||
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||
//获取Token
|
||||
String token = request.getHeader(Cache.KEY_TOKEN);
|
||||
if(Objects.isNull(token) || Objects.isNull(Cache.TOKEN.get(token))) {
|
||||
//抛出Token异常
|
||||
throw new TokenException();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
@@ -0,0 +1,10 @@
|
||||
package cn.jisol.game.mapper;
|
||||
|
||||
import cn.jisol.game.entity.game.Player;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public interface PlayerMapper extends BaseMapper<Player> {
|
||||
|
||||
}
|
@@ -0,0 +1,9 @@
|
||||
package cn.jisol.game.service;
|
||||
|
||||
import cn.jisol.game.entity.User;
|
||||
import cn.jisol.game.entity.game.Player;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
public interface PlayerService extends IService<Player> {
|
||||
|
||||
}
|
@@ -0,0 +1,15 @@
|
||||
package cn.jisol.game.service.impl;
|
||||
|
||||
import cn.jisol.game.entity.User;
|
||||
import cn.jisol.game.entity.game.Player;
|
||||
import cn.jisol.game.mapper.PlayerMapper;
|
||||
import cn.jisol.game.mapper.UserMapper;
|
||||
import cn.jisol.game.service.PlayerService;
|
||||
import cn.jisol.game.service.UserService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class PlayerServiceImpl extends ServiceImpl<PlayerMapper, Player> implements PlayerService {
|
||||
|
||||
}
|
Reference in New Issue
Block a user