From 3a345ab96682a427e029eae57f940838e3e1be4b Mon Sep 17 00:00:00 2001 From: "PC-20230316NUNE\\Administrator" <2858626794@qq.com> Date: Fri, 26 Jan 2024 18:54:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=B8=A7=E5=90=8C=E6=AD=A5DE?= =?UTF-8?q?MO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JisolGameServer/GFrameDemo/.gitignore | 38 ++++++++++++++ JisolGameServer/GFrameDemo/pom.xml | 49 +++++++++++++++++ .../jisol/ngame/frame/JNFrameApplication.java | 19 +++++++ .../frame/listener/InitNGameListener.java | 15 ++++++ .../frame/network/NSocketConfigurer.java | 32 ++++++++++++ .../jisol/ngame/frame/network/WebSocket.java | 52 +++++++++++++++++++ .../ngame/frame/network/client/GClient.java | 39 ++++++++++++++ JisolGameServer/JNGame | 2 +- JisolGameServer/pom.xml | 1 + 9 files changed, 246 insertions(+), 1 deletion(-) create mode 100644 JisolGameServer/GFrameDemo/.gitignore create mode 100644 JisolGameServer/GFrameDemo/pom.xml create mode 100644 JisolGameServer/GFrameDemo/src/main/java/cn/jisol/ngame/frame/JNFrameApplication.java create mode 100644 JisolGameServer/GFrameDemo/src/main/java/cn/jisol/ngame/frame/listener/InitNGameListener.java create mode 100644 JisolGameServer/GFrameDemo/src/main/java/cn/jisol/ngame/frame/network/NSocketConfigurer.java create mode 100644 JisolGameServer/GFrameDemo/src/main/java/cn/jisol/ngame/frame/network/WebSocket.java create mode 100644 JisolGameServer/GFrameDemo/src/main/java/cn/jisol/ngame/frame/network/client/GClient.java diff --git a/JisolGameServer/GFrameDemo/.gitignore b/JisolGameServer/GFrameDemo/.gitignore new file mode 100644 index 00000000..5ff6309b --- /dev/null +++ b/JisolGameServer/GFrameDemo/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/JisolGameServer/GFrameDemo/pom.xml b/JisolGameServer/GFrameDemo/pom.xml new file mode 100644 index 00000000..d5457d8a --- /dev/null +++ b/JisolGameServer/GFrameDemo/pom.xml @@ -0,0 +1,49 @@ + + + 4.0.0 + + org.example + JisolGameServer + 1.0-SNAPSHOT + + + cn.jisol + GFrameDemo + + + 8 + 8 + UTF-8 + + + + + cn.jisol + JNGame + 2.0-SNAPSHOT + + + com.google.code.gson + gson + + + com.baomidou + mybatis-plus-boot-starter + 3.5.2 + + + com.h2database + h2 + runtime + + + mysql + mysql-connector-java + runtime + 8.0.30 + + + + \ No newline at end of file diff --git a/JisolGameServer/GFrameDemo/src/main/java/cn/jisol/ngame/frame/JNFrameApplication.java b/JisolGameServer/GFrameDemo/src/main/java/cn/jisol/ngame/frame/JNFrameApplication.java new file mode 100644 index 00000000..a1c0465b --- /dev/null +++ b/JisolGameServer/GFrameDemo/src/main/java/cn/jisol/ngame/frame/JNFrameApplication.java @@ -0,0 +1,19 @@ +package cn.jisol.ngame.frame; + +import cn.jisol.ngame.util.spring.SpringBeanUtils; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.retry.annotation.EnableRetry; +import org.springframework.scheduling.annotation.EnableScheduling; + +@EnableRetry +@SpringBootApplication +@EnableScheduling +public class JNFrameApplication { + + public static void main(String[] args) { + SpringBeanUtils.context = SpringApplication.run(JNFrameApplication.class); + } + +} diff --git a/JisolGameServer/GFrameDemo/src/main/java/cn/jisol/ngame/frame/listener/InitNGameListener.java b/JisolGameServer/GFrameDemo/src/main/java/cn/jisol/ngame/frame/listener/InitNGameListener.java new file mode 100644 index 00000000..13947c5b --- /dev/null +++ b/JisolGameServer/GFrameDemo/src/main/java/cn/jisol/ngame/frame/listener/InitNGameListener.java @@ -0,0 +1,15 @@ +package cn.jisol.ngame.frame.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/GFrameDemo/src/main/java/cn/jisol/ngame/frame/network/NSocketConfigurer.java b/JisolGameServer/GFrameDemo/src/main/java/cn/jisol/ngame/frame/network/NSocketConfigurer.java new file mode 100644 index 00000000..2d43fb69 --- /dev/null +++ b/JisolGameServer/GFrameDemo/src/main/java/cn/jisol/ngame/frame/network/NSocketConfigurer.java @@ -0,0 +1,32 @@ +package cn.jisol.ngame.frame.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/GFrameDemo/src/main/java/cn/jisol/ngame/frame/network/WebSocket.java b/JisolGameServer/GFrameDemo/src/main/java/cn/jisol/ngame/frame/network/WebSocket.java new file mode 100644 index 00000000..4c109a0d --- /dev/null +++ b/JisolGameServer/GFrameDemo/src/main/java/cn/jisol/ngame/frame/network/WebSocket.java @@ -0,0 +1,52 @@ +package cn.jisol.ngame.frame.network; + +import cn.jisol.ngame.NSystem; +import cn.jisol.ngame.frame.network.client.GClient; +import cn.jisol.ngame.network.JNetwork; +import org.springframework.beans.factory.annotation.Autowired; +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.Objects; +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){ + + GClient client = new GClient(session); + CLIENTS.put(session.getId(), client); + + NSystem.Log("连接WebSocket成功"); + + } + + @OnMessage + public void onMessage(Session session, InputStream inputStream){ + + NSystem.Log("收到请求"); + + GClient client = CLIENTS.get(session.getId()); + JNetwork.onMessage(inputStream,client,client); + + } + + @OnClose + public void onClose(Session session){ + + } + +} diff --git a/JisolGameServer/GFrameDemo/src/main/java/cn/jisol/ngame/frame/network/client/GClient.java b/JisolGameServer/GFrameDemo/src/main/java/cn/jisol/ngame/frame/network/client/GClient.java new file mode 100644 index 00000000..8baacffb --- /dev/null +++ b/JisolGameServer/GFrameDemo/src/main/java/cn/jisol/ngame/frame/network/client/GClient.java @@ -0,0 +1,39 @@ +package cn.jisol.ngame.frame.network.client; + +import cn.jisol.ngame.client.QueueNClient; + +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) {} + } + } + + @Override + public boolean isOpen() { + return session.isOpen(); + } +} diff --git a/JisolGameServer/JNGame b/JisolGameServer/JNGame index 87cdbc5b..4a1172ac 160000 --- a/JisolGameServer/JNGame +++ b/JisolGameServer/JNGame @@ -1 +1 @@ -Subproject commit 87cdbc5b91be3f46c06c6a647ed9cf3525a009eb +Subproject commit 4a1172acf2b203d0400931e7914a87520a8a02ff diff --git a/JisolGameServer/pom.xml b/JisolGameServer/pom.xml index 82b3947c..90df919b 100644 --- a/JisolGameServer/pom.xml +++ b/JisolGameServer/pom.xml @@ -17,6 +17,7 @@ Main + GFrameDemo pom