diff --git a/.gitmodules b/.gitmodules index e0ae5901..bdeff238 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,7 @@ [submodule "JisolGameCocos/extensions/ngame"] path = JisolGameCocos/extensions/ngame url = https://gitee.com/jisol/jngame-pro-cocos +[submodule "JisolGameServer/JNGame"] + path = JisolGameServer/JNGame + url = https://gitee.com/jisol/jngame-pro-server + branch = master diff --git a/JisolGameServer/JNGame b/JisolGameServer/JNGame new file mode 160000 index 00000000..bce1ad35 --- /dev/null +++ b/JisolGameServer/JNGame @@ -0,0 +1 @@ +Subproject commit bce1ad3522fb8ed1497eee9e01bba38d53e97279 diff --git a/JisolGameServer/Main/pom.xml b/JisolGameServer/Main/pom.xml new file mode 100644 index 00000000..1cfaadf0 --- /dev/null +++ b/JisolGameServer/Main/pom.xml @@ -0,0 +1,49 @@ + + + + JisolGameServer + org.example + 1.0-SNAPSHOT + + 4.0.0 + + Main + + + 8 + 8 + + + + + cn.jisol + JNGame + 2.0-SNAPSHOT + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + cn.jisol.game.JGameApplication + ZIP + + + + + + repackage + + + + + + + + \ No newline at end of file diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/JGameApplication.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/JGameApplication.java new file mode 100644 index 00000000..1f6f756f --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/JGameApplication.java @@ -0,0 +1,12 @@ +package cn.jisol.game; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ApplicationContext; + +@SpringBootApplication +public class JGameApplication { + public static void main(String[] args) { + ApplicationContext applicationContext = SpringApplication.run(JGameApplication.class); + } +} 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 new file mode 100644 index 00000000..b52857f5 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/config/CorsConfig.java @@ -0,0 +1,17 @@ +package cn.jisol.game.config; +import org.springframework.context.annotation.Configuration; +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("*"); + } +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/DemoController.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/DemoController.java new file mode 100644 index 00000000..80f80ac6 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/controller/DemoController.java @@ -0,0 +1,53 @@ +package cn.jisol.game.controller; + + +import cn.jisol.ngame.actions.SystemAction; +import cn.jisol.ngame.proto.JNSyncMessage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; +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(value = "JNGameDemo - API", tags = {"WorldCard - API"}) +@RestController +@RequestMapping() +@ResponseBody +public class DemoController { + + @ApiImplicitParams({ + @ApiImplicitParam(name="start",value="帧开始"), + @ApiImplicitParam(name="end",value="帧结束") + }) + @ApiOperation(value = "获取帧同步数据") + @GetMapping("/sync/frame") + public ResponseEntity getSyncFrame(Integer start, Integer end){ + + HttpHeaders headers = new HttpHeaders(); + headers.set("Content-Type", "application/json"); + + if(Objects.isNull(SystemAction.frame)) + return ResponseEntity.ok().headers(headers).body(new byte[0]); + + JNSyncMessage.JNFrameInfos infos = SystemAction.frame.vGetFrame(start, end); + return ResponseEntity.ok().headers(headers).body(infos.toByteArray()); + } + + @ApiImplicitParams({ + @ApiImplicitParam(name="start",value="帧开始"), + @ApiImplicitParam(name="end",value="帧结束") + }) + @ApiOperation(value = "获取帧同步数据") + @GetMapping("/sync/hello") + public String getSyncHello(Integer start, Integer end){ + return "HelloWorld"; + } + +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/listener/InitNGameListener.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/listener/InitNGameListener.java new file mode 100644 index 00000000..ba9b788e --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/listener/InitNGameListener.java @@ -0,0 +1,15 @@ +package cn.jisol.game.listener; + +import cn.hutool.core.util.ClassUtil; +import cn.jisol.ngame.listener.InitNGameRPCListener; +import org.springframework.stereotype.Component; + +import java.util.Set; + +@Component +public class InitNGameListener extends InitNGameRPCListener { + @Override + public Set> getScanPackage() { + return ClassUtil.scanPackage("cn.jisol"); + } +} diff --git a/JisolGameServer/Main/src/main/java/cn/jisol/game/network/NSocketConfigurer.java b/JisolGameServer/Main/src/main/java/cn/jisol/game/network/NSocketConfigurer.java new file mode 100644 index 00000000..6717e22b --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/network/NSocketConfigurer.java @@ -0,0 +1,32 @@ +package cn.jisol.game.network; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; +import org.springframework.web.socket.config.annotation.StompEndpointRegistry; +import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +@Configuration +@EnableWebSocketMessageBroker +public class NSocketConfigurer implements WebSocketMessageBrokerConfigurer { + + /** + * 添加一个服务端点,来接收客户端的连接 + * @param registry + */ + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + registry.addEndpoint("/websocket").setAllowedOrigins("*"); + } + + /** + * 开启WebSocket支持 + * @return + */ + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } + +} 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 new file mode 100644 index 00000000..185cb626 --- /dev/null +++ b/JisolGameServer/Main/src/main/java/cn/jisol/game/network/WebSocket.java @@ -0,0 +1,41 @@ +package cn.jisol.game.network; + +import cn.jisol.ngame.client.NClient; +import cn.jisol.ngame.network.JNetwork; +import org.springframework.stereotype.Controller; + +import javax.websocket.OnClose; +import javax.websocket.OnMessage; +import javax.websocket.OnOpen; +import javax.websocket.Session; +import javax.websocket.server.ServerEndpoint; +import java.io.InputStream; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +@ServerEndpoint( + value = "/websocket" +) +@Controller +public class WebSocket { + + public static final Map CLIENTS = new ConcurrentHashMap<>(); + + + @OnOpen + public void onOpen(Session session){ + CLIENTS.put(session.getId(),new NClient(session)); + System.out.printf("[WebSocket] %s 连接成功.\n",session.getId()); + } + + @OnMessage + public void onMessage(Session session, InputStream inputStream){ + JNetwork.onMessage(inputStream,CLIENTS.get(session.getId()),CLIENTS); + } + + @OnClose + public void onClose(Session session){ + CLIENTS.remove(session.getId()); + } + +} diff --git a/JisolGameServer/pom.xml b/JisolGameServer/pom.xml index 00136ddd..82b3947c 100644 --- a/JisolGameServer/pom.xml +++ b/JisolGameServer/pom.xml @@ -7,7 +7,19 @@ org.example JisolGameServer 1.0-SNAPSHOT - jar + + + org.springframework.boot + spring-boot-starter-parent + 2.3.5.RELEASE + + + + + Main + + pom + 8 @@ -16,30 +28,6 @@ - - cn.jisol - JNGame - 2.0-SNAPSHOT - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - - cn.jisol.game.JGameApplication - - - - jar-with-dependencies - - - - - - \ No newline at end of file diff --git a/src.rar b/src.rar deleted file mode 100644 index 32828fc1..00000000 Binary files a/src.rar and /dev/null differ