From ebf99de47aff5609adb7b208ee80a3c3db3d452d Mon Sep 17 00:00:00 2001 From: "DESKTOP-5RP3AKU\\Jisol" <2858626794@qq.com> Date: Thu, 9 Nov 2023 04:22:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DataTables/Datas/~$__tables__.xlsx | Bin 0 -> 165 bytes DataTables/Datas/战斗/地图.xlsx | Bin 9963 -> 9766 bytes DataTables/Datas/战斗/角色/角色战斗素材.xlsx | Bin 10119 -> 9978 bytes DataTables/Datas/战斗/角色/角色技能.xlsx | Bin 9895 -> 9740 bytes DataTables/Datas/战斗/角色/角色攻击.xlsx | Bin 9695 -> 9555 bytes DataTables/Datas/战斗/角色/角色表.xlsx | Bin 10173 -> 9915 bytes JisolGameCocos/assets/battle.meta | 3 +- JisolGameCocos/assets/resources.meta | 2 +- .../resources/prefab/ui/Home/HomeView.prefab | 574 +++++++++++++++++- .../prefab/ui/System/LoginView.prefab | 2 +- JisolGameCocos/assets/script/App.ts | 22 +- JisolGameCocos/assets/script/Main.ts | 2 +- JisolGameCocos/assets/script/consts/API.ts | 10 +- .../assets/script/ui/Home/HomeView.ts | 5 + JisolGameCocos/extensions/ngame | 2 +- .../settings/v2/packages/builder.json | 78 ++- .../settings/v2/packages/information.json | 2 +- JisolGameServer/JNGame | 2 +- .../java/cn/jisol/game/config/CorsConfig.java | 25 +- .../java/cn/jisol/game/config/WebConfig.java | 30 + .../cn/jisol/game/controller/HttpCode.java | 9 + .../controller/argsresolver/CurrentUser.java | 10 + .../UserMethodArgumentResolver.java | 41 ++ .../controller/exception/ExceptionEnum.java | 8 + .../exception/HTTPExceptionHandler.java | 27 + .../controller/exception/TokenException.java | 4 + .../controller/game/PlayerController.java | 45 ++ .../main/java/cn/jisol/game/data/Cache.java | 1 + .../cn/jisol/game/entity/game/Player.java | 18 + .../cn/jisol/game/entity/game/PlayerPet.java | 20 + .../game/interceptor/LoginInterceptor.java | 30 + .../cn/jisol/game/mapper/PlayerMapper.java | 10 + .../cn/jisol/game/service/PlayerService.java | 9 + .../game/service/impl/PlayerServiceImpl.java | 15 + 34 files changed, 974 insertions(+), 32 deletions(-) create mode 100644 DataTables/Datas/~$__tables__.xlsx create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/config/WebConfig.java create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/controller/HttpCode.java create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/controller/argsresolver/CurrentUser.java create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/controller/argsresolver/UserMethodArgumentResolver.java create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/ExceptionEnum.java create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/HTTPExceptionHandler.java create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/TokenException.java create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/PlayerController.java create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/entity/game/Player.java create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/entity/game/PlayerPet.java create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/interceptor/LoginInterceptor.java create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/mapper/PlayerMapper.java create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/service/PlayerService.java create mode 100644 JisolGameServer/Main/src/main/java/cn/jisol/game/service/impl/PlayerServiceImpl.java diff --git a/DataTables/Datas/~$__tables__.xlsx b/DataTables/Datas/~$__tables__.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..1002ebeb5650728cfaf2999d315db0caf55525eb GIT binary patch literal 165 fcmZSe$}G;$Q6LqtGI%j$G88l9GvqKR&>R8)hpG@w literal 0 HcmV?d00001 diff --git a/DataTables/Datas/战斗/地图.xlsx b/DataTables/Datas/战斗/地图.xlsx index 59c198a65bd1a6fba9b8e864c051e700c0b1aa52..58148355d3ad16ae813d5fbaa44f8ee4f8c44e95 100644 GIT binary patch delta 2330 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 sB_SK+>7l$lz^=sKPGW8@jjmE?J; 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 a000000096X00021lU64y2Hhe60001AnM!5= delta 2508 zcmai0c{tRI0-YI*Yo9P~cWi^P6W5ZRWZxo7Vq_WnzROk>o-}~NQ@BDSXbG~!_I)9uKyKMWmA~0JSH35AIcm!6!&c}sK z&LmL$WZ79{@Al-UuG|er6bALwL{h9GpJ!8R46}m?3%q3CFU;+SUWWYk-DdwZNI&l; zFJPJuOF|~etMy%)`5LqJpde5QNZ+iz&ALyjvPw?ok2Onb^m$^#wjAKCZ&8>PQ(Sew z>nNqOAzPj|}-t!mYkT$W;^=I;7oK?(bC z?72=&Ba~LgCvr^IoE*x;NaXlKl+|ca`K&6jnQEx(Md%VHuTi`(8Z-_a*qFwy0N<@n zy5Ud0Pg)&NmQFCwWU`G38wfPR4+5P90TVI^Y;oze*d|@UEb8>+F(3CgG%I>VcfmmL z@Q~2W_@0Ns*_vs?Lcbk<4U|6P$zf|0@iBVyHO3#0V&%nRUvOlZGhP!`W?OH}zf5W?hvxc?pKOVjlnt_Dnen}s+Iv!`&T73JQKOc{PR&>PZ+>m{8`V{jkeqiHFYk zJ4uQl*6_g`k;eG_N6BEY5H1*JrjM35X{tR8q`q0ttx>i4;x~%+;YTZUp2+dxGA6V) z+O`@b+@kXb@N-@twQGk4OmlOX1tVBx2u9@Q+r9YEiYA$E@E|_ninB3c(Hy_|ai@ z$HYjn(#(AsH}Q_0_$m3)iV~@TtnqY@nbtEF81pi7k<_H;4L>MQJI`-Q%J>els&tJeOQv*R8Yf`wnZKA+uE zW>}Ot3U*V#wrgPexp_PM!m%@s)uwZj^o*V9Sm(e54;!-*mQdBDabO7Gtr$RZmi<=+GdE97IT7 z+9FAq!kWlMWLaYozx9A5OHt1+>GFtio@}qyAYdIX*Z#y+XI{jium$$^T1Wjp4Z`Mm z9@*^(k}rjWCYT7-XZHlDq`8uQry&wq%0ZE7*GVZ97TTF3)>LSJi(e=KQRLPHmHvp{ zvuO-|FSocD5$`F!0AFnyZdPP8aWZYlG#he5#$CvRG+B}p=o>o;`4_ur55u%yLY1a2VE~8aAtKX+HBLwt+O8)Lx zsH$J(OVF#WTe{ZL%7RD4XW|XkiO@TYdk4a(Ws`_^$l1ymsd!oeL56lV5u(pl3C2#R z{YtW-z@xZ{&^3@O2~82Di5-DbSq;ID(^?e!99?v0Ue0^DmIuVd!=jT3WSx&W%ZkYT!FmBqtv zOSL8*GF)G^uI>pP$CFol-hVE^5+(}Nax$u{d(XQJREx4ib^32CN_SV%`d`c{=sEJA zD7&_0_+1&bqzXLFD_9P`$9}d(&D$|peN=I|CjwtP)M^vri?b2gHE{BKNNwV9Ri-}ugHvIIfZObLEVL!#+9pAB1 z=V^L=ys}#RmQkn55Pn_;Md9OSFW%Na~?zF0>uht3&J zemLiSD+mb0!v=gu$YTu^PU<9GZyn;mu}11|bJQUw>5 zHSSd=(|BrfJr)u;F1+fzu^0#q)oQM~;>2Hz`900;b-m;Uc}$OfbbVqUIZ78f=Tah| zv@afL`@rF`G!|)_dE2a=mw%I~vZnj1QO|{|+y{i0BM&RAK6H8JvoAiv16*tcBht=0 zrsqnNrQ$jrg4B(;g?vOM4mhTSv4XSt{mn4CSMq5>O81J<>WRGUjU)|?c1g8lc|Ids z3&Q+t%5hxzd#Cd`sdTsJy5)J5uYy#CO%-d)=4Z#=l)MV>GBJ%%@m-Uf7S(1syxhUt zUUzu)RR73HB>dCPKO&Pvc3@M4z!i<|F_g2{<4or2x?t2dt&kAfDpDO{v2FTqHQk8O#EN zpe}&XKr>1el7$3TQJN4u63|DA0IJe3k^e3d1QG=O1uzKtZxSL5FcCt4vhXIw+IuHp?U`bjNV#x`>WQ@R@fP;)aI2E`rBZ>H*Gx2Bc?_>ioE~5wyk@{2l E7k@IWqyPW_ diff --git a/DataTables/Datas/战斗/角色/角色技能.xlsx b/DataTables/Datas/战斗/角色/角色技能.xlsx index b7c797f2657b7d2bda37916a2ccd133edfb1e7ac..4a887ecbd1628dfed33aa12dcaff34dbc08f41e6 100644 GIT binary patch delta 2279 zcmVJ-Pi!|zDOQ?F6m_B!51pmm4QoB)nHr!Ht-~EnW%?o;atrywqgN_f7{46 zv=3*MQQY~Znd6#^dp-x;BczWNI4-&4xCMswj)*o$DR#*E!IT|93JfJE(9U8SQT)?& zV3hsyK$q+_RpC~(f73>HpDo2Y+_jgs*cF?miJG|6@ctCvPA{&yr-p@YXC(k-sT52Y z;I1;+9wA919;lPnKuGSzLv(lwF`3hA27gUS0xesb z#Xf__?8VH}jQAVTDUM9XvIb`ChlwsdjI*!!pxbR25SIpTF-e$ol99+~F#miPrg`b@ zWAi0{o6O%stmS-aQ*>oZ<U@o?DZ}E z0gh7$?m3J?_D6(UPKYq{vwz?3jeVLMK~l`3wm|mKBy91PGa9=-^Yz(8WMGwRgWJiH)<$v<=z%ZxLJ2=sw)A-G5Xc>80(O?thc; zWyfGLeZ%?5y#_P_7x1gaA>Yxu7W*G^vPE~p0i_m*6)9Yb`BZ(Jq7VGJ^>fzv$#x#$WpMi#~&@Pj6&=KFqM_0{`XQhQ^>fAXBb|SZ1F3*(9TT4a$P2Lj1}_ zkV`Gisn2WK9y>!wWq-iMbE$^7V3~8UzR#?Q`3^Y?3dLbtVK)_vw!&#D+_s|ER4m(y zepBJK6+fGbBdO?%jlzTbEi=#Y81V%06!8r49PtA25^;rig?Np)M!Z41MZ812M|?nh zM0`So`W3YWnXb|e`xtTxzh6qXRKqT;(miM{;$d4cY$_IQ#eYFl;r>;zY%4}hA6{Fb zjB+FuwRAgG=8q9i5Kj@$5YG`W5HAr|h*yZ$h-<_f#9PEW#CyaC#7D#@#Q9vXSx+}q z>i?*2sjgSIt(JF(M6K@*iCW+t61BoRBx;FwNYomal3LQmfhOK%$A~A0r-)~W=ZF`G zmxwFGE5vKWHGkp_;w|DG;yvO6;v?b{;(RW+k#smp#4$MF=SMEz;?8(bzQhlq9X17j zexLO%%Tg0qwqw=XO4+*|5~c2!QUYgF_3p5hlJq*fU|lytfwq z>nCrWb<47)@#>bwoNRu4$WrQIDJ_J#?$d2qmMx1{w=_rL@2iecB5&F9`j`4I}n zY2yRj*0d3h)7eh7?rGYF#+bSe1V{ye0HLKw3@RQX!!?Gh8DXLO(-Qgll;DVyN_QvOO7D2zi=g4iX<1a-u~f_3qN!5Dv6 zq?RxfR5-6*(==ABAP2G;w~B~F9=OzjTyAMuV^xY^iB%Bd4%RZdKCd~@CO|2=9^od) z%mc+E_Ogd^1a-bXoV*MRps^SgpExmh>TNtZ<6v$ zkWyGz8LFD8%c>G?asLM-zU$l;ghv+<5=u90>6{g#Mp4x7mt6tqSc-b zi{|?9#XqEj{!Y+uBz3{duffjx@XgQDqjyQ{)?#!FISNlH3Ax@}LKVKyl|pL+PbFH>iSpWiE?zb~3k2fa195uHuZ z>`Lpng+CcI`IoSM0kZ`iuLS{DleHp11iu{s0F#d-7LyMn8Uo`TlPe>V1$8OPKva{$ zBUAzj1Ct*E6_YI_DhFW%004MwFOv@@9FxEw1e1Ow3IPj~i6k}wGLyh0EgZ7LTZ$|K z003kJ000yK0000000031AOHXW3>uTa8WxiuB`N}P50gtJIRQkIg(WruYYCIRB|idc z9FzVfI{|`|Iwm0-kDimXU<3dFkq!U=7ytkO000000RSKX006F&b|xzZ?;!vH002Z9 BHHH8H delta 2437 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 diff --git a/DataTables/Datas/战斗/角色/角色表.xlsx b/DataTables/Datas/战斗/角色/角色表.xlsx index 52e2d4f59c91f749fde2b32d6ee1918b52ec6fe4..ddd31373b853d6e26ceb0008ce628a26269051a2 100644 GIT binary patch delta 5213 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 l1EgU#&A5s$zl0R{sG7G!JYsB delta 5471 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 { } } +export interface NewsContext{ + state:number, + msg:string, + data:any, +} export interface UserVO{ userId:number, //玩家Id userName:string, //玩家名称 @@ -25,8 +30,9 @@ export interface UserLoginVO{ export const API = { - UserRegister : async () => RData(await http.post(`/user/register`)) as UserVO, - UserLogin : async (account:string,password:string) => RData(await http.post(`/user/login`,{userId:account,userPass:password})) as UserLoginVO, + UserRegister : async () => RData(await http.post(`/user/register`)) as UserVO, //玩家注册 + UserLogin : async (account:string,password:string) => RData(await http.post(`/user/login`,{userId:account,userPass:password})) as UserLoginVO, //玩家登录 + GetPlayerInfo : async () => (await http.get(`/game/player/info`)).data as NewsContext, //获取玩家信息 } diff --git a/JisolGameCocos/assets/script/ui/Home/HomeView.ts b/JisolGameCocos/assets/script/ui/Home/HomeView.ts index fe3fda08..0faa7c03 100644 --- a/JisolGameCocos/assets/script/ui/Home/HomeView.ts +++ b/JisolGameCocos/assets/script/ui/Home/HomeView.ts @@ -6,6 +6,7 @@ import { director } from 'cc'; import { WorldCanvas } from '../../WorldCanvas'; import { StorageData, StorageEnum } from '../../consts/GData'; import { GUI } from '../UIConfig'; +import { API } from '../../consts/API'; const { ccclass, property } = _decorator; @ccclass('HomeView') @@ -14,6 +15,10 @@ export class HomeView extends JNGLayerBase { @property(Label) frameText:Label; + async onLoad(){ + app.layer.Open(GUI.Tips,{text:(await API.GetPlayerInfo()).msg}); + } + update(){ this.frameText.string = `当前帧数: ${app.sync.frame}`; } diff --git a/JisolGameCocos/extensions/ngame b/JisolGameCocos/extensions/ngame index 20392fca..eed71d58 160000 --- a/JisolGameCocos/extensions/ngame +++ b/JisolGameCocos/extensions/ngame @@ -1 +1 @@ -Subproject commit 20392fca1c6b8b903d2c517fbab15cde450cc9f9 +Subproject commit eed71d5820b3a313f6daf848e4d91abdcb55b367 diff --git a/JisolGameCocos/settings/v2/packages/builder.json b/JisolGameCocos/settings/v2/packages/builder.json index effd6aff..cd07ece9 100644 --- a/JisolGameCocos/settings/v2/packages/builder.json +++ b/JisolGameCocos/settings/v2/packages/builder.json @@ -1,6 +1,82 @@ { "__version__": "1.3.7", "bundleConfig": { - "custom": {} + "custom": { + "514cB4o1lDLr4YHgRwsEVt": { + "displayName": "远程", + "configs": { + "native": { + "preferredOptions": { + "isRemote": true, + "compressionType": "merge_dep" + } + }, + "web": { + "preferredOptions": { + "isRemote": true, + "compressionType": "merge_dep" + }, + "fallbackOptions": { + "compressionType": "merge_dep" + } + }, + "miniGame": { + "fallbackOptions": { + "isRemote": true, + "compressionType": "merge_dep" + }, + "configMode": "fallback", + "overwriteSettings": { + "alipay-mini-game": { + "isRemote": true, + "compressionType": "merge_dep" + }, + "bytedance-mini-game": { + "isRemote": true, + "compressionType": "merge_dep" + }, + "fb-instant-games": { + "isRemote": true, + "compressionType": "merge_dep" + }, + "huawei-quick-game": { + "isRemote": true, + "compressionType": "merge_dep" + }, + "oppo-mini-game": { + "isRemote": true, + "compressionType": "merge_dep" + }, + "taobao-creative-app": { + "isRemote": true, + "compressionType": "merge_dep" + }, + "taobao-mini-game": { + "isRemote": true, + "compressionType": "merge_dep" + }, + "vivo-mini-game": { + "isRemote": true, + "compressionType": "merge_dep" + }, + "wechatgame": { + "isRemote": true, + "compressionType": "merge_dep" + }, + "xiaomi-quick-game": { + "isRemote": true, + "compressionType": "merge_dep" + } + } + } + } + } + } + }, + "splash-setting": { + "logo": { + "type": "default" + }, + "totalTime": 500 } } diff --git a/JisolGameCocos/settings/v2/packages/information.json b/JisolGameCocos/settings/v2/packages/information.json index 1f29b4f0..2031e5f9 100644 --- a/JisolGameCocos/settings/v2/packages/information.json +++ b/JisolGameCocos/settings/v2/packages/information.json @@ -6,7 +6,7 @@ "label": "customSplash", "enable": true, "customSplash": { - "complete": false, + "complete": true, "form": "https://creator-api.cocos.com/api/form/show?sid=1b8a08a3e3a81e84a39b39c967858a15" } }, diff --git a/JisolGameServer/JNGame b/JisolGameServer/JNGame index b2141048..f3a45363 160000 --- a/JisolGameServer/JNGame +++ b/JisolGameServer/JNGame @@ -1 +1 @@ -Subproject commit b2141048e531cd2d44bea27887b570d0a2f300cd +Subproject commit f3a45363cab5962aed80e50d2f01827b3e7b9704 diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/config/CorsConfig.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/config/CorsConfig.java index b52857f5..9819d1fd 100644 --- a/JisolGameServer/Main/src/main/java/cn/jisol/game/config/CorsConfig.java +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/config/CorsConfig.java @@ -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); } } diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/config/WebConfig.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/config/WebConfig.java new file mode 100644 index 00000000..38982978 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/config/WebConfig.java @@ -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 resolvers) { + WebMvcConfigurer.super.addArgumentResolvers(resolvers); + resolvers.add(new UserMethodArgumentResolver()); + } +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/HttpCode.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/HttpCode.java new file mode 100644 index 00000000..38fe7316 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/HttpCode.java @@ -0,0 +1,9 @@ +package cn.jisol.game.controller; + +public interface HttpCode { + + //没有创建用户 + int NOT_CREATE_PLAYER_INFO = 2001; + + +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/argsresolver/CurrentUser.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/argsresolver/CurrentUser.java new file mode 100644 index 00000000..3e9176df --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/argsresolver/CurrentUser.java @@ -0,0 +1,10 @@ +package cn.jisol.game.controller.argsresolver; + +import java.lang.annotation.*; + +@Target({ElementType.PARAMETER}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface CurrentUser { + +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/argsresolver/UserMethodArgumentResolver.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/argsresolver/UserMethodArgumentResolver.java new file mode 100644 index 00000000..a9a27b74 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/argsresolver/UserMethodArgumentResolver.java @@ -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; + + } + +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/ExceptionEnum.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/ExceptionEnum.java new file mode 100644 index 00000000..938d8815 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/ExceptionEnum.java @@ -0,0 +1,8 @@ +package cn.jisol.game.controller.exception; + +public interface ExceptionEnum { + + //Token 失效 + Integer LOGIN_TOKEN = 1001; + +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/HTTPExceptionHandler.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/HTTPExceptionHandler.java new file mode 100644 index 00000000..39155bab --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/HTTPExceptionHandler.java @@ -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 loginExceptionHandler(TokenException e){ + return NewsContext.onMessage("Token 失效",null,LOGIN_TOKEN); + } + + //全局异常 + @ExceptionHandler(value = Exception.class) + @ResponseBody + public NewsContext exceptionHandler(Exception e){ + e.printStackTrace(); + return NewsContext.onFail("异常错误:"+e.getMessage()); + } +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/TokenException.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/TokenException.java new file mode 100644 index 00000000..959f2dd5 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/exception/TokenException.java @@ -0,0 +1,4 @@ +package cn.jisol.game.controller.exception; + +public class TokenException extends Exception{ +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/PlayerController.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/PlayerController.java new file mode 100644 index 00000000..07d2f6af --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/game/PlayerController.java @@ -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 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); + } + + } + +} 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 356d784f..fe5c9231 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 @@ -10,6 +10,7 @@ import java.util.Map; */ public class Cache { + public static String KEY_TOKEN = "Token"; public static Map TOKEN = new HashMap<>(); } diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/game/Player.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/game/Player.java new file mode 100644 index 00000000..8e93e3f1 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/game/Player.java @@ -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; //玩家创建时间 +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/game/PlayerPet.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/game/PlayerPet.java new file mode 100644 index 00000000..d10a23d9 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/entity/game/PlayerPet.java @@ -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; //宠物等级 +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/interceptor/LoginInterceptor.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/interceptor/LoginInterceptor.java new file mode 100644 index 00000000..c5078a16 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/interceptor/LoginInterceptor.java @@ -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; + } +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/mapper/PlayerMapper.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/mapper/PlayerMapper.java new file mode 100644 index 00000000..fc4cc11d --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/mapper/PlayerMapper.java @@ -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 { + +} \ No newline at end of file diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/service/PlayerService.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/service/PlayerService.java new file mode 100644 index 00000000..87ff3c15 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/service/PlayerService.java @@ -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 { + +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/service/impl/PlayerServiceImpl.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/service/impl/PlayerServiceImpl.java new file mode 100644 index 00000000..a8802863 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/service/impl/PlayerServiceImpl.java @@ -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 implements PlayerService { + +}