diff --git a/.gitignore b/.gitignore index a1c2a238a965f004ff76978ac1086aa6fe95caea..434f26077c90e38a92b351d32d51337dc4de65d0 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,6 @@ # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* + +# target +target/ \ No newline at end of file diff --git a/mini-client/src/main/java/com/mini/client/client/ApplicationRunner.java b/mini-client/src/main/java/com/mini/client/client/ApplicationRunner.java deleted file mode 100644 index c36d1b5f142d6899665a86233926a67f6d181c01..0000000000000000000000000000000000000000 --- a/mini-client/src/main/java/com/mini/client/client/ApplicationRunner.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.mini.client.client; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.ApplicationArguments; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023/2/25 13:45 - * @Description: TODO - */ -@Component -@Slf4j -public class ApplicationRunner implements org.springframework.boot.ApplicationRunner { - - @Autowired - private GameClient gameClient; - - @Override - public void run(ApplicationArguments args) throws Exception { - gameClient.start(); - } -} diff --git a/mini-client/src/main/java/com/mini/client/client/ClientChannelInitializer.java b/mini-client/src/main/java/com/mini/client/client/ClientChannelInitializer.java deleted file mode 100644 index b2a99b49fd90db1b43f482c85f29fcc11f1612e4..0000000000000000000000000000000000000000 --- a/mini-client/src/main/java/com/mini/client/client/ClientChannelInitializer.java +++ /dev/null @@ -1,138 +0,0 @@ -package com.mini.client.client; - -import com.mini.common.handler.BaseMessageHandler; -import com.mini.common.netty.Codec; -import com.mini.game.message.CGAttackMsg; -import com.mini.game.message.CGBuyGoodsMsg; -import com.mini.game.message.CGReceiveWarOrderPrizeMsg; -import com.mini.game.message.CGRechargeWarOrderVipMsg; -import com.mini.login.message.CGLoginMsg; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; -import io.netty.channel.ChannelInitializer; -import io.netty.channel.socket.nio.NioSocketChannel; -import io.netty.handler.codec.LengthFieldBasedFrameDecoder; -import io.netty.handler.codec.LengthFieldPrepender; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Scanner; -import java.util.concurrent.CountDownLatch; - -/** - * @author: yumi - * @date: 2023-02-27 11:37 - * @Description: TODO - */ -@Slf4j -@Component -public class ClientChannelInitializer extends ChannelInitializer { - - public static CountDownLatch loginLatch = new CountDownLatch(1); - - public static Boolean loginState = false; - - @Override - protected void initChannel(NioSocketChannel channel) throws Exception { - - channel.pipeline().addLast(new LengthFieldBasedFrameDecoder(65534, 0, 2, 0, 2)); - channel.pipeline().addLast(new LengthFieldPrepender(2)); - channel.pipeline().addLast(new Codec()); - channel.pipeline().addLast(new BaseMessageHandler()); - -// channel.pipeline().addLast(new IdleStateHandler(0,3,0)); -// channel.pipeline().addLast(new ClientHeartDuplexHandler()); - - channel.pipeline().addLast(new ChannelInboundHandlerAdapter() { - Scanner sc = new Scanner(System.in); - @Override - public void channelActive(ChannelHandlerContext ctx) throws Exception { - - System.out.println("激活了"); - - new Thread(() -> { - - while (true) { - System.out.println("account:"); - String account = sc.nextLine(); -// String account = "ym"; -// String pwd = "123456"; - - System.out.println("pwd:"); - String pwd = sc.nextLine(); - - CGLoginMsg cgLoginMsg = new CGLoginMsg(); - cgLoginMsg.setAccount(account); - cgLoginMsg.setPwd(pwd); - - // 发送登录请求 - ctx.channel().writeAndFlush(cgLoginMsg); - - try { - loginLatch.await(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - if (loginState) { - System.out.println("[登录成功]"); - break; - } - - loginLatch = new CountDownLatch(1); - System.out.println("[登录失败]"); - - } - - while (true) { - - try { - - System.out.println("========================"); - System.out.println("输入指令"); - System.out.println("1、购买商品"); - System.out.println("2、领取战令奖励"); - System.out.println("3、攻击"); - System.out.println("4、充值战令 vip"); - - String input = sc.nextLine().trim(); - - if (input.equals("1")) { - System.out.println("========== [输入商品 ID] =========="); -// dataRepository.getGoodsMap().values().forEach(System.out::println); - - try { - CGBuyGoodsMsg cgBuyGoodsMsg = new CGBuyGoodsMsg(Long.valueOf(sc.nextLine())); - System.out.println(cgBuyGoodsMsg); - ctx.channel().writeAndFlush(cgBuyGoodsMsg); - } catch (Exception e) { - System.out.println("[购买失败]"); - } - } else if (input.equals("2")) { - System.out.println("========== [输入奖励 ID] =========="); - ctx.channel().writeAndFlush(new CGReceiveWarOrderPrizeMsg(Long.valueOf(sc.nextLine()))); - - } else if (input.equals("3")) { - // 攻击 - ctx.channel().writeAndFlush(new CGAttackMsg()); - - } else if (input.equals("4")) { - ctx.channel().writeAndFlush(new CGRechargeWarOrderVipMsg()); - } - - } catch (Exception e) { - e.printStackTrace(); - } - - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - } - - }).start(); - } - }); - } -} diff --git a/mini-client/src/main/java/com/mini/client/client/ClientHeartDuplexHandler.java b/mini-client/src/main/java/com/mini/client/client/ClientHeartDuplexHandler.java deleted file mode 100644 index 26021eb0bcfb384da83f77fc74f296bfc3c3cff1..0000000000000000000000000000000000000000 --- a/mini-client/src/main/java/com/mini/client/client/ClientHeartDuplexHandler.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.mini.client.client; - -import com.mini.common.message.CGHeartMsg; -import io.netty.channel.ChannelDuplexHandler; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.timeout.IdleState; -import io.netty.handler.timeout.IdleStateEvent; -import lombok.extern.slf4j.Slf4j; - -/** - * @author: yumi - * @date: 2023-02-28 12:59 - * @Description: TODO - */ -@Slf4j -public class ClientHeartDuplexHandler extends ChannelDuplexHandler { - - @Override - public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { - IdleStateEvent event = (IdleStateEvent) evt; - if(event.state()== IdleState.WRITER_IDLE){ - log.info("已经3s没有写数据了,发送心跳包..."); - ctx.writeAndFlush(new CGHeartMsg()); - } - } - -} diff --git a/mini-client/src/main/java/com/mini/client/client/GameClient.java b/mini-client/src/main/java/com/mini/client/client/GameClient.java deleted file mode 100644 index bfe5d2927b6b8115fec28b086fa4f0a6c931071b..0000000000000000000000000000000000000000 --- a/mini-client/src/main/java/com/mini/client/client/GameClient.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.mini.client.client; - -import com.mini.common.misc.GameChannelInitializer; -import io.netty.bootstrap.Bootstrap; -import io.netty.channel.Channel; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.nio.NioSocketChannel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023/2/25 13:42 - * @Description: TODO - */ -@Slf4j -@Component -public class GameClient { - - @Autowired - private ClientChannelInitializer clientChannelInitializer; - - @Async - public void start() { - - NioEventLoopGroup worker = new NioEventLoopGroup(); - try { - Bootstrap client = new Bootstrap() - .group(worker) - .channel(NioSocketChannel.class) - .handler(clientChannelInitializer); - - Channel channel = client.connect("localhost", 80).sync().channel(); - log.info("client start"); - - channel.closeFuture().sync(); - - } catch (InterruptedException e) { - log.error("server error: [{}]", e.getMessage()); - } finally { - worker.shutdownGracefully(); - } - - } - -} diff --git a/mini-client/src/main/java/com/mini/client/handler/GCAttackMsgHandler.java b/mini-client/src/main/java/com/mini/client/handler/GCAttackMsgHandler.java deleted file mode 100644 index 5cb2ee645f5738cff41372cf0cc21cac26d1925c..0000000000000000000000000000000000000000 --- a/mini-client/src/main/java/com/mini/client/handler/GCAttackMsgHandler.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.mini.client.handler; - -import com.mini.common.handler.BaseHandler; -import com.mini.game.message.GCAttackMsg; -import io.netty.channel.Channel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-03-24 17:00 - * @Description: TODO - */ -@Slf4j -@Component -public class GCAttackMsgHandler implements BaseHandler { - - @Override - public void handler(Channel channel, GCAttackMsg msg) { - System.out.println(msg.getResult()); - } -} diff --git a/mini-client/src/main/java/com/mini/client/handler/GCBuyGoodsMsgHandler.java b/mini-client/src/main/java/com/mini/client/handler/GCBuyGoodsMsgHandler.java deleted file mode 100644 index f8596b6fda8303fac611b18d7e2c063ec5a61a5e..0000000000000000000000000000000000000000 --- a/mini-client/src/main/java/com/mini/client/handler/GCBuyGoodsMsgHandler.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.mini.client.handler; - -import com.mini.common.handler.BaseHandler; -import com.mini.game.message.GCBuyGoodsMsg; -import io.netty.channel.Channel; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-03-13 15:54 - * @Description: TODO - */ -@Component -public class GCBuyGoodsMsgHandler implements BaseHandler { - - @Override - public void handler(Channel channel, GCBuyGoodsMsg msg) { - System.out.println(msg.getResponseMsg()); - } -} diff --git a/mini-client/src/main/java/com/mini/client/handler/GCLoginMsgHandler.java b/mini-client/src/main/java/com/mini/client/handler/GCLoginMsgHandler.java deleted file mode 100644 index 7069de77cd099fb9e593ef9cd50896f995b12c5d..0000000000000000000000000000000000000000 --- a/mini-client/src/main/java/com/mini/client/handler/GCLoginMsgHandler.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.mini.client.handler; - -import com.mini.client.client.ClientChannelInitializer; -import com.mini.common.handler.BaseHandler; -import com.mini.login.message.GCLoginMsg; -import io.netty.channel.Channel; -import io.netty.channel.ChannelHandlerContext; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023/2/27 21:01 - * @Description: TODO - */ -@Slf4j -@Component -public class GCLoginMsgHandler implements BaseHandler { - - @Override - public void handler(Channel channel, GCLoginMsg msg) { - log.info("receive GCLoginMsg [{}]", msg); - ClientChannelInitializer.loginState = msg.getReason(); - ClientChannelInitializer.loginLatch.countDown(); - } -} diff --git a/mini-client/src/main/java/com/mini/client/handler/GCReceiveWarOrderPrizeMsgHandler.java b/mini-client/src/main/java/com/mini/client/handler/GCReceiveWarOrderPrizeMsgHandler.java deleted file mode 100644 index b657a47054d86410047c70d587b7bad131e07347..0000000000000000000000000000000000000000 --- a/mini-client/src/main/java/com/mini/client/handler/GCReceiveWarOrderPrizeMsgHandler.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.mini.client.handler; - -import com.mini.common.handler.BaseHandler; -import com.mini.game.message.GCReceiveWarOrderPrizeMsg; -import io.netty.channel.Channel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-03-24 15:16 - * @Description: TODO - */ -@Slf4j -@Component -public class GCReceiveWarOrderPrizeMsgHandler implements BaseHandler { - - @Override - public void handler(Channel channel, GCReceiveWarOrderPrizeMsg msg) { - System.out.println(msg.getResult()); - } -} diff --git a/mini-client/src/main/java/com/mini/client/handler/GCRechargeWarOrderVipMsgHandler.java b/mini-client/src/main/java/com/mini/client/handler/GCRechargeWarOrderVipMsgHandler.java deleted file mode 100644 index f839ab47163769116239c22cd75a7deaaae9ceb4..0000000000000000000000000000000000000000 --- a/mini-client/src/main/java/com/mini/client/handler/GCRechargeWarOrderVipMsgHandler.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.mini.client.handler; - -import com.mini.common.handler.BaseHandler; -import com.mini.game.message.GCRechargeWarOrderVipMsg; -import io.netty.channel.Channel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023/3/26 13:56 - * @Description: TODO - */ -@Slf4j -@Component -public class GCRechargeWarOrderVipMsgHandler implements BaseHandler { - - @Override - public void handler(Channel channel, GCRechargeWarOrderVipMsg msg) { - System.out.println(msg.getResult()); - } -} diff --git a/mini-client/src/main/resources/application.yml b/mini-client/src/main/resources/application.yml deleted file mode 100644 index 6072bf75b2294f2c4f2eb5d8b8bcedc01f27ebd6..0000000000000000000000000000000000000000 --- a/mini-client/src/main/resources/application.yml +++ /dev/null @@ -1,6 +0,0 @@ -spring: - datasource: - url: jdbc:mysql://47.102.133.168:3306/netty?useUnicode=true&characterEncoding=utf-8&useSSL=false - driver-class-name: com.mysql.jdbc.Driver - username: root - password: root \ No newline at end of file diff --git a/mini-common/pom.xml b/mini-common/pom.xml deleted file mode 100644 index 1b28bb39a4ee6bf31990ce0864f3308aba8811d7..0000000000000000000000000000000000000000 --- a/mini-common/pom.xml +++ /dev/null @@ -1,98 +0,0 @@ - - - - mini - com.mini - 0.0.1-SNAPSHOT - - 4.0.0 - mini-common - - - - - io.netty - netty-all - - - - org.projectlombok - lombok - - - - - org.springframework.boot - spring-boot-starter - - - - com.baomidou - mybatis-plus-boot-starter - - - - com.alibaba - easyexcel - - - - - com.google.protobuf - protobuf-java - - - - mysql - mysql-connector-java - - - - org.springframework.boot - spring-boot-starter-data-redis - - - - com.alibaba.fastjson2 - fastjson2 - - - - - - - - kr.motd.maven - os-maven-plugin - 1.4.1.Final - - - - - org.xolstice.maven.plugins - protobuf-maven-plugin - 0.5.0 - - - com.google.protobuf:protoc:3.1.0:exe:${os.detected.classifier} - - grpc-java - - io.grpc:protoc-gen-grpc-java:1.29.0:exe:${os.detected.classifier} - - - - - - compile - compile-custom - - - - - - - - \ No newline at end of file diff --git a/mini-common/src/main/java/com/mini/common/config/FastJson2JsonRedisSerializer.java b/mini-common/src/main/java/com/mini/common/config/FastJson2JsonRedisSerializer.java deleted file mode 100644 index 94dec21d2bc0e4fa5beed97241391c6af685007a..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/config/FastJson2JsonRedisSerializer.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.mini.common.config; - -import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONReader; -import com.alibaba.fastjson2.JSONWriter; -import org.springframework.data.redis.serializer.RedisSerializer; -import org.springframework.data.redis.serializer.SerializationException; - -import java.nio.charset.Charset; - -/** - * Redis使用FastJson序列化 - * - * @author ruoyi - */ -public class FastJson2JsonRedisSerializer implements RedisSerializer -{ - public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); - - private Class clazz; - - - public FastJson2JsonRedisSerializer(Class clazz) - { - super(); - this.clazz = clazz; - } - - @Override - public byte[] serialize(T t) throws SerializationException - { - if (t == null) - { - return new byte[0]; - } - return JSON.toJSONString(t, JSONWriter.Feature.WriteClassName).getBytes(DEFAULT_CHARSET); - } - - @Override - public T deserialize(byte[] bytes) throws SerializationException - { - if (bytes == null || bytes.length <= 0) - { - return null; - } - String str = new String(bytes, DEFAULT_CHARSET); - - return JSON.parseObject(str, clazz, JSONReader.Feature.SupportAutoType); - } -} diff --git a/mini-common/src/main/java/com/mini/common/config/RedisConfig.java b/mini-common/src/main/java/com/mini/common/config/RedisConfig.java deleted file mode 100644 index 0ff46c313a5667cc01e78f11805df0032dd85620..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/config/RedisConfig.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.mini.common.config; - -import org.springframework.boot.autoconfigure.AutoConfigureBefore; -import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; -import org.springframework.cache.annotation.CachingConfigurerSupport; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.serializer.StringRedisSerializer; - -/** - * redis配置 - * - * @author ruoyi - */ -@Configuration -@EnableCaching -@AutoConfigureBefore(RedisAutoConfiguration.class) -public class RedisConfig extends CachingConfigurerSupport -{ - @Bean - @SuppressWarnings(value = { "unchecked", "rawtypes" }) - public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) - { - RedisTemplate template = new RedisTemplate<>(); - template.setConnectionFactory(connectionFactory); - - FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class); - - // 使用StringRedisSerializer来序列化和反序列化redis的key值 - template.setKeySerializer(new StringRedisSerializer()); - template.setValueSerializer(serializer); - - // Hash的key也采用StringRedisSerializer的序列化方式 - template.setHashKeySerializer(new StringRedisSerializer()); - template.setHashValueSerializer(serializer); - - template.afterPropertiesSet(); - return template; - } -} diff --git a/mini-common/src/main/java/com/mini/common/handler/BaseHandler.java b/mini-common/src/main/java/com/mini/common/handler/BaseHandler.java deleted file mode 100644 index b52396f7660eb6c5fc963a9e76dd7a4b5496b795..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/handler/BaseHandler.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.mini.common.handler; - -import com.mini.common.message.BaseMessage; -import io.netty.channel.Channel; -import io.netty.channel.ChannelHandlerContext; - -/** - * @author: yumi - * @date: 2023/2/8 20:03 - * @Description: TODO - */ -// MessageLite has toByteArray() -public interface BaseHandler { - - void handler(Channel channel, T msg); - -} diff --git a/mini-common/src/main/java/com/mini/common/handler/BaseMessageHandler.java b/mini-common/src/main/java/com/mini/common/handler/BaseMessageHandler.java deleted file mode 100644 index 82ebbd3d7df7fe69b026587fcdd49ce6fe71bca6..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/handler/BaseMessageHandler.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.mini.common.handler; - -import com.mini.common.message.BaseMessage; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.SimpleChannelInboundHandler; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-02-08 15:58 - * @Description: TODO - */ -@Slf4j -@Component -public class BaseMessageHandler extends SimpleChannelInboundHandler { - - /** - * 处理消息 - * @param ctx - */ - @Override - protected void channelRead0(ChannelHandlerContext ctx, BaseMessage msg) throws InterruptedException { - - /** - * 直接处理 - */ - msg.handler(ctx.channel()); - - } -} diff --git a/mini-common/src/main/java/com/mini/common/handler/CGHandler.java b/mini-common/src/main/java/com/mini/common/handler/CGHandler.java deleted file mode 100644 index 0c260b2b061f4b6c079c7f0cb2a26ae8410e1dd7..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/handler/CGHandler.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.mini.common.handler; - - -import com.mini.common.message.BaseMessage; - -/** - * @author: yumi - * @date: 2023/2/19 11:58 - * @Description: TODO - */ -public interface CGHandler extends BaseHandler { - - /** - * 持久化操作 - * @param msg - */ - void doDB(T msg); - -} diff --git a/mini-common/src/main/java/com/mini/common/handler/CGHeartMsgHandler.java b/mini-common/src/main/java/com/mini/common/handler/CGHeartMsgHandler.java deleted file mode 100644 index c51a2c761a73f3863208db5c8b280374892907c0..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/handler/CGHeartMsgHandler.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.mini.common.handler; - -import com.mini.common.message.CGHeartMsg; -import com.mini.common.message.GCHeartMsg; -import io.netty.channel.Channel; -import io.netty.channel.ChannelHandlerContext; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-02-24 16:41 - * @Description: TODO - */ -@Slf4j -@Component -public class CGHeartMsgHandler implements BaseHandler { - - @Override - public void handler(Channel channel, CGHeartMsg msg) { - channel.writeAndFlush(new GCHeartMsg()); -// log.info("收到心跳 [{}]", msg); - } -} diff --git a/mini-common/src/main/java/com/mini/common/handler/GCHeartMsgHandler.java b/mini-common/src/main/java/com/mini/common/handler/GCHeartMsgHandler.java deleted file mode 100644 index 9b4da626a3349f7b2cd8590fb149065b6e0fe9aa..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/handler/GCHeartMsgHandler.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.mini.common.handler; - -import com.mini.common.message.GCHeartMsg; -import io.netty.channel.Channel; -import io.netty.channel.ChannelHandlerContext; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-02-24 16:42 - * @Description: TODO - */ -@Slf4j -@Component -public class GCHeartMsgHandler implements BaseHandler { - - @Override - public void handler(Channel channel, GCHeartMsg msg) { - log.info("收到心跳"); - } -} diff --git a/mini-common/src/main/java/com/mini/common/message/BaseMessage.java b/mini-common/src/main/java/com/mini/common/message/BaseMessage.java deleted file mode 100644 index 7589678fb1700bf0600fef734719b24eed016fd2..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/message/BaseMessage.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.mini.common.message; - -import com.google.protobuf.InvalidProtocolBufferException; -import com.google.protobuf.MessageLite; -import com.mini.common.handler.BaseHandler; -import com.mini.common.utils.BeanUtils; -import com.mini.common.utils.SpringUtils; -import io.netty.buffer.ByteBuf; -import io.netty.channel.Channel; -import io.netty.channel.ChannelHandlerContext; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.NoSuchBeanDefinitionException; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.UUID; - -/** - * @author: yumi - * @date: 2023/2/15 21:12 - * @Description: 基础消息类,通过约定类名实现反射自动调用, - * this 在子类使用时会指向子类对象,从而实现子类不需要实现接口就能自动转换 - */ -@Slf4j -@Data -public abstract class BaseMessage implements IMsgSerializable { - - private MsgHeader msgHeader; - -// private MsgData msgData; - -// public abstract byte[] getDataBytes(); - - /** - * 创建时自动生成消息类型,this 会引导到子类上 - */ - public BaseMessage() { - -// String msgType = this.getClass().getSimpleName().replace("Msg", ""); - String msgType = this.getClass().getName(); - Long timestamp = System.currentTimeMillis(); - - // 获取服务模块名称 - String packageName = this.getClass().getPackage().getName(); - String substring = packageName.substring(0, packageName.lastIndexOf(".")); - - this.msgHeader = MsgHeader - .builder() - .uuid(UUID.randomUUID().toString()) - .msgType(msgType) - .channelId("non") - .timestamp(timestamp) - .serviceName(substring.substring(substring.lastIndexOf(".") + 1)) - .build(); - } - - public BaseMessage(CGMessage cgMessage) { - - } - - - @Override - public void serialization(ByteBuf out) { - try { -// Constructor dc = Class.forName("com.nettym.proto.ProtoMsg").getDeclaredConstructor(); -// dc.setAccessible(true); -// ProtoMsg protoMsg = (ProtoMsg) dc.newInstance(); - - // 静态匿名内部类 getDeclaredConstructor(),非静态匿名内部类需加上父类 class getDeclaredConstructor(ProtoMsg.class) -// Constructor protoDc = Class.forName("com.nettym.proto.ProtoMsg$" + this.getClass().getSimpleName()).getDeclaredConstructor(); -// String replace = this.getClass().getPackage().getName().replace("com.mini.", ""); -// String packageName = replace.substring(0, replace.indexOf(".")); - Class clazz = Class.forName( - "com.mini." - + this.msgHeader.getServiceName() - + ".proto.ProtoMsg$" - + this.getClass().getSimpleName()); - // 允许访问私有 -// protoDc.setAccessible(true); - // 复制属性并转为 byte 数组 - byte[] bytes = ((MessageLite) BeanUtils.copy2ProtoBuilder(this, clazz)).toByteArray(); - // 写入消息体 - out.writeBytes(bytes); - - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - } - - @Override - public void deserialization(ByteBuf in) throws InvalidProtocolBufferException { - - try { -// String replace = this.getClass().getPackage().getName().replace("com.mini.", ""); -// String packageName = replace.substring(0, replace.indexOf(".")); - // 获取 protoBuf 对应实体(约定类名相同) - Class protoMsgClass = Class.forName("com.mini." + this.msgHeader.getServiceName() + ".proto.ProtoMsg$" + this.getClass().getSimpleName()); - - // 静态匿名内部类 getDeclaredConstructor(),非静态匿名内部类需加上父类 class getDeclaredConstructor(ProtoMsg.class) - Constructor protoDc = protoMsgClass.getDeclaredConstructor(); - // 允许访问私有 - protoDc.setAccessible(true); - // 复制属性并转为 byte 数组 -// byte[] bytes = ((MessageLite) BeanUtils.copy(this, protoDc.newInstance())).toByteArray(); - - // 读取消息体 byte 数组 - byte[] bytes = new byte[in.readableBytes()]; - in.readBytes(bytes); - // 调用 protoBuf 反序列化方法 - Method method = protoMsgClass.getDeclaredMethod("parseFrom", byte[].class); - method.setAccessible(true); - Object protoMsgChild = method.invoke(protoDc.newInstance(), bytes); - - // 将属性设置到类上 - BeanUtils.copyProto2Entity(protoMsgChild, this); - - } catch (InstantiationException e) { - e.printStackTrace(); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - - } - - public void handler(Channel channel) { - - /** - * 无 spring 反射版本 - */ -// try { -// -// // 根据消息名执行对应的 Handler(约定 Handler 前缀为消息名) -// BaseHandler baseHandler = (BaseHandler) Class.forName("com.nettym.handler." + this.getMsgHeader().getMsgType() + "Handler").newInstance(); -// baseHandler.handler(ctx, this); -// -// } catch (IllegalAccessException e) { -// e.printStackTrace(); -// } catch (InstantiationException e) { -// e.printStackTrace(); -// } catch (ClassNotFoundException e) { -// e.printStackTrace(); -// } - - try { - BaseHandler handler = SpringUtils.getBean(this.getMsgHeader().getMsgType().substring(this.getMsgHeader().getMsgType().lastIndexOf(".") + 1) + "Handler"); - handler.handler(channel, this); - } catch (NoSuchBeanDefinitionException e) { - log.warn("[{}] 为 null", this.getMsgHeader().getMsgType().substring(this.getMsgHeader().getMsgType().lastIndexOf(".") + 1) + "Handler"); - } - - } -} diff --git a/mini-common/src/main/java/com/mini/common/message/CGHeartMsg.java b/mini-common/src/main/java/com/mini/common/message/CGHeartMsg.java deleted file mode 100644 index 71b74f0b8fda8297e11eb8b088408f13287f4806..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/message/CGHeartMsg.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.mini.common.message; - -import lombok.Data; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-02-24 16:40 - * @Description: TODO - */ -@Data -@Component -public class CGHeartMsg extends BaseMessage { -} diff --git a/mini-common/src/main/java/com/mini/common/message/CGMessage.java b/mini-common/src/main/java/com/mini/common/message/CGMessage.java deleted file mode 100644 index 0f47bc7e25db4b19bf3ea1d28af2e7f7f2a4a4c7..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/message/CGMessage.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.mini.common.message; - -import lombok.Data; -import lombok.ToString; - - - -/** - * @author: yumi - * @date: 2023/2/15 21:15 - * @Description: TODO - */ -@Data -@ToString(callSuper = true) -public abstract class CGMessage extends BaseMessage { - - public T buildGC() { - try { - System.out.println(this.getClass().getPackage().getName() + ".GC" + this.getClass().getSimpleName().substring(2)); - Class clazz = (Class) Class.forName(this.getClass().getPackage().getName() + ".GC" + this.getClass().getSimpleName().substring(2)); - T gc = clazz.newInstance(); - gc.getMsgHeader().setUuid(super.getMsgHeader().getUuid()); - gc.getMsgHeader().setChannelId(super.getMsgHeader().getChannelId()); - return gc; - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (InstantiationException e) { - e.printStackTrace(); - } - return null; - } - -} diff --git a/mini-common/src/main/java/com/mini/common/message/GCHeartMsg.java b/mini-common/src/main/java/com/mini/common/message/GCHeartMsg.java deleted file mode 100644 index 2c0ea597d5ca6868ef87eb68f28ba6ae14b79b62..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/message/GCHeartMsg.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.mini.common.message; - -import lombok.Data; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-02-24 16:38 - * @Description: TODO - */ -@Data -@Component -public class GCHeartMsg extends BaseMessage { -} diff --git a/mini-common/src/main/java/com/mini/common/message/GCMessage.java b/mini-common/src/main/java/com/mini/common/message/GCMessage.java deleted file mode 100644 index 8c65b56492a0cbe4a2f769891fc4cfa78c23fe06..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/message/GCMessage.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.mini.common.message; - -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author: yumi - * @date: 2023/2/16 23:27 - * @Description: TODO - */ -@Data -@NoArgsConstructor -public class GCMessage extends BaseMessage { -} diff --git a/mini-common/src/main/java/com/mini/common/message/MsgHeader.java b/mini-common/src/main/java/com/mini/common/message/MsgHeader.java deleted file mode 100644 index 85c292e3f18961000fc74ef2683af0c3c6dd5439..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/message/MsgHeader.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.mini.common.message; - -import com.google.protobuf.InvalidProtocolBufferException; -import com.google.protobuf.MessageLite; -import com.mini.common.proto.ProtoMsg; -import com.mini.common.utils.BeanUtils; -import io.netty.buffer.ByteBuf; -import lombok.Builder; -import lombok.Data; - - -/** - * @author: yumi - * @date: 2023-02-08 13:41 - * @Description: TODO - */ -@Data -@Builder -public class MsgHeader implements IMsgSerializable { - - /** - * 消息唯一 ID,用于请求 - 响应 - */ - private String uuid; - - /** - * 服务名称,对应 application.yml 里的 netty.clients.service - */ - private String serviceName; - - /** - * 消息类型 约定为前缀名称,例:CGLogin - CGLoginMsg - CGLoginMsgHandler - */ - private String msgType; - - /** - * 消息所属的连接 ID - */ - private String channelId; - - /** - * 消息生成的时间戳 - */ - private Long timestamp; - - /** - * 玩家 ID - */ - private Long playerId; - - - @Override - public void serialization(ByteBuf out) { - try { - - MessageLite messageLite = BeanUtils.copy2ProtoBuilder(this, ProtoMsg.MsgHeader.class); - byte[] bytes = messageLite.toByteArray(); - out.writeShort(bytes.length); - out.writeBytes(bytes); - } catch (Exception e) { - e.printStackTrace(); - } - - } - - @Override - public void deserialization(ByteBuf in) throws InvalidProtocolBufferException { - byte[] bytes = new byte[in.readShort()]; - in.readBytes(bytes); - ProtoMsg.MsgHeader msgHeader = ProtoMsg.MsgHeader.parseFrom(bytes); - - BeanUtils.copyProto2Entity(msgHeader, this); - - } -} diff --git a/mini-common/src/main/java/com/mini/common/misc/ExcelDataTransformListener.java b/mini-common/src/main/java/com/mini/common/misc/ExcelDataTransformListener.java deleted file mode 100644 index 3caff174777d95735dc607d6920c37923e9875d8..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/misc/ExcelDataTransformListener.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.mini.common.misc; - -import com.alibaba.excel.context.AnalysisContext; -import com.alibaba.excel.event.AnalysisEventListener; -import lombok.Getter; -import lombok.extern.slf4j.Slf4j; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * @author: yumi - * @date: 2023/2/18 16:43 - * @Description: TODO - */ -@Slf4j -@Getter -public class ExcelDataTransformListener extends AnalysisEventListener { - - private List data = new ArrayList<>(); - - - /** - * Excel 获取到每一条数据都会执行一次 - * @param bean - * @param analysisContext - */ - @Override - public void invoke(T bean, AnalysisContext analysisContext) { - data.add(bean); -// log.info("add:[{}]", bean); - } - - /** - * 获取所有数据后执行 - * @param analysisContext - */ - @Override - public void doAfterAllAnalysed(AnalysisContext analysisContext) { -// log.info("表格读取完成"); - } - - - /** - * 读取表头信息 - * @param headMap - * @param context - */ - @Override - public void invokeHeadMap(Map headMap, AnalysisContext context) { -// log.info("表头信息:[{}]", headMap); - } - - - @Override - public void onException(Exception exception, AnalysisContext context) throws Exception { - log.error("表格读取发生异常:[{}]", exception.getMessage()); - } - - -} diff --git a/mini-common/src/main/java/com/mini/common/misc/GameChannelInitializer.java b/mini-common/src/main/java/com/mini/common/misc/GameChannelInitializer.java deleted file mode 100644 index 8ae69103a4db59ca7510dd7e866b723debc3281d..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/misc/GameChannelInitializer.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.mini.common.misc; - -import com.mini.common.handler.BaseMessageHandler; -import com.mini.common.netty.Codec; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInitializer; -import io.netty.channel.socket.nio.NioSocketChannel; -import io.netty.handler.codec.LengthFieldBasedFrameDecoder; -import io.netty.handler.codec.LengthFieldPrepender; -import lombok.extern.slf4j.Slf4j; - -/** - * @author: yumi - * @date: 2023/2/18 13:14 - * @Description: TODO - */ -@Slf4j -public class GameChannelInitializer extends ChannelInitializer { - - @Override - protected void initChannel(NioSocketChannel channel) throws Exception { - channel.pipeline().addLast(new LengthFieldBasedFrameDecoder(65534, 0, 2, 0, 2)); - channel.pipeline().addLast(new LengthFieldPrepender(2)); - channel.pipeline().addLast(new Codec()); - channel.pipeline().addLast(new BaseMessageHandler()); -// log.info("[{}] 建立连接", name); - } - - @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { - log.error("{}", cause.getMessage()); - } -} diff --git a/mini-common/src/main/java/com/mini/common/proto/ProtoMsg.java b/mini-common/src/main/java/com/mini/common/proto/ProtoMsg.java deleted file mode 100644 index 2f3b961d22812068c84f6c9e3399520fa838409d..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/proto/ProtoMsg.java +++ /dev/null @@ -1,3891 +0,0 @@ -package com.mini.common.proto;// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Entity.proto - -public final class ProtoMsg { - private ProtoMsg() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistryLite registry) { - } - - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - registerAllExtensions( - (com.google.protobuf.ExtensionRegistryLite) registry); - } - public interface MsgHeaderOrBuilder extends - // @@protoc_insertion_point(interface_extends:MsgHeader) - com.google.protobuf.MessageOrBuilder { - - /** - * optional string msgType = 1; - */ - String getMsgType(); - /** - * optional string msgType = 1; - */ - com.google.protobuf.ByteString - getMsgTypeBytes(); - - /** - * optional string uuid = 2; - */ - String getUuid(); - /** - * optional string uuid = 2; - */ - com.google.protobuf.ByteString - getUuidBytes(); - - /** - * optional int64 timestamp = 3; - */ - long getTimestamp(); - - /** - * optional string serviceName = 4; - */ - String getServiceName(); - /** - * optional string serviceName = 4; - */ - com.google.protobuf.ByteString - getServiceNameBytes(); - - /** - * optional string channelId = 5; - */ - String getChannelId(); - /** - * optional string channelId = 5; - */ - com.google.protobuf.ByteString - getChannelIdBytes(); - - /** - * optional int64 playerId = 6; - */ - long getPlayerId(); - } - /** - * Protobuf type {@code MsgHeader} - */ - public static final class MsgHeader extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:MsgHeader) - MsgHeaderOrBuilder { - // Use MsgHeader.newBuilder() to construct. - private MsgHeader(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private MsgHeader() { - msgType_ = ""; - uuid_ = ""; - timestamp_ = 0L; - serviceName_ = ""; - channelId_ = ""; - playerId_ = 0L; - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private MsgHeader( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - case 10: { - String s = input.readStringRequireUtf8(); - - msgType_ = s; - break; - } - case 18: { - String s = input.readStringRequireUtf8(); - - uuid_ = s; - break; - } - case 24: { - - timestamp_ = input.readInt64(); - break; - } - case 34: { - String s = input.readStringRequireUtf8(); - - serviceName_ = s; - break; - } - case 42: { - String s = input.readStringRequireUtf8(); - - channelId_ = s; - break; - } - case 48: { - - playerId_ = input.readInt64(); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_MsgHeader_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_MsgHeader_fieldAccessorTable - .ensureFieldAccessorsInitialized( - MsgHeader.class, Builder.class); - } - - public static final int MSGTYPE_FIELD_NUMBER = 1; - private volatile Object msgType_; - /** - * optional string msgType = 1; - */ - public String getMsgType() { - Object ref = msgType_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - msgType_ = s; - return s; - } - } - /** - * optional string msgType = 1; - */ - public com.google.protobuf.ByteString - getMsgTypeBytes() { - Object ref = msgType_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - msgType_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int UUID_FIELD_NUMBER = 2; - private volatile Object uuid_; - /** - * optional string uuid = 2; - */ - public String getUuid() { - Object ref = uuid_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - uuid_ = s; - return s; - } - } - /** - * optional string uuid = 2; - */ - public com.google.protobuf.ByteString - getUuidBytes() { - Object ref = uuid_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - uuid_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int TIMESTAMP_FIELD_NUMBER = 3; - private long timestamp_; - /** - * optional int64 timestamp = 3; - */ - public long getTimestamp() { - return timestamp_; - } - - public static final int SERVICENAME_FIELD_NUMBER = 4; - private volatile Object serviceName_; - /** - * optional string serviceName = 4; - */ - public String getServiceName() { - Object ref = serviceName_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - serviceName_ = s; - return s; - } - } - /** - * optional string serviceName = 4; - */ - public com.google.protobuf.ByteString - getServiceNameBytes() { - Object ref = serviceName_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - serviceName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int CHANNELID_FIELD_NUMBER = 5; - private volatile Object channelId_; - /** - * optional string channelId = 5; - */ - public String getChannelId() { - Object ref = channelId_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - channelId_ = s; - return s; - } - } - /** - * optional string channelId = 5; - */ - public com.google.protobuf.ByteString - getChannelIdBytes() { - Object ref = channelId_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - channelId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int PLAYERID_FIELD_NUMBER = 6; - private long playerId_; - /** - * optional int64 playerId = 6; - */ - public long getPlayerId() { - return playerId_; - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!getMsgTypeBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, msgType_); - } - if (!getUuidBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, uuid_); - } - if (timestamp_ != 0L) { - output.writeInt64(3, timestamp_); - } - if (!getServiceNameBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, serviceName_); - } - if (!getChannelIdBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 5, channelId_); - } - if (playerId_ != 0L) { - output.writeInt64(6, playerId_); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!getMsgTypeBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, msgType_); - } - if (!getUuidBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, uuid_); - } - if (timestamp_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(3, timestamp_); - } - if (!getServiceNameBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, serviceName_); - } - if (!getChannelIdBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, channelId_); - } - if (playerId_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(6, playerId_); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof MsgHeader)) { - return super.equals(obj); - } - MsgHeader other = (MsgHeader) obj; - - boolean result = true; - result = result && getMsgType() - .equals(other.getMsgType()); - result = result && getUuid() - .equals(other.getUuid()); - result = result && (getTimestamp() - == other.getTimestamp()); - result = result && getServiceName() - .equals(other.getServiceName()); - result = result && getChannelId() - .equals(other.getChannelId()); - result = result && (getPlayerId() - == other.getPlayerId()); - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (37 * hash) + MSGTYPE_FIELD_NUMBER; - hash = (53 * hash) + getMsgType().hashCode(); - hash = (37 * hash) + UUID_FIELD_NUMBER; - hash = (53 * hash) + getUuid().hashCode(); - hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getTimestamp()); - hash = (37 * hash) + SERVICENAME_FIELD_NUMBER; - hash = (53 * hash) + getServiceName().hashCode(); - hash = (37 * hash) + CHANNELID_FIELD_NUMBER; - hash = (53 * hash) + getChannelId().hashCode(); - hash = (37 * hash) + PLAYERID_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getPlayerId()); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static MsgHeader parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static MsgHeader parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static MsgHeader parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static MsgHeader parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static MsgHeader parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static MsgHeader parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static MsgHeader parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static MsgHeader parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static MsgHeader parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static MsgHeader parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(MsgHeader prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code MsgHeader} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:MsgHeader) - MsgHeaderOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_MsgHeader_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_MsgHeader_fieldAccessorTable - .ensureFieldAccessorsInitialized( - MsgHeader.class, Builder.class); - } - - // Construct using ProtoMsg.MsgHeader.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - msgType_ = ""; - - uuid_ = ""; - - timestamp_ = 0L; - - serviceName_ = ""; - - channelId_ = ""; - - playerId_ = 0L; - - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_MsgHeader_descriptor; - } - - public MsgHeader getDefaultInstanceForType() { - return MsgHeader.getDefaultInstance(); - } - - public MsgHeader build() { - MsgHeader result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public MsgHeader buildPartial() { - MsgHeader result = new MsgHeader(this); - result.msgType_ = msgType_; - result.uuid_ = uuid_; - result.timestamp_ = timestamp_; - result.serviceName_ = serviceName_; - result.channelId_ = channelId_; - result.playerId_ = playerId_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof MsgHeader) { - return mergeFrom((MsgHeader)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(MsgHeader other) { - if (other == MsgHeader.getDefaultInstance()) return this; - if (!other.getMsgType().isEmpty()) { - msgType_ = other.msgType_; - onChanged(); - } - if (!other.getUuid().isEmpty()) { - uuid_ = other.uuid_; - onChanged(); - } - if (other.getTimestamp() != 0L) { - setTimestamp(other.getTimestamp()); - } - if (!other.getServiceName().isEmpty()) { - serviceName_ = other.serviceName_; - onChanged(); - } - if (!other.getChannelId().isEmpty()) { - channelId_ = other.channelId_; - onChanged(); - } - if (other.getPlayerId() != 0L) { - setPlayerId(other.getPlayerId()); - } - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - MsgHeader parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (MsgHeader) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private Object msgType_ = ""; - /** - * optional string msgType = 1; - */ - public String getMsgType() { - Object ref = msgType_; - if (!(ref instanceof String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - msgType_ = s; - return s; - } else { - return (String) ref; - } - } - /** - * optional string msgType = 1; - */ - public com.google.protobuf.ByteString - getMsgTypeBytes() { - Object ref = msgType_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - msgType_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * optional string msgType = 1; - */ - public Builder setMsgType( - String value) { - if (value == null) { - throw new NullPointerException(); - } - - msgType_ = value; - onChanged(); - return this; - } - /** - * optional string msgType = 1; - */ - public Builder clearMsgType() { - - msgType_ = getDefaultInstance().getMsgType(); - onChanged(); - return this; - } - /** - * optional string msgType = 1; - */ - public Builder setMsgTypeBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - msgType_ = value; - onChanged(); - return this; - } - - private Object uuid_ = ""; - /** - * optional string uuid = 2; - */ - public String getUuid() { - Object ref = uuid_; - if (!(ref instanceof String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - uuid_ = s; - return s; - } else { - return (String) ref; - } - } - /** - * optional string uuid = 2; - */ - public com.google.protobuf.ByteString - getUuidBytes() { - Object ref = uuid_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - uuid_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * optional string uuid = 2; - */ - public Builder setUuid( - String value) { - if (value == null) { - throw new NullPointerException(); - } - - uuid_ = value; - onChanged(); - return this; - } - /** - * optional string uuid = 2; - */ - public Builder clearUuid() { - - uuid_ = getDefaultInstance().getUuid(); - onChanged(); - return this; - } - /** - * optional string uuid = 2; - */ - public Builder setUuidBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - uuid_ = value; - onChanged(); - return this; - } - - private long timestamp_ ; - /** - * optional int64 timestamp = 3; - */ - public long getTimestamp() { - return timestamp_; - } - /** - * optional int64 timestamp = 3; - */ - public Builder setTimestamp(long value) { - - timestamp_ = value; - onChanged(); - return this; - } - /** - * optional int64 timestamp = 3; - */ - public Builder clearTimestamp() { - - timestamp_ = 0L; - onChanged(); - return this; - } - - private Object serviceName_ = ""; - /** - * optional string serviceName = 4; - */ - public String getServiceName() { - Object ref = serviceName_; - if (!(ref instanceof String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - serviceName_ = s; - return s; - } else { - return (String) ref; - } - } - /** - * optional string serviceName = 4; - */ - public com.google.protobuf.ByteString - getServiceNameBytes() { - Object ref = serviceName_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - serviceName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * optional string serviceName = 4; - */ - public Builder setServiceName( - String value) { - if (value == null) { - throw new NullPointerException(); - } - - serviceName_ = value; - onChanged(); - return this; - } - /** - * optional string serviceName = 4; - */ - public Builder clearServiceName() { - - serviceName_ = getDefaultInstance().getServiceName(); - onChanged(); - return this; - } - /** - * optional string serviceName = 4; - */ - public Builder setServiceNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - serviceName_ = value; - onChanged(); - return this; - } - - private Object channelId_ = ""; - /** - * optional string channelId = 5; - */ - public String getChannelId() { - Object ref = channelId_; - if (!(ref instanceof String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - channelId_ = s; - return s; - } else { - return (String) ref; - } - } - /** - * optional string channelId = 5; - */ - public com.google.protobuf.ByteString - getChannelIdBytes() { - Object ref = channelId_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - channelId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * optional string channelId = 5; - */ - public Builder setChannelId( - String value) { - if (value == null) { - throw new NullPointerException(); - } - - channelId_ = value; - onChanged(); - return this; - } - /** - * optional string channelId = 5; - */ - public Builder clearChannelId() { - - channelId_ = getDefaultInstance().getChannelId(); - onChanged(); - return this; - } - /** - * optional string channelId = 5; - */ - public Builder setChannelIdBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - channelId_ = value; - onChanged(); - return this; - } - - private long playerId_ ; - /** - * optional int64 playerId = 6; - */ - public long getPlayerId() { - return playerId_; - } - /** - * optional int64 playerId = 6; - */ - public Builder setPlayerId(long value) { - - playerId_ = value; - onChanged(); - return this; - } - /** - * optional int64 playerId = 6; - */ - public Builder clearPlayerId() { - - playerId_ = 0L; - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:MsgHeader) - } - - // @@protoc_insertion_point(class_scope:MsgHeader) - private static final MsgHeader DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new MsgHeader(); - } - - public static MsgHeader getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public MsgHeader parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new MsgHeader(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public MsgHeader getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface GCHeartMsgOrBuilder extends - // @@protoc_insertion_point(interface_extends:GCHeartMsg) - com.google.protobuf.MessageOrBuilder { - } - /** - * Protobuf type {@code GCHeartMsg} - */ - public static final class GCHeartMsg extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:GCHeartMsg) - GCHeartMsgOrBuilder { - // Use GCHeartMsg.newBuilder() to construct. - private GCHeartMsg(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private GCHeartMsg() { - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private GCHeartMsg( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_GCHeartMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_GCHeartMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - GCHeartMsg.class, Builder.class); - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof GCHeartMsg)) { - return super.equals(obj); - } - GCHeartMsg other = (GCHeartMsg) obj; - - boolean result = true; - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static GCHeartMsg parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static GCHeartMsg parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static GCHeartMsg parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static GCHeartMsg parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static GCHeartMsg parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static GCHeartMsg parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static GCHeartMsg parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static GCHeartMsg parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static GCHeartMsg parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static GCHeartMsg parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(GCHeartMsg prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code GCHeartMsg} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:GCHeartMsg) - GCHeartMsgOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_GCHeartMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_GCHeartMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - GCHeartMsg.class, Builder.class); - } - - // Construct using ProtoMsg.GCHeartMsg.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_GCHeartMsg_descriptor; - } - - public GCHeartMsg getDefaultInstanceForType() { - return GCHeartMsg.getDefaultInstance(); - } - - public GCHeartMsg build() { - GCHeartMsg result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public GCHeartMsg buildPartial() { - GCHeartMsg result = new GCHeartMsg(this); - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof GCHeartMsg) { - return mergeFrom((GCHeartMsg)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(GCHeartMsg other) { - if (other == GCHeartMsg.getDefaultInstance()) return this; - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - GCHeartMsg parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (GCHeartMsg) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:GCHeartMsg) - } - - // @@protoc_insertion_point(class_scope:GCHeartMsg) - private static final GCHeartMsg DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new GCHeartMsg(); - } - - public static GCHeartMsg getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public GCHeartMsg parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new GCHeartMsg(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public GCHeartMsg getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface CGHeartMsgOrBuilder extends - // @@protoc_insertion_point(interface_extends:CGHeartMsg) - com.google.protobuf.MessageOrBuilder { - } - /** - * Protobuf type {@code CGHeartMsg} - */ - public static final class CGHeartMsg extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:CGHeartMsg) - CGHeartMsgOrBuilder { - // Use CGHeartMsg.newBuilder() to construct. - private CGHeartMsg(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private CGHeartMsg() { - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private CGHeartMsg( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_CGHeartMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_CGHeartMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - CGHeartMsg.class, Builder.class); - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof CGHeartMsg)) { - return super.equals(obj); - } - CGHeartMsg other = (CGHeartMsg) obj; - - boolean result = true; - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static CGHeartMsg parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static CGHeartMsg parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static CGHeartMsg parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static CGHeartMsg parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static CGHeartMsg parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static CGHeartMsg parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static CGHeartMsg parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static CGHeartMsg parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static CGHeartMsg parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static CGHeartMsg parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(CGHeartMsg prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code CGHeartMsg} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:CGHeartMsg) - CGHeartMsgOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_CGHeartMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_CGHeartMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - CGHeartMsg.class, Builder.class); - } - - // Construct using ProtoMsg.CGHeartMsg.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_CGHeartMsg_descriptor; - } - - public CGHeartMsg getDefaultInstanceForType() { - return CGHeartMsg.getDefaultInstance(); - } - - public CGHeartMsg build() { - CGHeartMsg result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public CGHeartMsg buildPartial() { - CGHeartMsg result = new CGHeartMsg(this); - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof CGHeartMsg) { - return mergeFrom((CGHeartMsg)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(CGHeartMsg other) { - if (other == CGHeartMsg.getDefaultInstance()) return this; - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - CGHeartMsg parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (CGHeartMsg) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:CGHeartMsg) - } - - // @@protoc_insertion_point(class_scope:CGHeartMsg) - private static final CGHeartMsg DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new CGHeartMsg(); - } - - public static CGHeartMsg getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public CGHeartMsg parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new CGHeartMsg(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public CGHeartMsg getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface CGLoginSuccessMsgOrBuilder extends - // @@protoc_insertion_point(interface_extends:CGLoginSuccessMsg) - com.google.protobuf.MessageOrBuilder { - - /** - * optional int64 playerId = 1; - */ - long getPlayerId(); - } - /** - * Protobuf type {@code CGLoginSuccessMsg} - */ - public static final class CGLoginSuccessMsg extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:CGLoginSuccessMsg) - CGLoginSuccessMsgOrBuilder { - // Use CGLoginSuccessMsg.newBuilder() to construct. - private CGLoginSuccessMsg(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private CGLoginSuccessMsg() { - playerId_ = 0L; - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private CGLoginSuccessMsg( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - case 8: { - - playerId_ = input.readInt64(); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_CGLoginSuccessMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_CGLoginSuccessMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - CGLoginSuccessMsg.class, Builder.class); - } - - public static final int PLAYERID_FIELD_NUMBER = 1; - private long playerId_; - /** - * optional int64 playerId = 1; - */ - public long getPlayerId() { - return playerId_; - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (playerId_ != 0L) { - output.writeInt64(1, playerId_); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (playerId_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(1, playerId_); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof CGLoginSuccessMsg)) { - return super.equals(obj); - } - CGLoginSuccessMsg other = (CGLoginSuccessMsg) obj; - - boolean result = true; - result = result && (getPlayerId() - == other.getPlayerId()); - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (37 * hash) + PLAYERID_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getPlayerId()); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static CGLoginSuccessMsg parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static CGLoginSuccessMsg parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static CGLoginSuccessMsg parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static CGLoginSuccessMsg parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static CGLoginSuccessMsg parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static CGLoginSuccessMsg parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static CGLoginSuccessMsg parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static CGLoginSuccessMsg parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static CGLoginSuccessMsg parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static CGLoginSuccessMsg parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(CGLoginSuccessMsg prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code CGLoginSuccessMsg} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:CGLoginSuccessMsg) - CGLoginSuccessMsgOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_CGLoginSuccessMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_CGLoginSuccessMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - CGLoginSuccessMsg.class, Builder.class); - } - - // Construct using ProtoMsg.CGLoginSuccessMsg.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - playerId_ = 0L; - - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_CGLoginSuccessMsg_descriptor; - } - - public CGLoginSuccessMsg getDefaultInstanceForType() { - return CGLoginSuccessMsg.getDefaultInstance(); - } - - public CGLoginSuccessMsg build() { - CGLoginSuccessMsg result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public CGLoginSuccessMsg buildPartial() { - CGLoginSuccessMsg result = new CGLoginSuccessMsg(this); - result.playerId_ = playerId_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof CGLoginSuccessMsg) { - return mergeFrom((CGLoginSuccessMsg)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(CGLoginSuccessMsg other) { - if (other == CGLoginSuccessMsg.getDefaultInstance()) return this; - if (other.getPlayerId() != 0L) { - setPlayerId(other.getPlayerId()); - } - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - CGLoginSuccessMsg parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (CGLoginSuccessMsg) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private long playerId_ ; - /** - * optional int64 playerId = 1; - */ - public long getPlayerId() { - return playerId_; - } - /** - * optional int64 playerId = 1; - */ - public Builder setPlayerId(long value) { - - playerId_ = value; - onChanged(); - return this; - } - /** - * optional int64 playerId = 1; - */ - public Builder clearPlayerId() { - - playerId_ = 0L; - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:CGLoginSuccessMsg) - } - - // @@protoc_insertion_point(class_scope:CGLoginSuccessMsg) - private static final CGLoginSuccessMsg DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new CGLoginSuccessMsg(); - } - - public static CGLoginSuccessMsg getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public CGLoginSuccessMsg parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new CGLoginSuccessMsg(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public CGLoginSuccessMsg getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface GCLoginSuccessMsgOrBuilder extends - // @@protoc_insertion_point(interface_extends:GCLoginSuccessMsg) - com.google.protobuf.MessageOrBuilder { - } - /** - * Protobuf type {@code GCLoginSuccessMsg} - */ - public static final class GCLoginSuccessMsg extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:GCLoginSuccessMsg) - GCLoginSuccessMsgOrBuilder { - // Use GCLoginSuccessMsg.newBuilder() to construct. - private GCLoginSuccessMsg(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private GCLoginSuccessMsg() { - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private GCLoginSuccessMsg( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_GCLoginSuccessMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_GCLoginSuccessMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - GCLoginSuccessMsg.class, Builder.class); - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof GCLoginSuccessMsg)) { - return super.equals(obj); - } - GCLoginSuccessMsg other = (GCLoginSuccessMsg) obj; - - boolean result = true; - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static GCLoginSuccessMsg parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static GCLoginSuccessMsg parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static GCLoginSuccessMsg parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static GCLoginSuccessMsg parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static GCLoginSuccessMsg parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static GCLoginSuccessMsg parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static GCLoginSuccessMsg parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static GCLoginSuccessMsg parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static GCLoginSuccessMsg parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static GCLoginSuccessMsg parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(GCLoginSuccessMsg prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code GCLoginSuccessMsg} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:GCLoginSuccessMsg) - GCLoginSuccessMsgOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_GCLoginSuccessMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_GCLoginSuccessMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - GCLoginSuccessMsg.class, Builder.class); - } - - // Construct using ProtoMsg.GCLoginSuccessMsg.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_GCLoginSuccessMsg_descriptor; - } - - public GCLoginSuccessMsg getDefaultInstanceForType() { - return GCLoginSuccessMsg.getDefaultInstance(); - } - - public GCLoginSuccessMsg build() { - GCLoginSuccessMsg result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public GCLoginSuccessMsg buildPartial() { - GCLoginSuccessMsg result = new GCLoginSuccessMsg(this); - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof GCLoginSuccessMsg) { - return mergeFrom((GCLoginSuccessMsg)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(GCLoginSuccessMsg other) { - if (other == GCLoginSuccessMsg.getDefaultInstance()) return this; - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - GCLoginSuccessMsg parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (GCLoginSuccessMsg) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:GCLoginSuccessMsg) - } - - // @@protoc_insertion_point(class_scope:GCLoginSuccessMsg) - private static final GCLoginSuccessMsg DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new GCLoginSuccessMsg(); - } - - public static GCLoginSuccessMsg getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public GCLoginSuccessMsg parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new GCLoginSuccessMsg(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public GCLoginSuccessMsg getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface PlayerOrBuilder extends - // @@protoc_insertion_point(interface_extends:Player) - com.google.protobuf.MessageOrBuilder { - - /** - * optional int64 id = 1; - */ - long getId(); - - /** - * optional string account = 2; - */ - String getAccount(); - /** - * optional string account = 2; - */ - com.google.protobuf.ByteString - getAccountBytes(); - - /** - * optional string pwd = 3; - */ - String getPwd(); - /** - * optional string pwd = 3; - */ - com.google.protobuf.ByteString - getPwdBytes(); - } - /** - * Protobuf type {@code Player} - */ - public static final class Player extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:Player) - PlayerOrBuilder { - // Use Player.newBuilder() to construct. - private Player(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private Player() { - id_ = 0L; - account_ = ""; - pwd_ = ""; - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private Player( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - case 8: { - - id_ = input.readInt64(); - break; - } - case 18: { - String s = input.readStringRequireUtf8(); - - account_ = s; - break; - } - case 26: { - String s = input.readStringRequireUtf8(); - - pwd_ = s; - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_Player_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_Player_fieldAccessorTable - .ensureFieldAccessorsInitialized( - Player.class, Builder.class); - } - - public interface currencyOrBuilder extends - // @@protoc_insertion_point(interface_extends:Player.currency) - com.google.protobuf.MessageOrBuilder { - - /** - * optional int64 gold = 1; - */ - long getGold(); - - /** - * optional int64 wood = 2; - */ - long getWood(); - } - /** - * Protobuf type {@code Player.currency} - */ - public static final class currency extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:Player.currency) - currencyOrBuilder { - // Use currency.newBuilder() to construct. - private currency(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private currency() { - gold_ = 0L; - wood_ = 0L; - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private currency( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - case 8: { - - gold_ = input.readInt64(); - break; - } - case 16: { - - wood_ = input.readInt64(); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_Player_currency_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_Player_currency_fieldAccessorTable - .ensureFieldAccessorsInitialized( - currency.class, Builder.class); - } - - public static final int GOLD_FIELD_NUMBER = 1; - private long gold_; - /** - * optional int64 gold = 1; - */ - public long getGold() { - return gold_; - } - - public static final int WOOD_FIELD_NUMBER = 2; - private long wood_; - /** - * optional int64 wood = 2; - */ - public long getWood() { - return wood_; - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (gold_ != 0L) { - output.writeInt64(1, gold_); - } - if (wood_ != 0L) { - output.writeInt64(2, wood_); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (gold_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(1, gold_); - } - if (wood_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(2, wood_); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof currency)) { - return super.equals(obj); - } - currency other = (currency) obj; - - boolean result = true; - result = result && (getGold() - == other.getGold()); - result = result && (getWood() - == other.getWood()); - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (37 * hash) + GOLD_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getGold()); - hash = (37 * hash) + WOOD_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getWood()); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static currency parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static currency parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static currency parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static currency parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static currency parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static currency parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static currency parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static currency parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static currency parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static currency parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(currency prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code Player.currency} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:Player.currency) - currencyOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_Player_currency_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_Player_currency_fieldAccessorTable - .ensureFieldAccessorsInitialized( - currency.class, Builder.class); - } - - // Construct using ProtoMsg.Player.currency.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - gold_ = 0L; - - wood_ = 0L; - - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_Player_currency_descriptor; - } - - public currency getDefaultInstanceForType() { - return currency.getDefaultInstance(); - } - - public currency build() { - currency result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public currency buildPartial() { - currency result = new currency(this); - result.gold_ = gold_; - result.wood_ = wood_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof currency) { - return mergeFrom((currency)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(currency other) { - if (other == currency.getDefaultInstance()) return this; - if (other.getGold() != 0L) { - setGold(other.getGold()); - } - if (other.getWood() != 0L) { - setWood(other.getWood()); - } - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - currency parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (currency) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private long gold_ ; - /** - * optional int64 gold = 1; - */ - public long getGold() { - return gold_; - } - /** - * optional int64 gold = 1; - */ - public Builder setGold(long value) { - - gold_ = value; - onChanged(); - return this; - } - /** - * optional int64 gold = 1; - */ - public Builder clearGold() { - - gold_ = 0L; - onChanged(); - return this; - } - - private long wood_ ; - /** - * optional int64 wood = 2; - */ - public long getWood() { - return wood_; - } - /** - * optional int64 wood = 2; - */ - public Builder setWood(long value) { - - wood_ = value; - onChanged(); - return this; - } - /** - * optional int64 wood = 2; - */ - public Builder clearWood() { - - wood_ = 0L; - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:Player.currency) - } - - // @@protoc_insertion_point(class_scope:Player.currency) - private static final currency DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new currency(); - } - - public static currency getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public currency parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new currency(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public currency getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public static final int ID_FIELD_NUMBER = 1; - private long id_; - /** - * optional int64 id = 1; - */ - public long getId() { - return id_; - } - - public static final int ACCOUNT_FIELD_NUMBER = 2; - private volatile Object account_; - /** - * optional string account = 2; - */ - public String getAccount() { - Object ref = account_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - account_ = s; - return s; - } - } - /** - * optional string account = 2; - */ - public com.google.protobuf.ByteString - getAccountBytes() { - Object ref = account_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - account_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int PWD_FIELD_NUMBER = 3; - private volatile Object pwd_; - /** - * optional string pwd = 3; - */ - public String getPwd() { - Object ref = pwd_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - pwd_ = s; - return s; - } - } - /** - * optional string pwd = 3; - */ - public com.google.protobuf.ByteString - getPwdBytes() { - Object ref = pwd_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - pwd_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (id_ != 0L) { - output.writeInt64(1, id_); - } - if (!getAccountBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, account_); - } - if (!getPwdBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, pwd_); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (id_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(1, id_); - } - if (!getAccountBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, account_); - } - if (!getPwdBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, pwd_); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof Player)) { - return super.equals(obj); - } - Player other = (Player) obj; - - boolean result = true; - result = result && (getId() - == other.getId()); - result = result && getAccount() - .equals(other.getAccount()); - result = result && getPwd() - .equals(other.getPwd()); - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (37 * hash) + ID_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getId()); - hash = (37 * hash) + ACCOUNT_FIELD_NUMBER; - hash = (53 * hash) + getAccount().hashCode(); - hash = (37 * hash) + PWD_FIELD_NUMBER; - hash = (53 * hash) + getPwd().hashCode(); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static Player parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static Player parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static Player parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static Player parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static Player parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static Player parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static Player parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static Player parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static Player parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static Player parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(Player prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code Player} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:Player) - PlayerOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_Player_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_Player_fieldAccessorTable - .ensureFieldAccessorsInitialized( - Player.class, Builder.class); - } - - // Construct using ProtoMsg.Player.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - id_ = 0L; - - account_ = ""; - - pwd_ = ""; - - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_Player_descriptor; - } - - public Player getDefaultInstanceForType() { - return Player.getDefaultInstance(); - } - - public Player build() { - Player result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public Player buildPartial() { - Player result = new Player(this); - result.id_ = id_; - result.account_ = account_; - result.pwd_ = pwd_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof Player) { - return mergeFrom((Player)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(Player other) { - if (other == Player.getDefaultInstance()) return this; - if (other.getId() != 0L) { - setId(other.getId()); - } - if (!other.getAccount().isEmpty()) { - account_ = other.account_; - onChanged(); - } - if (!other.getPwd().isEmpty()) { - pwd_ = other.pwd_; - onChanged(); - } - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Player parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (Player) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private long id_ ; - /** - * optional int64 id = 1; - */ - public long getId() { - return id_; - } - /** - * optional int64 id = 1; - */ - public Builder setId(long value) { - - id_ = value; - onChanged(); - return this; - } - /** - * optional int64 id = 1; - */ - public Builder clearId() { - - id_ = 0L; - onChanged(); - return this; - } - - private Object account_ = ""; - /** - * optional string account = 2; - */ - public String getAccount() { - Object ref = account_; - if (!(ref instanceof String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - account_ = s; - return s; - } else { - return (String) ref; - } - } - /** - * optional string account = 2; - */ - public com.google.protobuf.ByteString - getAccountBytes() { - Object ref = account_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - account_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * optional string account = 2; - */ - public Builder setAccount( - String value) { - if (value == null) { - throw new NullPointerException(); - } - - account_ = value; - onChanged(); - return this; - } - /** - * optional string account = 2; - */ - public Builder clearAccount() { - - account_ = getDefaultInstance().getAccount(); - onChanged(); - return this; - } - /** - * optional string account = 2; - */ - public Builder setAccountBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - account_ = value; - onChanged(); - return this; - } - - private Object pwd_ = ""; - /** - * optional string pwd = 3; - */ - public String getPwd() { - Object ref = pwd_; - if (!(ref instanceof String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - pwd_ = s; - return s; - } else { - return (String) ref; - } - } - /** - * optional string pwd = 3; - */ - public com.google.protobuf.ByteString - getPwdBytes() { - Object ref = pwd_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - pwd_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * optional string pwd = 3; - */ - public Builder setPwd( - String value) { - if (value == null) { - throw new NullPointerException(); - } - - pwd_ = value; - onChanged(); - return this; - } - /** - * optional string pwd = 3; - */ - public Builder clearPwd() { - - pwd_ = getDefaultInstance().getPwd(); - onChanged(); - return this; - } - /** - * optional string pwd = 3; - */ - public Builder setPwdBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - pwd_ = value; - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:Player) - } - - // @@protoc_insertion_point(class_scope:Player) - private static final Player DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new Player(); - } - - public static Player getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public Player parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new Player(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public Player getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_MsgHeader_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_MsgHeader_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_GCHeartMsg_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_GCHeartMsg_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_CGHeartMsg_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_CGHeartMsg_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_CGLoginSuccessMsg_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_CGLoginSuccessMsg_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_GCLoginSuccessMsg_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_GCLoginSuccessMsg_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_Player_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_Player_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_Player_currency_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_Player_currency_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - String[] descriptorData = { - "\n\014Entity.proto\"w\n\tMsgHeader\022\017\n\007msgType\030\001" + - " \001(\t\022\014\n\004uuid\030\002 \001(\t\022\021\n\ttimestamp\030\003 \001(\003\022\023\n" + - "\013serviceName\030\004 \001(\t\022\021\n\tchannelId\030\005 \001(\t\022\020\n" + - "\010playerId\030\006 \001(\003\"\014\n\nGCHeartMsg\"\014\n\nCGHeart" + - "Msg\"%\n\021CGLoginSuccessMsg\022\020\n\010playerId\030\001 \001" + - "(\003\"\023\n\021GCLoginSuccessMsg\"Z\n\006Player\022\n\n\002id\030" + - "\001 \001(\003\022\017\n\007account\030\002 \001(\t\022\013\n\003pwd\030\003 \001(\t\032&\n\010c" + - "urrency\022\014\n\004gold\030\001 \001(\003\022\014\n\004wood\030\002 \001(\003B\nB\010P" + - "rotoMsgb\006proto3" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }, assigner); - internal_static_MsgHeader_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_MsgHeader_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_MsgHeader_descriptor, - new String[] { "MsgType", "Uuid", "Timestamp", "ServiceName", "ChannelId", "PlayerId", }); - internal_static_GCHeartMsg_descriptor = - getDescriptor().getMessageTypes().get(1); - internal_static_GCHeartMsg_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_GCHeartMsg_descriptor, - new String[] { }); - internal_static_CGHeartMsg_descriptor = - getDescriptor().getMessageTypes().get(2); - internal_static_CGHeartMsg_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_CGHeartMsg_descriptor, - new String[] { }); - internal_static_CGLoginSuccessMsg_descriptor = - getDescriptor().getMessageTypes().get(3); - internal_static_CGLoginSuccessMsg_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_CGLoginSuccessMsg_descriptor, - new String[] { "PlayerId", }); - internal_static_GCLoginSuccessMsg_descriptor = - getDescriptor().getMessageTypes().get(4); - internal_static_GCLoginSuccessMsg_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_GCLoginSuccessMsg_descriptor, - new String[] { }); - internal_static_Player_descriptor = - getDescriptor().getMessageTypes().get(5); - internal_static_Player_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_Player_descriptor, - new String[] { "Id", "Account", "Pwd", }); - internal_static_Player_currency_descriptor = - internal_static_Player_descriptor.getNestedTypes().get(0); - internal_static_Player_currency_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_Player_currency_descriptor, - new String[] { "Gold", "Wood", }); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/mini-common/src/main/java/com/mini/common/utils/BeanUtils.java b/mini-common/src/main/java/com/mini/common/utils/BeanUtils.java deleted file mode 100644 index 622337fde23a8d1b06183afbe40be389cece9537..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/utils/BeanUtils.java +++ /dev/null @@ -1,159 +0,0 @@ -package com.mini.common.utils; - - -import lombok.extern.slf4j.Slf4j; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; - -/** - * @author: yumi - * @date: 2023/2/16 21:17 - * @Description: TODO - */ -@Slf4j -public class BeanUtils extends org.springframework.beans.BeanUtils { - - - /** - * 包装类和基本数据类型映射 - */ - private static Map, Class> primitiveAndWrap; - - private static Map, Class> wrapAndPrimitive; - - static { - primitiveAndWrap = new HashMap<>(); - wrapAndPrimitive = new HashMap<>(); - - primitiveAndWrap.put(byte.class, Byte.class); - primitiveAndWrap.put(short.class, Short.class); - primitiveAndWrap.put(int.class, Integer.class); - primitiveAndWrap.put(long.class, Long.class); - primitiveAndWrap.put(float.class, Float.class); - primitiveAndWrap.put(double.class, Double.class); - primitiveAndWrap.put(char.class, Character.class); - primitiveAndWrap.put(boolean.class, Boolean.class); - - primitiveAndWrap.entrySet().forEach(entry -> wrapAndPrimitive.put(entry.getValue(), entry.getKey())); - - - } - - public static V copy(T source, V target) { - copyProperties(source, target); - return target; - } - - /** - * ProtoBuf 对象转 javaBean - * @param source - * @param target - * @param - * @param - * @return - */ - public static V copyProto2Entity(T source, V target) { - - for (Field field : target.getClass().getDeclaredFields()) { - - try { - target.getClass() - .getMethod("set" + StringUtils.firstChar2UpperCase(field.getName()), field.getType()) - .invoke(target, - source.getClass() - .getMethod("get" + StringUtils.firstChar2UpperCase(field.getName())) - .invoke(source)); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } catch (NoSuchMethodException e) { -// log.warn("[{}] 转为 [{}] 时,找不到方法:[{}]", -// source.getClass().getName(), -// target.getClass().getName(), -// "get" + StringUtils.firstChar2UpperCase(field.getName()) -// ); - } - - } - - return target; - - } - - /** - * javaBean 对象转 ProtoBuf,Protobuf 使用 builder 进行对象构造 - * @param source - * @param target - * @param - * @param - * @return - */ - public static V copy2ProtoBuilder(T source, Class target) { - - try { - - Constructor dc = target.getDeclaredConstructor(); - dc.setAccessible(true); - Constructor builderCtr = dc.newInstance() - .getClass() - .getDeclaredMethod("newBuilder") - .invoke(target).getClass() - .getDeclaredConstructor(); - - builderCtr.setAccessible(true); - Object builder = builderCtr.newInstance(); - - for (Field field : source.getClass().getDeclaredFields()) { - - try { - Method setterMethod = builder - .getClass() - .getDeclaredMethod("set" + StringUtils.firstChar2UpperCase(field.getName()), - // 包装类转基础数据类型, protobuf 的 set 使用的是基本数据类型 - wrapAndPrimitive.get(field.getType()) != null ? wrapAndPrimitive.get(field.getType()) : field.getType()); - - if (setterMethod != null) { - field.setAccessible(true); - setterMethod.invoke(builder, field.get(source)); - } - } catch (NoSuchMethodException e) { -// log.warn("[{}] 转为 [{}] 时,找不到方法:[{}]", -// source.getClass().getName(), -// target.getClass().getName(), -// "get" + StringUtils.firstChar2UpperCase(field.getName()) -// ); - } catch (IllegalArgumentException e) { -// log.warn("[{}] 转为 [{}] 时参数设置失败,[{}] 参数为 null" , -// source.getClass().getName(), -// target.getClass().getName(), -// "get" + StringUtils.firstChar2UpperCase(field.getName()) -// ); - } catch (InvocationTargetException e) { - // protobuf 内部不允许值为 null - } - - } - - return (V) builder.getClass().getDeclaredMethod("build").invoke(builder); - - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - } catch (InstantiationException e) { - e.printStackTrace(); - } - - return null; - - } - -} diff --git a/mini-common/src/main/java/com/mini/common/utils/ExcelUtils.java b/mini-common/src/main/java/com/mini/common/utils/ExcelUtils.java deleted file mode 100644 index b1c5c73abfdb13917163a8c3a704d49f902132a8..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/utils/ExcelUtils.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.mini.common.utils; - -import com.alibaba.excel.EasyExcel; -import com.mini.common.misc.ExcelDataTransformListener; - -import java.io.File; -import java.util.List; - -/** - * @author: yumi - * @date: 2023/2/18 16:45 - * @Description: TODO - */ -public class ExcelUtils { - - /** - * 读取 Excel 并返回数据集合 - * @param excelFile Excel 文件 - * @param targetClass 数据类型 - * @param - * @return - */ - public static List read(File excelFile, Class targetClass) { - - ExcelDataTransformListener reader = new ExcelDataTransformListener<>(); - - /** - * 注意要调用 .sheet().doRead() 才会开始读取 - */ - EasyExcel.read(excelFile, targetClass, reader) - .sheet() - .doRead(); - - return reader.getData(); - } - - public static List read(File excelFile, String sheet, Class targetClass) { - - ExcelDataTransformListener reader = new ExcelDataTransformListener<>(); - - /** - * 注意要调用 .sheet().doRead() 才会开始读取 - */ - EasyExcel.read(excelFile, targetClass, reader) - .sheet(sheet) - .doRead(); - - return reader.getData(); - } - -} diff --git a/mini-common/src/main/java/com/mini/common/utils/RedisService.java b/mini-common/src/main/java/com/mini/common/utils/RedisService.java deleted file mode 100644 index 54d70c81b804bea5c7b9f8cc5b7da44fc88df6b6..0000000000000000000000000000000000000000 --- a/mini-common/src/main/java/com/mini/common/utils/RedisService.java +++ /dev/null @@ -1,265 +0,0 @@ -package com.mini.common.utils; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.BoundSetOperations; -import org.springframework.data.redis.core.HashOperations; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.ValueOperations; -import org.springframework.stereotype.Component; - -import java.util.*; -import java.util.concurrent.TimeUnit; - -/** - * spring redis 工具类 - * - * @author ruoyi - **/ -@SuppressWarnings(value = { "unchecked", "rawtypes" }) -@Component -public class RedisService -{ - @Autowired - public RedisTemplate redisTemplate; - - /** - * 缓存基本的对象,Integer、String、实体类等 - * - * @param key 缓存的键值 - * @param value 缓存的值 - */ - public void setCacheObject(final String key, final T value) - { - redisTemplate.opsForValue().set(key, value); - } - - /** - * 缓存基本的对象,Integer、String、实体类等 - * - * @param key 缓存的键值 - * @param value 缓存的值 - * @param timeout 时间 - * @param timeUnit 时间颗粒度 - */ - public void setCacheObject(final String key, final T value, final Long timeout, final TimeUnit timeUnit) - { - redisTemplate.opsForValue().set(key, value, timeout, timeUnit); - } - - /** - * 设置有效时间 - * - * @param key Redis键 - * @param timeout 超时时间 - * @return true=设置成功;false=设置失败 - */ - public boolean expire(final String key, final long timeout) - { - return expire(key, timeout, TimeUnit.SECONDS); - } - - /** - * 设置有效时间 - * - * @param key Redis键 - * @param timeout 超时时间 - * @param unit 时间单位 - * @return true=设置成功;false=设置失败 - */ - public boolean expire(final String key, final long timeout, final TimeUnit unit) - { - return redisTemplate.expire(key, timeout, unit); - } - - /** - * 获取有效时间 - * - * @param key Redis键 - * @return 有效时间 - */ - public long getExpire(final String key) - { - return redisTemplate.getExpire(key); - } - - /** - * 判断 key是否存在 - * - * @param key 键 - * @return true 存在 false不存在 - */ - public Boolean hasKey(String key) - { - return redisTemplate.hasKey(key); - } - - /** - * 获得缓存的基本对象。 - * - * @param key 缓存键值 - * @return 缓存键值对应的数据 - */ - public T getCacheObject(final String key) - { - ValueOperations operation = redisTemplate.opsForValue(); - return operation.get(key); - } - - /** - * 删除单个对象 - * - * @param key - */ - public boolean deleteObject(final String key) - { - return redisTemplate.delete(key); - } - - /** - * 删除集合对象 - * - * @param collection 多个对象 - * @return - */ - public boolean deleteObject(final Collection collection) - { - return redisTemplate.delete(collection) > 0; - } - - /** - * 缓存List数据 - * - * @param key 缓存的键值 - * @param dataList 待缓存的List数据 - * @return 缓存的对象 - */ - public long setCacheList(final String key, final List dataList) - { - Long count = redisTemplate.opsForList().rightPushAll(key, dataList); - return count == null ? 0 : count; - } - - /** - * 获得缓存的list对象 - * - * @param key 缓存的键值 - * @return 缓存键值对应的数据 - */ - public List getCacheList(final String key) - { - return redisTemplate.opsForList().range(key, 0, -1); - } - - /** - * 缓存Set - * - * @param key 缓存键值 - * @param dataSet 缓存的数据 - * @return 缓存数据的对象 - */ - public BoundSetOperations setCacheSet(final String key, final Set dataSet) - { - BoundSetOperations setOperation = redisTemplate.boundSetOps(key); - Iterator it = dataSet.iterator(); - while (it.hasNext()) - { - setOperation.add(it.next()); - } - return setOperation; - } - - /** - * 获得缓存的set - * - * @param key - * @return - */ - public Set getCacheSet(final String key) - { - return redisTemplate.opsForSet().members(key); - } - - /** - * 缓存Map - * - * @param key - * @param dataMap - */ - public void setCacheMap(final String key, final Map dataMap) - { - if (dataMap != null) { - redisTemplate.opsForHash().putAll(key, dataMap); - } - } - - /** - * 获得缓存的Map - * - * @param key - * @return - */ - public Map getCacheMap(final String key) - { - return redisTemplate.opsForHash().entries(key); - } - - /** - * 往Hash中存入数据 - * - * @param key Redis键 - * @param hKey Hash键 - * @param value 值 - */ - public void setCacheMapValue(final String key, final String hKey, final T value) - { - redisTemplate.opsForHash().put(key, hKey, value); - } - - /** - * 获取Hash中的数据 - * - * @param key Redis键 - * @param hKey Hash键 - * @return Hash中的对象 - */ - public T getCacheMapValue(final String key, final String hKey) - { - HashOperations opsForHash = redisTemplate.opsForHash(); - return opsForHash.get(key, hKey); - } - - /** - * 获取多个Hash中的数据 - * - * @param key Redis键 - * @param hKeys Hash键集合 - * @return Hash对象集合 - */ - public List getMultiCacheMapValue(final String key, final Collection hKeys) - { - return redisTemplate.opsForHash().multiGet(key, hKeys); - } - - /** - * 删除Hash中的某条数据 - * - * @param key Redis键 - * @param hKey Hash键 - * @return 是否成功 - */ - public boolean deleteCacheMapValue(final String key, final String hKey) - { - return redisTemplate.opsForHash().delete(key, hKey) > 0; - } - - /** - * 获得缓存的基本对象列表 - * - * @param pattern 字符串前缀 - * @return 对象列表 - */ - public Collection keys(final String pattern) - { - return redisTemplate.keys(pattern); - } -} diff --git a/mini-common/src/main/proto/Entity.proto b/mini-common/src/main/proto/Entity.proto deleted file mode 100644 index 3bf1f53164a69dc2883ddb99631e2c6303cfd5c2..0000000000000000000000000000000000000000 --- a/mini-common/src/main/proto/Entity.proto +++ /dev/null @@ -1,27 +0,0 @@ -syntax = "proto3"; -option java_outer_classname = "ProtoMsg"; - -message MsgHeader { - string msgType = 1; - string uuid = 2; - int64 timestamp = 3; - string serviceName = 4; - string channelId = 5; - int64 playerId = 6; -} - -message GCHeartMsg { - -} - -message CGHeartMsg { - -} - -message CGLoginSuccessMsg { - int64 playerId = 1; -} - -message GCLoginSuccessMsg { -} - diff --git a/mini-game/pom.xml b/mini-game/pom.xml deleted file mode 100644 index 70c226badf86703a74e60b5bf07ff017a37c1014..0000000000000000000000000000000000000000 --- a/mini-game/pom.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - mini - com.mini - 0.0.1-SNAPSHOT - - 4.0.0 - - mini-game - - - - - com.mini - mini-common - - - - org.springframework.boot - spring-boot-starter-test - - - - org.springframework.boot - spring-boot-starter-data-redis - - - - com.baomidou - mybatis-plus-boot-starter - - - - - - - - kr.motd.maven - os-maven-plugin - 1.4.1.Final - - - - - org.springframework.boot - spring-boot-maven-plugin - - - org.xolstice.maven.plugins - protobuf-maven-plugin - 0.5.0 - - - com.google.protobuf:protoc:3.1.0:exe:${os.detected.classifier} - - grpc-java - - io.grpc:protoc-gen-grpc-java:1.29.0:exe:${os.detected.classifier} - - - - - - compile - compile-custom - - - - - - - - \ No newline at end of file diff --git a/mini-game/src/main/java/com/mini/game/handler/CGAttackMsgHandler.java b/mini-game/src/main/java/com/mini/game/handler/CGAttackMsgHandler.java deleted file mode 100644 index 9f5e670f2caccc6e255283db435214eac1bc6864..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/handler/CGAttackMsgHandler.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.mini.game.handler; - -import com.mini.common.handler.BaseHandler; -import com.mini.common.message.GCMessage; -import com.mini.common.utils.SpringUtils; -import com.mini.game.message.CGAttackMsg; -import com.mini.game.message.GCAttackMsg; -import com.mini.game.misc.GameRepository; -import com.mini.game.pojo.entity.Player; -import com.mini.game.pojo.excel.ExcelWarOrderTask; -import io.netty.channel.Channel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-03-24 15:55 - * @Description: TODO - */ -@Slf4j -@Component -public class CGAttackMsgHandler implements BaseHandler { - - @Override - public void handler(Channel channel, CGAttackMsg msg) { - GameRepository repository = SpringUtils.getBean(GameRepository.class); - Player player = repository.getPlayer(msg.getMsgHeader().getPlayerId()); - - Long kills = Long.valueOf((int) (Math.random() * 10000)); - player.getBaseInfoManager().addKills(kills); - // 检查战令任务完成情况 - ExcelWarOrderTask task = new ExcelWarOrderTask(); - task.setTaskType(ExcelWarOrderTask.TASK_KILL); - task.setCompleteNum(kills); - player.getWarOrderManager().submitTaskProgress(task); - - GCAttackMsg gcMsg = msg.buildGC(); - gcMsg.setResult("本次攻击击杀了 " + kills + "个怪物"); - channel.writeAndFlush(gcMsg); - } -} diff --git a/mini-game/src/main/java/com/mini/game/handler/CGBuyGoodsMsgHandler.java b/mini-game/src/main/java/com/mini/game/handler/CGBuyGoodsMsgHandler.java deleted file mode 100644 index e7b0e7af09ec68ef1ae4aed23c4c220f82f540fd..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/handler/CGBuyGoodsMsgHandler.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.mini.game.handler; - -import com.mini.common.handler.CGHandler; -import com.mini.common.utils.Wrap; -import com.mini.game.message.CGBuyGoodsMsg; -import com.mini.game.message.GCBuyGoodsMsg; -import com.mini.game.misc.GameRepository; -import com.mini.game.pojo.blob.PlayerCurrency; -import com.mini.game.pojo.entity.Player; -import com.mini.game.pojo.excel.ExcelGoods; -import com.mini.game.service.PlayerService; -import io.netty.channel.Channel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023/2/18 18:11 - * @Description: TODO - */ -@Slf4j -@Component -public class CGBuyGoodsMsgHandler implements CGHandler { - - @Autowired - private GameRepository repository; - - @Autowired - private PlayerService playerService; - - @Override - public void handler(Channel channel, CGBuyGoodsMsg msg) { - - Player player = repository.getOnlinePlayerMap().get(msg.getMsgHeader().getPlayerId()); - player.getWoodShopManager().buyGoods(channel, msg); - - } - - @Override - public void doDB(CGBuyGoodsMsg msg) { - - /** - * 更新玩家货币信息 - */ - Player player = playerService.getOne(Wrap.lbq().eq(Player::getId, msg.getMsgHeader().getPlayerId())); - - player.getCurrency().setGold(player.getCurrency().getGold() - repository.goodsMap.get(msg.getBuyGoodId()).getGold()); - player.getCurrency().setWood(player.getCurrency().getWood() + repository.goodsMap.get(msg.getBuyGoodId()).getWood()); - - playerService.updateById(player); - - } - -} diff --git a/mini-game/src/main/java/com/mini/game/handler/CGLoginSuccessMsgHandler.java b/mini-game/src/main/java/com/mini/game/handler/CGLoginSuccessMsgHandler.java deleted file mode 100644 index dc46cbd280b63318fe4cbd3c4206749c27fe41bd..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/handler/CGLoginSuccessMsgHandler.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.mini.game.handler; - -import com.mini.common.handler.BaseHandler; -import com.mini.game.message.CGLoginSuccessMsg; -import com.mini.game.message.GCLoginSuccessMsg; -import com.mini.game.misc.GameRepository; -import com.mini.game.misc.PubSubManager; -import com.mini.game.misc.pubsub.LoginPub; -import com.mini.game.pojo.entity.Player; -import com.mini.game.service.PlayerService; -import io.netty.channel.Channel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-03-03 16:01 - * @Description: TODO - */ -@Slf4j -@Component -public class CGLoginSuccessMsgHandler implements BaseHandler { - - @Autowired - private GameRepository repository; - - @Autowired - private PlayerService playerService; - - @Autowired - private PubSubManager pubSubManager; - - @Override - public void handler(Channel channel, CGLoginSuccessMsg msg) { - - // 初始化玩家信息 - Player player = playerService.getById(msg.getPlayerId()); - player.init(); - repository.addOnlinePlayer(player.getId(), player); - - pubSubManager.publish(PubSubManager.PubType.LOGIN, msg.getPlayerId()); - channel.writeAndFlush(msg.buildGC()); - - } - -} diff --git a/mini-game/src/main/java/com/mini/game/handler/CGReceiveWarOrderPrizeMsgHandler.java b/mini-game/src/main/java/com/mini/game/handler/CGReceiveWarOrderPrizeMsgHandler.java deleted file mode 100644 index 070665e31e21bfa0e482e66491906821e80305ed..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/handler/CGReceiveWarOrderPrizeMsgHandler.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.mini.game.handler; - -import com.mini.common.handler.BaseHandler; -import com.mini.common.utils.SpringUtils; -import com.mini.game.message.CGReceiveWarOrderPrizeMsg; -import com.mini.game.message.GCReceiveWarOrderPrizeMsg; -import com.mini.game.misc.GameRepository; -import com.mini.game.pojo.db.ModifyPlayerMsg; -import com.mini.game.pojo.entity.Player; -import com.mini.game.pojo.excel.ExcelWarOrderPrize; -import com.mini.game.service.WarOrderService; -import com.mini.game.service.impl.WarOrderServiceImpl; -import io.netty.channel.Channel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-03-24 14:42 - * @Description: 请求领取战令奖励 Handler - */ -@Slf4j -@Component -public class CGReceiveWarOrderPrizeMsgHandler implements BaseHandler { - - @Override - public void handler(Channel channel, CGReceiveWarOrderPrizeMsg msg) { - GameRepository repository = SpringUtils.getBean(GameRepository.class); - WarOrderServiceImpl warOrderService = SpringUtils.getBean(WarOrderServiceImpl.class); - Player player = repository.getPlayer(msg.getMsgHeader().getPlayerId()); - - ExcelWarOrderPrize prize = warOrderService.getPrize(msg.getPrizeId()); - if (prize == null) { - GCReceiveWarOrderPrizeMsg gcMsg = msg.buildGC(); - gcMsg.setResult("该奖励不存在"); - channel.writeAndFlush(gcMsg); - return; - } - if (prize.getRoute().equals(ExcelWarOrderPrize.ROUTE_VIP) && !player.getWarOrderManager().getWarOrder().getIsVip()) { - GCReceiveWarOrderPrizeMsg gcMsg = msg.buildGC(); - gcMsg.setResult("该奖励只有 vip 才可以领取"); - channel.writeAndFlush(gcMsg); - return; - } - - if (player.getWarOrderManager().getWarOrder().getCurPoint() < prize.getNeedPoints()) { - GCReceiveWarOrderPrizeMsg gcMsg = msg.buildGC(); - gcMsg.setResult("未到达要求 " + prize.getNeedPoints() + "积分,你的积分:" + player.getWarOrderManager().getWarOrder().getCurPoint()); - channel.writeAndFlush(gcMsg); - return; - } - - if (player.getWarOrderManager().isReceived(prize.getPrizeId())) { - GCReceiveWarOrderPrizeMsg gcMsg = msg.buildGC(); - gcMsg.setResult("已经领取过了"); - channel.writeAndFlush(gcMsg); - return; - } - - // 奖励类型为金币 - if (prize.getPrizeType().equals(ExcelWarOrderPrize.PRIZE_GOLD)) { - try { - // 增加金币 - player.getCurrency().setGold(player.getCurrency().getGold() + prize.getItemNum()); - // 记录领取过的战令奖励 - player.getWarOrderManager().getWarOrder().getReceivePrizeId().add(prize.getPrizeId()); - // 持久化 - repository.pushDBMessage(new ModifyPlayerMsg(player)); - log.info("玩家 [{}] 领取战令奖励 [{}]", player.getId(), prize); - - GCReceiveWarOrderPrizeMsg gcMsg = msg.buildGC(); - gcMsg.setResult("领取成功"); - channel.writeAndFlush(gcMsg); - - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - } -} diff --git a/mini-game/src/main/java/com/mini/game/handler/CGRechargeWarOrderVipMsgHandler.java b/mini-game/src/main/java/com/mini/game/handler/CGRechargeWarOrderVipMsgHandler.java deleted file mode 100644 index 6a4512d2d4fe86c2a23f2a4d94b32e5ce5524ca1..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/handler/CGRechargeWarOrderVipMsgHandler.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.mini.game.handler; - -import com.mini.common.handler.BaseHandler; -import com.mini.common.message.GCMessage; -import com.mini.common.utils.SpringUtils; -import com.mini.game.message.CGRechargeWarOrderVipMsg; -import com.mini.game.message.GCRechargeWarOrderVipMsg; -import com.mini.game.misc.GameRepository; -import com.mini.game.pojo.db.ModifyPlayerMsg; -import com.mini.game.pojo.entity.Player; -import io.netty.channel.Channel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023/3/26 13:50 - * @Description: TODO - */ -@Slf4j -@Component -public class CGRechargeWarOrderVipMsgHandler implements BaseHandler { - - @Override - public void handler(Channel channel, CGRechargeWarOrderVipMsg msg) { - GameRepository repository = SpringUtils.getBean(GameRepository.class); - Player player = repository.getPlayer(msg.getMsgHeader().getPlayerId()); - if (player.getWarOrderManager().getWarOrder().getIsVip()) { - GCRechargeWarOrderVipMsg gcMessage = msg.buildGC(); - gcMessage.setResult("已经是 vip"); - channel.writeAndFlush(gcMessage); - return; - } - - try { - player.getWarOrderManager().getWarOrder().setIsVip(true); - repository.pushDBMessage(new ModifyPlayerMsg(player)); - GCRechargeWarOrderVipMsg gcMessage = msg.buildGC(); - gcMessage.setResult("充值 vip 成功"); - channel.writeAndFlush(gcMessage); - } catch (InterruptedException e) { - log.error("持久化队列写入失败", e.getMessage()); - } - - } -} diff --git a/mini-game/src/main/java/com/mini/game/handler/GCBuyGoodsMsgHandler.java b/mini-game/src/main/java/com/mini/game/handler/GCBuyGoodsMsgHandler.java deleted file mode 100644 index 731ab28a4f6e5e6130463f1af0bab7f799af15b3..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/handler/GCBuyGoodsMsgHandler.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.mini.game.handler; - -import com.mini.common.handler.BaseHandler; -import com.mini.game.message.GCBuyGoodsMsg; -import io.netty.channel.Channel; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023/2/19 11:41 - * @Description: TODO - */ -@Component -public class GCBuyGoodsMsgHandler implements BaseHandler { - - @Override - public void handler(Channel channel, GCBuyGoodsMsg msg) { - System.out.println(msg.getResponseMsg()); - } - -} diff --git a/mini-game/src/main/java/com/mini/game/manager/BaseInfoManager.java b/mini-game/src/main/java/com/mini/game/manager/BaseInfoManager.java deleted file mode 100644 index 1651a266de4bf170a63a04991103d96cb06bd84b..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/manager/BaseInfoManager.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.mini.game.manager; - -import com.alibaba.fastjson2.util.DateUtils; -import com.mini.common.utils.SpringUtils; -import com.mini.game.misc.PubSubManager; -import com.mini.game.pojo.blob.BaseInfo; -import com.mini.game.pojo.entity.Player; -import lombok.extern.slf4j.Slf4j; -import org.assertj.core.util.DateUtil; - -import javax.swing.*; -import java.text.DateFormat; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.Map; - -/** - * @author: yumi - * @date: 2023-03-21 16:28 - * @Description: TODO - */ -@Slf4j -public class BaseInfoManager implements BaseManager { - - private Player player; - private BaseInfo baseInfo; - - public BaseInfoManager(Player player, BaseInfo baseInfo) { - this.player = player; - this.baseInfo = baseInfo; - } - - /** - * 是否为今日首次登录 - */ - public Boolean isTodayFirstLogin() { - if (baseInfo.getLoginDays() == null || baseInfo.getLoginDays().size() == 0) { - return true; - } - - // 最近登录日期在今天之前 - return getLoginDateTime(baseInfo.getLoginDays().get(baseInfo.getLoginDays().size() - 1)).isBefore(getLoginDateTime(LocalDateTime.now())); - } - - /** - * 转换为登录整点时间,固定为实际日期 + 6点整,例:2023-03-21 06:00:00 - * @param localDateTime - * @return - */ - private LocalDateTime getLoginDateTime(LocalDateTime localDateTime) { - return localDateTime.minusHours(6).toLocalDate().atTime(6, 0, 0); - } - - @Override - public void heartBeat() { - - } - - /** - * 确认今日首次登录 - */ - public void submitFirstLogin() { - // 记录时间可能会有几毫秒误差 - baseInfo.getLoginDays().add(LocalDateTime.now()); - } - - /** - * 击杀后增加杀敌数 - * @param kills - */ - public void addKills(Long kills) { - - LocalDateTime dateTime = LocalDateTime.now(); - String date = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(dateTime); - Map killsMap = this.baseInfo.getKills(); - - // 按日期添加杀敌数 - if (killsMap.get(date) == null) { - killsMap.put(date, 0L); - } - killsMap.put(date, killsMap.get(date) + kills); - -// // 发布杀敌数改变通知 -// PubSubManager pubSubManager = SpringUtils.getBean(PubSubManager.class); -// pubSubManager.publish(PubSubManager.PubType.KILL_CHANGE, killsMap.get(date)); - - } -} diff --git a/mini-game/src/main/java/com/mini/game/manager/BaseManager.java b/mini-game/src/main/java/com/mini/game/manager/BaseManager.java deleted file mode 100644 index f148d84ce74238fc9895592011b94442956d7bd0..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/manager/BaseManager.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mini.game.manager; - -/** - * @author: yumi - * @date: 2023-03-14 08:47 - * @Description: TODO - */ -public interface BaseManager { - - /** - * 周期性监测 - */ - void heartBeat(); - -} diff --git a/mini-game/src/main/java/com/mini/game/manager/WarOrderManager.java b/mini-game/src/main/java/com/mini/game/manager/WarOrderManager.java deleted file mode 100644 index bb65eda2a3c8e73d45f4912bc8c172c0a0dafa4d..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/manager/WarOrderManager.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.mini.game.manager; - -import com.mini.common.utils.ExcelUtils; -import com.mini.common.utils.SpringUtils; -import com.mini.game.misc.GameRepository; -import com.mini.game.misc.PubSubManager; -import com.mini.game.misc.pubsub.base.Sub; -import com.mini.game.pojo.blob.WarOrder; -import com.mini.game.pojo.db.ModifyPlayerMsg; -import com.mini.game.pojo.entity.Player; -import com.mini.game.pojo.excel.ExcelWarOrderTask; -import com.mini.game.pojo.notify.CompleteTaskNotify; -import com.mini.game.service.WarOrderService; -import com.mini.game.service.impl.WarOrderServiceImpl; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.Map; - -/** - * @author: yumi - * @date: 2023-03-20 15:44 - * @Description: 战令系统 - */ -@Slf4j -@Data -public class WarOrderManager implements BaseManager { - - private Player player; - - private WarOrder warOrder; - - private PubSubManager pubSubManager; - - private WarOrderServiceImpl warOrderService; - - - /** - * 初始化 - */ - public WarOrderManager(Player player, WarOrder warOrder) { - this.player = player; - this.warOrder = warOrder; - this.pubSubManager = SpringUtils.getBean(PubSubManager.class); - this.warOrderService = SpringUtils.getBean(WarOrderServiceImpl.class); - } - - @Override - public void heartBeat() { - for (Map.Entry entry : warOrder.getTaskInfoMap().entrySet()) { - Long taskId = entry.getKey(); - WarOrder.TaskInfo taskInfo = entry.getValue(); - - // 达到下一次任务刷新时间 - if (LocalDateTime.now().isAfter(taskInfo.getNextRefreshTime())) { - log.info("到达刷新时间 [{}], 重置任务 [{}],下次刷新时间 [{}]", - taskInfo.getNextRefreshTime(), - warOrderService.getTask(taskId), - taskInfo.getNextRefreshTime().plusDays(warOrderService.getTask(taskId).getResetNum())); - // 重置任务 - taskInfo.setCurCompleteNum(0L); - taskInfo.setCurCompleteTimes(0); - // 设置下一次任务刷新时间 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - ExcelWarOrderTask task = warOrderService.getTask(taskId); - LocalDateTime openTime = LocalDateTime.parse(task.getOpenTime(), formatter); - long nextRefreshDay = task.getResetNum() - (LocalDateTime.now().minusHours(6).toLocalDate().toEpochDay() - openTime.toLocalDate().toEpochDay()) % task.getResetNum(); - taskInfo.setNextRefreshTime(LocalDateTime.now().minusHours(6).toLocalDate().plusDays(nextRefreshDay).atTime(6, 0, 0)); - - // 持久化 - try { - SpringUtils.getBean(GameRepository.class).pushDBMessage(new ModifyPlayerMsg(player)); - } catch (InterruptedException e) { - log.error("刷新任务持久化异常", e.getMessage()); - } - } - } - - - } - - /** - * 提交检查任务进度 - * @param task - */ - public void submitTaskProgress(ExcelWarOrderTask task) { - - WarOrderServiceImpl warOrderService = SpringUtils.getBean(WarOrderServiceImpl.class); - warOrderService.getExcelWarOrderTasks() - .stream() - // 这里可以优化效率,可以按任务类型分类保存,不用每次都过滤列表 - .filter(item -> item.getTaskType().equals(task.getTaskType()) - // 还未完成 - && warOrder.getTaskInfo(item.getTaskId()).getCurCompleteNum() < item.getCompleteNum() - // 还有完成次数 - && warOrder.getTaskInfo(item.getTaskId()).getCurCompleteTimes() < item.getCanCompleteTimes() - ) - .forEach(item -> { - WarOrder.TaskInfo taskInfo = warOrder.getTaskInfo(item.getTaskId()); - taskInfo.setCurCompleteNum(taskInfo.getCurCompleteNum() + task.getCompleteNum()); - log.info("玩家 [{}] 任务 [{}],当前完成度 {}/{}", player.getId(), item.getTaskId(), taskInfo.getCurCompleteNum(), item.getCompleteNum()); - // 是否完成任务 - if (taskInfo.getCurCompleteNum() >= item.getCompleteNum()) { - // 发布订阅模式发布玩家完成任务通知 - CompleteTaskNotify notify = new CompleteTaskNotify(); - notify.setPlayerId(player.getId()); - notify.setTaskId(item.getTaskId()); - pubSubManager.publish(PubSubManager.PubType.COMPLETE_TASK, notify); - - // 增加战令积分 - this.warOrder.setCurPoint(this.warOrder.getCurPoint() + item.getPrizePoint()); - log.info("玩家 [{}] 增加战令积分 [{}]", player.getId(), item.getPrizePoint()); - - // 重置任务 - taskInfo.setCurCompleteNum(0L); - taskInfo.setCurCompleteTimes(taskInfo.getCurCompleteTimes() + 1); - - try { - // 加入 DB 队列,持久化 - ModifyPlayerMsg msg = new ModifyPlayerMsg(player); - msg.getMsgHeader().setPlayerId(player.getId()); - SpringUtils.getBean(GameRepository.class).pushDBMessage(msg); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - - log.info("玩家 [{}] 完成任务 [{}],剩余完成次数 {}/{}", - notify.getPlayerId(), item.getTaskName(), taskInfo.getCurCompleteTimes(), item.getCanCompleteTimes()); - - } - }); - - } - - /** - * 玩家是否领取过该奖励 - * @param prizeId - */ - public Boolean isReceived(Long prizeId) { - return this.getWarOrder().getReceivePrizeId().stream().anyMatch(prizeId::equals); - } -} diff --git a/mini-game/src/main/java/com/mini/game/manager/WoodShopManager.java b/mini-game/src/main/java/com/mini/game/manager/WoodShopManager.java deleted file mode 100644 index 6b95737f5174d58b7533076be0cf4b92380dfe0a..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/manager/WoodShopManager.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.mini.game.manager; - -import com.mini.common.utils.SpringUtils; -import com.mini.game.message.CGBuyGoodsMsg; -import com.mini.game.message.GCBuyGoodsMsg; -import com.mini.game.misc.GameRepository; -import com.mini.game.pojo.blob.PlayerCurrency; -import com.mini.game.pojo.entity.Player; -import com.mini.game.pojo.excel.ExcelGoods; -import io.netty.channel.Channel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-03-14 08:47 - * @Description: TODO - */ -@Slf4j -public class WoodShopManager implements BaseManager { - - private GameRepository repository; - - private PlayerCurrency currency; - - private Player player; - - public WoodShopManager(Player player, PlayerCurrency currency) { - this.player = player; - this.repository = SpringUtils.getBean(GameRepository.class); - this.currency = currency; - } - - public void buyGoods(Channel channel, CGBuyGoodsMsg msg) { - - ExcelGoods goods = repository.goodsMap.get(msg.getBuyGoodId()); - - if (goods == null) { - channel.writeAndFlush(msg.buildGC().setResponseMsg("商品编号 [" + msg.getBuyGoodId() + "] 不存在")); - return; - } - - log.info("{}", msg.getMsgHeader().getPlayerId()); - - if (currency.getGold() >= goods.getGold()) { - try { - // 修改内存 - currency.setGold(currency.getGold() - goods.getGold()); - currency.setWood(currency.getWood() + goods.getWood()); - log.info("剩余:[{}]", currency); - - // 加入 DB 队列 - repository.pushDBMessage(msg); - - channel.writeAndFlush(msg.buildGC().setResponseMsg("购买 [" + goods.getName() + "] 成功")); - } catch (InterruptedException e) { - channel.writeAndFlush(msg.buildGC().setResponseMsg("购买 [" + goods.getName() + "] 失败,发生错误:" + e.getMessage())); - } - return; - } - - channel.writeAndFlush(msg.buildGC().setResponseMsg("购买 [" + goods.getName() + "] 失败,余额不足:" + currency)); - - } - - @Override - public void heartBeat() { - } -} diff --git a/mini-game/src/main/java/com/mini/game/message/CGAttackMsg.java b/mini-game/src/main/java/com/mini/game/message/CGAttackMsg.java deleted file mode 100644 index 2946eb9fc52a86b01abb0fe43e06b0b39ab64a2b..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/message/CGAttackMsg.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mini.game.message; - -import com.mini.common.message.CGMessage; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; - -/** - * @author: yumi - * @date: 2023-03-24 15:51 - * @Description: 攻击动作 - */ -@Data -public class CGAttackMsg extends CGMessage { - // -} diff --git a/mini-game/src/main/java/com/mini/game/message/CGRechargeWarOrderVipMsg.java b/mini-game/src/main/java/com/mini/game/message/CGRechargeWarOrderVipMsg.java deleted file mode 100644 index 12776873ee3f12ee5d51c04a32b6787864fd8b3a..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/message/CGRechargeWarOrderVipMsg.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mini.game.message; - -import com.mini.common.message.CGMessage; -import lombok.Data; - -/** - * @author: yumi - * @date: 2023/3/26 13:49 - * @Description: 充值战令 VIP - */ -@Data -public class CGRechargeWarOrderVipMsg extends CGMessage { -} diff --git a/mini-game/src/main/java/com/mini/game/message/GCAttackMsg.java b/mini-game/src/main/java/com/mini/game/message/GCAttackMsg.java deleted file mode 100644 index 40ed95c1762081496a2c5f671cbf99acd9648ad3..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/message/GCAttackMsg.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.mini.game.message; - -import com.mini.common.message.GCMessage; -import lombok.Data; - -/** - * @author: yumi - * @date: 2023-03-24 15:52 - * @Description: TODO - */ -@Data -public class GCAttackMsg extends GCMessage { - private String result; -} diff --git a/mini-game/src/main/java/com/mini/game/message/GCLoginSuccessMsg.java b/mini-game/src/main/java/com/mini/game/message/GCLoginSuccessMsg.java deleted file mode 100644 index f64b3c29d2a878e0ff51c4c228baedb012ab31d8..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/message/GCLoginSuccessMsg.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mini.game.message; - -import com.mini.common.message.GCMessage; -import lombok.Data; - -/** - * @author: yumi - * @date: 2023-03-03 15:58 - * @Description: TODO - */ -@Data -public class GCLoginSuccessMsg extends GCMessage { -} diff --git a/mini-game/src/main/java/com/mini/game/message/GCReceiveWarOrderPrizeMsg.java b/mini-game/src/main/java/com/mini/game/message/GCReceiveWarOrderPrizeMsg.java deleted file mode 100644 index 74528a7e425ac40bc86eb8634c11a9e710259e8e..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/message/GCReceiveWarOrderPrizeMsg.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mini.game.message; - -import com.mini.common.message.BaseMessage; -import com.mini.common.message.GCMessage; -import lombok.Data; - -/** - * @author: yumi - * @date: 2023-03-24 14:36 - * @Description: TODO - */ -@Data -public class GCReceiveWarOrderPrizeMsg extends GCMessage { - String result; -} diff --git a/mini-game/src/main/java/com/mini/game/message/GCRechargeWarOrderVipMsg.java b/mini-game/src/main/java/com/mini/game/message/GCRechargeWarOrderVipMsg.java deleted file mode 100644 index 5b218baa077a3f9bbbf85ad22835f20036d3ef9f..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/message/GCRechargeWarOrderVipMsg.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mini.game.message; - -import com.mini.common.message.GCMessage; -import lombok.Data; - -/** - * @author: yumi - * @date: 2023/3/26 13:49 - * @Description: TODO - */ -@Data -public class GCRechargeWarOrderVipMsg extends GCMessage { - - private String result; -} diff --git a/mini-game/src/main/java/com/mini/game/misc/GameRepository.java b/mini-game/src/main/java/com/mini/game/misc/GameRepository.java deleted file mode 100644 index 83a16198d2ce8584b9ce9380622c9e5c3a750b5e..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/misc/GameRepository.java +++ /dev/null @@ -1,168 +0,0 @@ -package com.mini.game.misc; - -import com.mini.common.message.BaseMessage; -import com.mini.common.utils.ExcelUtils; -import com.mini.game.pojo.entity.Player; -import com.mini.game.pojo.excel.ExcelGoods; -import com.mini.game.server.thread.CGMainHandleThread; -import com.mini.game.server.thread.DBHandlerThread; -import io.netty.channel.Channel; -import lombok.Data; -import lombok.Getter; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; -import org.springframework.util.ResourceUtils; - -import javax.annotation.PostConstruct; -import java.io.FileNotFoundException; -import java.time.LocalDateTime; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.stream.Collectors; - -/** - * @author: yumi - * @date: 2023-03-03 16:02 - * @Description: TODO - */ -@Slf4j -@Data -@Component -public class GameRepository { - - /** - * 首次开服时间,用于计算 - */ - public static final LocalDateTime firstOpenTime = LocalDateTime.of(2023, 3, 25, 6, 0, 0); - - /** - * 在线玩家 - * - */ - public Map onlinePlayerMap; - - /** - * 木材商店 - */ - public Map goodsMap; - - @Value("${excel.folder-path}") - private String folderPath; - - /** - * 登录线程消息队列 - */ - private BlockingQueue loginQueue; - - /** - * 请求处理消息队列 - */ - private BlockingQueue CGMainQueue; - - /** - * 数据持久化队列,根据用户 ID 取模 - */ - private Map> DBQueueMap; - - @Getter - private Integer dbQueueSize = 3; - - /** - * 网关 - */ - private Channel gateChannel; - - /** - * 上下文信息,因为 netty 是单线程的,在每次消息进来时可以设置他的上下文 - * (暂时没有实现) - */ - // private xx xx; - - - // 构造函数在 @Value 注入之前执行 - public GameRepository() { - } - - // 注入完成之后执行 - @PostConstruct - public void init() { - - try { - this.onlinePlayerMap = new ConcurrentHashMap<>(); - this.goodsMap = new ConcurrentHashMap<>(); - - this.loginQueue = new LinkedBlockingQueue<>(); - this.CGMainQueue = new LinkedBlockingQueue<>(); - this.DBQueueMap = new HashMap<>(); - // 暂时 3 个队列处理 DB - for (int i = 0; i ()); - } - - this.onlinePlayerMap = new ConcurrentHashMap<>(); - this.goodsMap = ExcelUtils.read(ResourceUtils.getFile(folderPath + "木材商店.xlsx"), ExcelGoods.class) - .stream() - .collect(Collectors.toMap(ExcelGoods::getId, excelGoods -> excelGoods)); - log.info("[加载木材商店]"); - - - new CGMainHandleThread().start(); - log.info("[初始化 CGMain 处理线程]"); - for (int i = 0; i < this.getDbQueueSize(); i++) { - new DBHandlerThread(Long.valueOf(i)).start(); - } - log.info("[初始化 DB 处理线程]"); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - - } - - - - public void addOnlinePlayer(Long playerId, Player player) { - onlinePlayerMap.put(playerId, player); - } - - /** - * 添加请求消息 - * @param cgMessage - * @throws InterruptedException - */ - public void pushCGMessage(BaseMessage cgMessage) throws InterruptedException { - this.CGMainQueue.put(cgMessage); - } - - public void pushLoginMessage(BaseMessage cgMessage) throws InterruptedException { - this.loginQueue.put(cgMessage); - } - - public void pushDBMessage(BaseMessage cgMessage) throws InterruptedException { - this.DBQueueMap.get(Long.valueOf(cgMessage.getMsgHeader().getPlayerId()) % dbQueueSize).put(cgMessage); - } - - /** - * 取出请求消息 - * @throws InterruptedException - */ - public BaseMessage popCGMessage() throws InterruptedException { - return this.CGMainQueue.poll(); - } - - public BaseMessage popLoginMessage() throws InterruptedException { - return this.loginQueue.poll(); - } - - public BaseMessage popDBMessage(Long queueId) throws InterruptedException { - return this.DBQueueMap.get(queueId).poll(); - } - - public Player getPlayer(Long playerId) { - return onlinePlayerMap.get(playerId); - } - -} diff --git a/mini-game/src/main/java/com/mini/game/misc/ObjectAndByteArrayTypeHandler.java b/mini-game/src/main/java/com/mini/game/misc/ObjectAndByteArrayTypeHandler.java deleted file mode 100644 index 18178a6f2ae6662ba439e6bb2f7827686f4c3faa..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/misc/ObjectAndByteArrayTypeHandler.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.mini.game.misc; - -import com.mini.game.pojo.blob.BaseBlob; -import org.apache.ibatis.type.JdbcType; -import org.apache.ibatis.type.MappedJdbcTypes; -import org.apache.ibatis.type.MappedTypes; -import org.apache.ibatis.type.TypeHandler; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.sql.*; - -/** - * @author: yumi - * @date: 2023/2/19 10:34 - * @Description: Mybatis-plus 自定义数据转换,Obejct 存入数据库转 byte[] - */ -@MappedJdbcTypes(JdbcType.BLOB) //数据库类型 -@MappedTypes({BaseBlob.class}) // javaBean 类型 -public class ObjectAndByteArrayTypeHandler implements TypeHandler { // 泛型:javaBean 类型 - - /** - * 存入数据库前的转换 - * @param ps - * @param index - * @param baseBlob - * @param jdbcType - * @throws SQLException - */ - @Override - public void setParameter(PreparedStatement ps, int index, BaseBlob baseBlob, JdbcType jdbcType) throws SQLException { - try { - ps.setBlob(index, new ByteArrayInputStream(baseBlob.toByteArray())); - } catch (IOException e) { - e.printStackTrace(); - } - } - - /** - * 数据库对象转 javaBean 对象前的转换 - * @param resultSet - * @param columnName - * @return - * @throws SQLException - */ - @Override - public BaseBlob getResult(ResultSet resultSet, String columnName) throws SQLException { - return blob2ByteArray(resultSet.getBlob(columnName)); - } - - @Override - public BaseBlob getResult(ResultSet resultSet, int columnIndex) throws SQLException { - return blob2ByteArray(resultSet.getBlob(columnIndex)); - } - - @Override - public BaseBlob getResult(CallableStatement callableStatement, int columnIndex) throws SQLException { - return blob2ByteArray(callableStatement.getBlob(columnIndex)); - } - - private BaseBlob blob2ByteArray(Blob blob) { - - try { - - ObjectInputStream ois = new ObjectInputStream(blob.getBinaryStream()); - return (BaseBlob) ois.readObject(); - - } catch (IOException e) { - return null; - } catch (SQLException throwables) { - throwables.printStackTrace(); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - - return null; - } -} diff --git a/mini-game/src/main/java/com/mini/game/misc/PubSubManager.java b/mini-game/src/main/java/com/mini/game/misc/PubSubManager.java deleted file mode 100644 index 23b3cc67a8d73c97748a0cd8f0b13f30aa9b7e04..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/misc/PubSubManager.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.mini.game.misc; - -import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONObject; -import com.alibaba.fastjson2.TypeReference; -import com.mini.game.misc.pubsub.base.Pub; -import com.mini.game.misc.pubsub.base.Sub; -import lombok.extern.slf4j.Slf4j; -import org.apache.poi.ss.formula.functions.T; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.Map; - -/** - * @author: yumi - * @date: 2023-03-20 15:49 - * @Description: TODO - */ -@Slf4j -@Component -public class PubSubManager { - - public enum PubType { - LOGIN, // 登录 - COMPLETE_TASK, // 完成任务 - KILL_CHANGE // 杀敌数改变 - } - - @Autowired - public Map pubMap; - - /** - * 订阅 - * @param pubType - * @param sub - */ - public Sub subscribe(PubType pubType, Sub sub) { - if (pubMap.get(pubType.name()) == null) { - log.error("找不到发布者 [{}]", pubType.name()); - } - pubMap.get(pubType.name()).subscribe(sub); - return sub; - } - - public void cancel(PubType pubType, Sub sub) { - pubMap.get(pubType.name()).unsubscribe(sub); - } - - public void publish(PubType pubType) { - pubMap.get(pubType.name()).emit(null); - } - - public void publish(PubType pubType, T obj) { - pubMap.get(pubType.name()).emit(obj); - } - - -} diff --git a/mini-game/src/main/java/com/mini/game/misc/pubsub/CompleteTaskPub.java b/mini-game/src/main/java/com/mini/game/misc/pubsub/CompleteTaskPub.java deleted file mode 100644 index 385f6f1d6301d3e87c94016cb4d643a7e07761ad..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/misc/pubsub/CompleteTaskPub.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.mini.game.misc.pubsub; - -import com.mini.game.misc.pubsub.base.Pub; -import com.mini.game.misc.pubsub.base.Sub; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; - -/** - * @author: yumi - * @date: 2023-03-22 10:56 - * @Description: 完成任务发布 - */ -@Slf4j -@Component("COMPLETE_TASK") -public class CompleteTaskPub implements Pub { - - private List subs = new CopyOnWriteArrayList<>(); - - /** - * 发布通知 - */ - @Override - public void emit(T object) { - for (Sub sub : subs) { - sub.on(object); - } - } - - @Override - public void subscribe(Sub sub) { - subs.add(sub); - } - - @Override - public void unsubscribe(Sub sub) { - subs.remove(sub); - } -} diff --git a/mini-game/src/main/java/com/mini/game/misc/pubsub/KillChangePub.java b/mini-game/src/main/java/com/mini/game/misc/pubsub/KillChangePub.java deleted file mode 100644 index 34c7d0e88ae1b028f9947868f3fda437d0d30247..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/misc/pubsub/KillChangePub.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.mini.game.misc.pubsub; - -import com.mini.game.misc.pubsub.base.Pub; -import com.mini.game.misc.pubsub.base.Sub; -import org.springframework.stereotype.Component; - -import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; - -/** - * @author: yumi - * @date: 2023-03-24 16:23 - * @Description: TODO - */ -@Component("KILL_CHANGE") -public class KillChangePub implements Pub { - - private List subs = new CopyOnWriteArrayList<>(); - - /** - * 发布通知 - */ - @Override - public void emit(T object) { - for (Sub sub : subs) { - sub.on(object); - } - } - - @Override - public void subscribe(Sub sub) { - subs.add(sub); - } - - @Override - public void unsubscribe(Sub sub) { - subs.remove(sub); - } -} diff --git a/mini-game/src/main/java/com/mini/game/misc/pubsub/LoginPub.java b/mini-game/src/main/java/com/mini/game/misc/pubsub/LoginPub.java deleted file mode 100644 index eb3885e14e2c952eb11d014ec9feab49ad223158..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/misc/pubsub/LoginPub.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.mini.game.misc.pubsub; - -import com.mini.game.misc.pubsub.base.Pub; -import com.mini.game.misc.pubsub.base.Sub; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.List; -import java.util.Map; -import java.util.concurrent.CopyOnWriteArrayList; - -/** - * 发布订阅通用的劣势是指定传参困难 - * @author: yumi - * @date: 2023-03-20 16:36 - * @Description: 登录发布 - */ -@Data -@Slf4j -@Component("LOGIN") -public class LoginPub implements Pub { - - private List subs = new CopyOnWriteArrayList<>(); - - /** - * 发布通知 - */ - @Override - public void emit(T object) { - for (Sub sub : subs) { - sub.on(object); - } - } - - @Override - public void subscribe(Sub sub) { - subs.add(sub); - } - - @Override - public void unsubscribe(Sub sub) { - subs.remove(sub); - } -} diff --git a/mini-game/src/main/java/com/mini/game/misc/pubsub/base/Pub.java b/mini-game/src/main/java/com/mini/game/misc/pubsub/base/Pub.java deleted file mode 100644 index 04b621e6e23436fd126dc0c0abb890f571a7a88d..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/misc/pubsub/base/Pub.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mini.game.misc.pubsub.base; - -/** - * @author: yumi - * @date: 2023-03-20 16:34 - * @Description: TODO - */ -public interface Pub { - - void emit(T object); - - void subscribe(Sub sub); - - void unsubscribe(Sub sub); - -} diff --git a/mini-game/src/main/java/com/mini/game/misc/pubsub/base/Sub.java b/mini-game/src/main/java/com/mini/game/misc/pubsub/base/Sub.java deleted file mode 100644 index 05b9de4fced7ac6495d60201085ec5b8b460241e..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/misc/pubsub/base/Sub.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.mini.game.misc.pubsub.base; - -/** - * @author: yumi - * @date: 2023-03-20 15:47 - * @Description: 发布订阅,主题 - */ -public interface Sub { - void on(T object); -} diff --git a/mini-game/src/main/java/com/mini/game/pojo/blob/BaseBlob.java b/mini-game/src/main/java/com/mini/game/pojo/blob/BaseBlob.java deleted file mode 100644 index f3ef9cd2a4a9c69b42f675dd918295da2b973d7c..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/pojo/blob/BaseBlob.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.mini.game.pojo.blob; - -import lombok.Data; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectOutputStream; -import java.io.Serializable; - -/** - * @author: yumi - * @date: 2023/2/19 10:24 - * @Description: TODO - */ -@Data -public class BaseBlob implements Serializable { - - public byte[] toByteArray() throws IOException { - ByteArrayOutputStream bo = new ByteArrayOutputStream(); - ObjectOutputStream oos = new ObjectOutputStream(bo); - oos.writeObject(this); - return bo.toByteArray(); - } -} diff --git a/mini-game/src/main/java/com/mini/game/pojo/blob/WarOrder.java b/mini-game/src/main/java/com/mini/game/pojo/blob/WarOrder.java deleted file mode 100644 index fbaa102a3a56a55f69aa80937219a8a754017101..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/pojo/blob/WarOrder.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.mini.game.pojo.blob; - -import com.alibaba.excel.annotation.ExcelIgnore; -import com.mini.common.utils.SpringUtils; -import com.mini.game.pojo.excel.ExcelWarOrderTask; -import com.mini.game.service.impl.WarOrderServiceImpl; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; -import java.text.DateFormat; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.List; -import java.util.Map; - -/** - * @author: yumi - * @date: 2023-03-21 16:34 - * @Description: TODO - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class WarOrder extends BaseBlob { - - /** - * 当前战令积分 - */ - private Long curPoint; - - /** - * 是否为 vip - */ - private Boolean isVip; - - /** - * 已领取的奖励 ID - */ - private List receivePrizeId; - - /** - * 完成任务情况,key: 任务 ID,task: 任务情况 - * ps: 限时任务分为两种,一种全局,一种独立,全局和独立限时的时间都可以加在这里用作判断(暂时都是全局) - */ - private Map taskInfoMap; - - @Data - public static class TaskInfo implements Serializable { - /** - * 当前条件到达个数 - */ - private Long curCompleteNum = 0L; - - /** - * 当前完成次数 - */ - private Integer curCompleteTimes = 0; - - /** - * 下次刷新时间 - */ - private LocalDateTime nextRefreshTime; - } - - public TaskInfo getTaskInfo(Long taskId) { - // 如果为空则初始化 - if (taskInfoMap.get(taskId) == null) { - TaskInfo taskInfo = new TaskInfo(); - WarOrderServiceImpl warOrderService = SpringUtils.getBean(WarOrderServiceImpl.class); - ExcelWarOrderTask task = warOrderService.getTask(taskId); - - // 根据任务开启时间,获取下一次任务的刷新时间 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - LocalDateTime openTime = LocalDateTime.parse(task.getOpenTime(), formatter); - long nextRefreshDay = task.getResetNum() - (LocalDateTime.now().minusHours(6).toLocalDate().toEpochDay() - openTime.toLocalDate().toEpochDay()) % task.getResetNum(); - taskInfo.setNextRefreshTime(LocalDateTime.now().minusHours(6).toLocalDate().plusDays(nextRefreshDay).atTime(6, 0, 0)); - - taskInfoMap.put(taskId, taskInfo); - } - return taskInfoMap.get(taskId); - } - - public void putTaskInfo(Long taskId, TaskInfo taskInfo) { - taskInfoMap.put(taskId, taskInfo); - } - -} diff --git a/mini-game/src/main/java/com/mini/game/pojo/db/ModifyPlayerMsg.java b/mini-game/src/main/java/com/mini/game/pojo/db/ModifyPlayerMsg.java deleted file mode 100644 index 0bb5f0920af2dc5e8290d62b82307d057da76f5d..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/pojo/db/ModifyPlayerMsg.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.mini.game.pojo.db; - -import com.mini.common.message.BaseMessage; -import com.mini.game.pojo.entity.Player; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author: yumi - * @date: 2023-03-22 14:55 - * @Description: TODO - */ -@Data -@NoArgsConstructor -public class ModifyPlayerMsg extends BaseMessage { - - private Player player; - - public ModifyPlayerMsg(Player player) { - this.player = player; - this.getMsgHeader().setPlayerId(player.getId()); - } - -} diff --git a/mini-game/src/main/java/com/mini/game/pojo/entity/Player.java b/mini-game/src/main/java/com/mini/game/pojo/entity/Player.java deleted file mode 100644 index fc06f63a8c0076a834ede427e1ff0e7844960829..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/pojo/entity/Player.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.mini.game.pojo.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.mini.game.manager.BaseInfoManager; -import com.mini.game.manager.WarOrderManager; -import com.mini.game.manager.WoodShopManager; -import com.mini.game.misc.ObjectAndByteArrayTypeHandler; -import com.mini.game.pojo.blob.BaseInfo; -import com.mini.game.pojo.blob.PlayerCurrency; -import com.mini.game.pojo.blob.WarOrder; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -import java.io.FileNotFoundException; -import java.io.Serializable; - -/** - * @author: yumi - * @date: 2023/2/18 12:16 - * @Description: TODO - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@TableName(value = "player", autoResultMap = true) -@Slf4j -public class Player implements Serializable { - - @TableId(type = IdType.AUTO) - private Long id; - - @TableField("account") - private String account; - - @TableField("pwd") - private String pwd; - - /** - * 货币 - */ - @TableField(value = "currency", typeHandler = ObjectAndByteArrayTypeHandler.class) - private PlayerCurrency currency; - - /** - * 战令 - */ - @TableField(value = "warOrder", typeHandler = ObjectAndByteArrayTypeHandler.class) - private WarOrder warOrder; - - /** - * 通用信息 - */ - @TableField(value = "baseInfo", typeHandler = ObjectAndByteArrayTypeHandler.class) - private BaseInfo baseInfo; - - /** - * 木材商店 - */ - @TableField(exist = false) - private WoodShopManager woodShopManager; - - /** - * 战令系统 - */ - @TableField(exist = false) - private WarOrderManager warOrderManager; - - /** - * 通用信息系统 - */ - @TableField(exist = false) - private BaseInfoManager baseInfoManager; - - public void init() { - this.woodShopManager = new WoodShopManager(this, currency); - this.warOrderManager = new WarOrderManager(this, warOrder); - this.baseInfoManager = new BaseInfoManager(this, baseInfo); - log.info("初始化玩家 [{}]", this.toString()); - } - - /** - * 周期性监测 - */ - public void heartBeat() { -// log.info("监测玩家 [{}]", account); - woodShopManager.heartBeat(); - warOrderManager.heartBeat(); - baseInfoManager.heartBeat(); - } - - - /** - * 重写解决 lombok toString() 循环引用问题 - * @return - */ - @Override - public String toString() { - return "Player{" + - "id=" + id + - ", account='" + account + '\'' + - ", pwd='" + pwd + '\'' + - ", currency=" + currency + - ", warOrder=" + warOrder + - ", baseInfo=" + baseInfo + - '}'; - } -} diff --git a/mini-game/src/main/java/com/mini/game/pojo/excel/ExcelDataTransformListener.java b/mini-game/src/main/java/com/mini/game/pojo/excel/ExcelDataTransformListener.java deleted file mode 100644 index b1ed9cfb5bba5c2332617e4c0ff11e3261232860..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/pojo/excel/ExcelDataTransformListener.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.mini.game.pojo.excel; - -import com.alibaba.excel.context.AnalysisContext; -import com.alibaba.excel.event.AnalysisEventListener; -import lombok.Getter; -import lombok.extern.slf4j.Slf4j; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * @author: yumi - * @date: 2023/2/18 16:43 - * @Description: TODO - */ -@Slf4j -@Getter -public class ExcelDataTransformListener extends AnalysisEventListener { - - private List data = new ArrayList<>(); - - - /** - * Excel 获取到每一条数据都会执行一次 - * @param bean - * @param analysisContext - */ - @Override - public void invoke(T bean, AnalysisContext analysisContext) { - data.add(bean); -// log.info("add:[{}]", bean); - } - - /** - * 获取所有数据后执行 - * @param analysisContext - */ - @Override - public void doAfterAllAnalysed(AnalysisContext analysisContext) { -// log.info("表格读取完成"); - } - - - /** - * 读取表头信息 - * @param headMap - * @param context - */ - @Override - public void invokeHeadMap(Map headMap, AnalysisContext context) { -// log.info("表头信息:[{}]", headMap); - } - - - @Override - public void onException(Exception exception, AnalysisContext context) throws Exception { - log.error("表格读取发生异常:[{}]", exception.getMessage()); - } - - -} diff --git a/mini-game/src/main/java/com/mini/game/pojo/excel/ExcelGoods.java b/mini-game/src/main/java/com/mini/game/pojo/excel/ExcelGoods.java deleted file mode 100644 index 8159788c442b5f3890330c73cd41b42880300938..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/pojo/excel/ExcelGoods.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.mini.game.pojo.excel; - -import com.alibaba.excel.annotation.ExcelProperty; -import lombok.Data; - -/** - * @author: yumi - * @date: 2023/2/18 16:06 - * @Description: TODO - */ -@Data -public class ExcelGoods { - - @ExcelProperty("商品编号") - private Long id; - - @ExcelProperty("商品名称") - private String name; - - @ExcelProperty("花费金币") - private Long gold; - - @ExcelProperty("获得木材") - private Long wood; - - -} diff --git a/mini-game/src/main/java/com/mini/game/pojo/excel/ExcelWarOrderPrize.java b/mini-game/src/main/java/com/mini/game/pojo/excel/ExcelWarOrderPrize.java deleted file mode 100644 index fef1a02ff7c987a7a9fb644500402459cf3f2f59..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/pojo/excel/ExcelWarOrderPrize.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.mini.game.pojo.excel; - -import com.alibaba.excel.annotation.ExcelProperty; -import lombok.Data; - -/** - * @author: yumi - * @date: 2023-03-21 17:53 - * @Description: 战令奖励 - */ -@Data -public class ExcelWarOrderPrize { - - // 奖励类型 - public static final String PRIZE_EXP = "经验"; // 经验(暂无) - public static final String PRIZE_ITEM = "物品"; // 物品(暂无) - public static final String PRIZE_GOLD = "金币"; // 金币 - public static final String PRIZE_WOOD = "木材"; // 木材 - - // 路线 - public static final String ROUTE_COMMON = "普通"; - public static final String ROUTE_VIP = "vip"; - - @ExcelProperty("奖励ID") - private Long prizeId; - - /** - * 需要到达积分 - */ - @ExcelProperty("需要到达积分") - private Long needPoints; - - /** - * 奖励类型 - */ - @ExcelProperty("奖励类型") - private String prizeType; - - /** - * 物品 ID - */ - @ExcelProperty("物品ID") - private Long itemId; - - /** - * 物品个数 - */ - @ExcelProperty("物品个数") - private Long itemNum; - - /** - * 路线 - */ - @ExcelProperty("路线") - private String route; - -} diff --git a/mini-game/src/main/java/com/mini/game/pojo/excel/ExcelWarOrderTask.java b/mini-game/src/main/java/com/mini/game/pojo/excel/ExcelWarOrderTask.java deleted file mode 100644 index 5b32c814f9d7899689dc6536c7a9f2bd1d7eb927..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/pojo/excel/ExcelWarOrderTask.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.mini.game.pojo.excel; - -import com.alibaba.excel.annotation.ExcelIgnore; -import com.alibaba.excel.annotation.ExcelProperty; -import lombok.Data; - -import java.time.LocalDateTime; - -/** - * @author: yumi - * @date: 2023-03-22 09:12 - * @Description: 战令任务 - */ -@Data -public class ExcelWarOrderTask { - - // 任务类型 - public static final String TASK_LOGIN = "登录"; - public static final String TASK_KILL = "杀敌数"; - - // 重置类型 - public static final String RESET_UNIT_YEAR = "年"; - public static final String RESET_UNIT_MONTH = "月"; - public static final String RESET_UNIT_DAY = "日"; - public static final String RESET_UNIT_HOUR = "时"; - public static final String RESET_UNIT_MINUTE = "分"; - public static final String RESET_UNIT_SECOND = "秒"; - public static final String RESET_UNIT_WEEK = "周"; - - /** - * 任务 ID - */ - @ExcelProperty("任务ID") - private Long taskId; - - /** - * 任务名称 - */ - @ExcelProperty("任务名称") - private String taskName; - - /** - * 任务完成条件(类型) - */ - @ExcelProperty("任务完成类型") - private String taskType; - - /** - * 条件到达个数(xx积分,xx时间) - */ - @ExcelProperty("任务条件到达个数") - private Long completeNum; - - /** - * 重置类型单位 - */ - @ExcelProperty("重置时间单位") - private String resetTypeUnit; - - /** - * 重置类型个数(x天,x周) - */ - @ExcelProperty("重置单位个数") - private Integer resetNum; - - /** - * 可完成次数 - */ - @ExcelProperty("可完成次数") - private Integer canCompleteTimes; - - /** - * 奖励积分 - */ - @ExcelProperty("奖励积分") - private Integer prizePoint; - - /** - * 开启时间 - */ - @ExcelProperty("开启时间") - private String openTime; - -} diff --git a/mini-game/src/main/java/com/mini/game/pojo/notify/CompleteTaskNotify.java b/mini-game/src/main/java/com/mini/game/pojo/notify/CompleteTaskNotify.java deleted file mode 100644 index 4f1c33a41d410766168cf06ca71441bef74d8ef1..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/pojo/notify/CompleteTaskNotify.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.mini.game.pojo.notify; - -import lombok.Data; - -/** - * @author: yumi - * @date: 2023-03-22 10:45 - * @Description: 完成任务的通知 - */ -@Data -public class CompleteTaskNotify { - - private Long playerId; - - private Long taskId; - -} diff --git a/mini-game/src/main/java/com/mini/game/proto/ProtoMsg.java b/mini-game/src/main/java/com/mini/game/proto/ProtoMsg.java deleted file mode 100644 index e8ad63e495dc47eb5a3355b826507b98faecc0b2..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/proto/ProtoMsg.java +++ /dev/null @@ -1,4557 +0,0 @@ -package com.mini.game.proto;// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Entity.proto - -public final class ProtoMsg { - private ProtoMsg() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistryLite registry) { - } - - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - registerAllExtensions( - (com.google.protobuf.ExtensionRegistryLite) registry); - } - public interface CGLoginSuccessMsgOrBuilder extends - // @@protoc_insertion_point(interface_extends:CGLoginSuccessMsg) - com.google.protobuf.MessageOrBuilder { - - /** - * optional int64 playerId = 1; - */ - long getPlayerId(); - } - /** - * Protobuf type {@code CGLoginSuccessMsg} - */ - public static final class CGLoginSuccessMsg extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:CGLoginSuccessMsg) - CGLoginSuccessMsgOrBuilder { - // Use CGLoginSuccessMsg.newBuilder() to construct. - private CGLoginSuccessMsg(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private CGLoginSuccessMsg() { - playerId_ = 0L; - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private CGLoginSuccessMsg( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - case 8: { - - playerId_ = input.readInt64(); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_CGLoginSuccessMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_CGLoginSuccessMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - CGLoginSuccessMsg.class, Builder.class); - } - - public static final int PLAYERID_FIELD_NUMBER = 1; - private long playerId_; - /** - * optional int64 playerId = 1; - */ - public long getPlayerId() { - return playerId_; - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (playerId_ != 0L) { - output.writeInt64(1, playerId_); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (playerId_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(1, playerId_); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof CGLoginSuccessMsg)) { - return super.equals(obj); - } - CGLoginSuccessMsg other = (CGLoginSuccessMsg) obj; - - boolean result = true; - result = result && (getPlayerId() - == other.getPlayerId()); - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (37 * hash) + PLAYERID_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getPlayerId()); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static CGLoginSuccessMsg parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static CGLoginSuccessMsg parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static CGLoginSuccessMsg parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static CGLoginSuccessMsg parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static CGLoginSuccessMsg parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static CGLoginSuccessMsg parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static CGLoginSuccessMsg parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static CGLoginSuccessMsg parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static CGLoginSuccessMsg parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static CGLoginSuccessMsg parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(CGLoginSuccessMsg prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code CGLoginSuccessMsg} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:CGLoginSuccessMsg) - CGLoginSuccessMsgOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_CGLoginSuccessMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_CGLoginSuccessMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - CGLoginSuccessMsg.class, Builder.class); - } - - // Construct using ProtoMsg.CGLoginSuccessMsg.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - playerId_ = 0L; - - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_CGLoginSuccessMsg_descriptor; - } - - public CGLoginSuccessMsg getDefaultInstanceForType() { - return CGLoginSuccessMsg.getDefaultInstance(); - } - - public CGLoginSuccessMsg build() { - CGLoginSuccessMsg result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public CGLoginSuccessMsg buildPartial() { - CGLoginSuccessMsg result = new CGLoginSuccessMsg(this); - result.playerId_ = playerId_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof CGLoginSuccessMsg) { - return mergeFrom((CGLoginSuccessMsg)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(CGLoginSuccessMsg other) { - if (other == CGLoginSuccessMsg.getDefaultInstance()) return this; - if (other.getPlayerId() != 0L) { - setPlayerId(other.getPlayerId()); - } - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - CGLoginSuccessMsg parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (CGLoginSuccessMsg) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private long playerId_ ; - /** - * optional int64 playerId = 1; - */ - public long getPlayerId() { - return playerId_; - } - /** - * optional int64 playerId = 1; - */ - public Builder setPlayerId(long value) { - - playerId_ = value; - onChanged(); - return this; - } - /** - * optional int64 playerId = 1; - */ - public Builder clearPlayerId() { - - playerId_ = 0L; - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:CGLoginSuccessMsg) - } - - // @@protoc_insertion_point(class_scope:CGLoginSuccessMsg) - private static final CGLoginSuccessMsg DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new CGLoginSuccessMsg(); - } - - public static CGLoginSuccessMsg getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public CGLoginSuccessMsg parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new CGLoginSuccessMsg(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public CGLoginSuccessMsg getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface GCLoginSuccessMsgOrBuilder extends - // @@protoc_insertion_point(interface_extends:GCLoginSuccessMsg) - com.google.protobuf.MessageOrBuilder { - } - /** - * Protobuf type {@code GCLoginSuccessMsg} - */ - public static final class GCLoginSuccessMsg extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:GCLoginSuccessMsg) - GCLoginSuccessMsgOrBuilder { - // Use GCLoginSuccessMsg.newBuilder() to construct. - private GCLoginSuccessMsg(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private GCLoginSuccessMsg() { - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private GCLoginSuccessMsg( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_GCLoginSuccessMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_GCLoginSuccessMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - GCLoginSuccessMsg.class, Builder.class); - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof GCLoginSuccessMsg)) { - return super.equals(obj); - } - GCLoginSuccessMsg other = (GCLoginSuccessMsg) obj; - - boolean result = true; - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static GCLoginSuccessMsg parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static GCLoginSuccessMsg parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static GCLoginSuccessMsg parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static GCLoginSuccessMsg parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static GCLoginSuccessMsg parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static GCLoginSuccessMsg parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static GCLoginSuccessMsg parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static GCLoginSuccessMsg parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static GCLoginSuccessMsg parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static GCLoginSuccessMsg parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(GCLoginSuccessMsg prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code GCLoginSuccessMsg} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:GCLoginSuccessMsg) - GCLoginSuccessMsgOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_GCLoginSuccessMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_GCLoginSuccessMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - GCLoginSuccessMsg.class, Builder.class); - } - - // Construct using ProtoMsg.GCLoginSuccessMsg.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_GCLoginSuccessMsg_descriptor; - } - - public GCLoginSuccessMsg getDefaultInstanceForType() { - return GCLoginSuccessMsg.getDefaultInstance(); - } - - public GCLoginSuccessMsg build() { - GCLoginSuccessMsg result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public GCLoginSuccessMsg buildPartial() { - GCLoginSuccessMsg result = new GCLoginSuccessMsg(this); - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof GCLoginSuccessMsg) { - return mergeFrom((GCLoginSuccessMsg)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(GCLoginSuccessMsg other) { - if (other == GCLoginSuccessMsg.getDefaultInstance()) return this; - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - GCLoginSuccessMsg parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (GCLoginSuccessMsg) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:GCLoginSuccessMsg) - } - - // @@protoc_insertion_point(class_scope:GCLoginSuccessMsg) - private static final GCLoginSuccessMsg DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new GCLoginSuccessMsg(); - } - - public static GCLoginSuccessMsg getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public GCLoginSuccessMsg parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new GCLoginSuccessMsg(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public GCLoginSuccessMsg getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface CGBuyGoodsMsgOrBuilder extends - // @@protoc_insertion_point(interface_extends:CGBuyGoodsMsg) - com.google.protobuf.MessageOrBuilder { - - /** - * optional int64 buyGoodId = 1; - */ - long getBuyGoodId(); - } - /** - * Protobuf type {@code CGBuyGoodsMsg} - */ - public static final class CGBuyGoodsMsg extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:CGBuyGoodsMsg) - CGBuyGoodsMsgOrBuilder { - // Use CGBuyGoodsMsg.newBuilder() to construct. - private CGBuyGoodsMsg(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private CGBuyGoodsMsg() { - buyGoodId_ = 0L; - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private CGBuyGoodsMsg( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - case 8: { - - buyGoodId_ = input.readInt64(); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_CGBuyGoodsMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_CGBuyGoodsMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - CGBuyGoodsMsg.class, Builder.class); - } - - public static final int BUYGOODID_FIELD_NUMBER = 1; - private long buyGoodId_; - /** - * optional int64 buyGoodId = 1; - */ - public long getBuyGoodId() { - return buyGoodId_; - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (buyGoodId_ != 0L) { - output.writeInt64(1, buyGoodId_); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (buyGoodId_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(1, buyGoodId_); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof CGBuyGoodsMsg)) { - return super.equals(obj); - } - CGBuyGoodsMsg other = (CGBuyGoodsMsg) obj; - - boolean result = true; - result = result && (getBuyGoodId() - == other.getBuyGoodId()); - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (37 * hash) + BUYGOODID_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getBuyGoodId()); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static CGBuyGoodsMsg parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static CGBuyGoodsMsg parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static CGBuyGoodsMsg parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static CGBuyGoodsMsg parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static CGBuyGoodsMsg parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static CGBuyGoodsMsg parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static CGBuyGoodsMsg parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static CGBuyGoodsMsg parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static CGBuyGoodsMsg parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static CGBuyGoodsMsg parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(CGBuyGoodsMsg prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code CGBuyGoodsMsg} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:CGBuyGoodsMsg) - CGBuyGoodsMsgOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_CGBuyGoodsMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_CGBuyGoodsMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - CGBuyGoodsMsg.class, Builder.class); - } - - // Construct using ProtoMsg.CGBuyGoodsMsg.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - buyGoodId_ = 0L; - - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_CGBuyGoodsMsg_descriptor; - } - - public CGBuyGoodsMsg getDefaultInstanceForType() { - return CGBuyGoodsMsg.getDefaultInstance(); - } - - public CGBuyGoodsMsg build() { - CGBuyGoodsMsg result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public CGBuyGoodsMsg buildPartial() { - CGBuyGoodsMsg result = new CGBuyGoodsMsg(this); - result.buyGoodId_ = buyGoodId_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof CGBuyGoodsMsg) { - return mergeFrom((CGBuyGoodsMsg)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(CGBuyGoodsMsg other) { - if (other == CGBuyGoodsMsg.getDefaultInstance()) return this; - if (other.getBuyGoodId() != 0L) { - setBuyGoodId(other.getBuyGoodId()); - } - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - CGBuyGoodsMsg parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (CGBuyGoodsMsg) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private long buyGoodId_ ; - /** - * optional int64 buyGoodId = 1; - */ - public long getBuyGoodId() { - return buyGoodId_; - } - /** - * optional int64 buyGoodId = 1; - */ - public Builder setBuyGoodId(long value) { - - buyGoodId_ = value; - onChanged(); - return this; - } - /** - * optional int64 buyGoodId = 1; - */ - public Builder clearBuyGoodId() { - - buyGoodId_ = 0L; - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:CGBuyGoodsMsg) - } - - // @@protoc_insertion_point(class_scope:CGBuyGoodsMsg) - private static final CGBuyGoodsMsg DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new CGBuyGoodsMsg(); - } - - public static CGBuyGoodsMsg getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public CGBuyGoodsMsg parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new CGBuyGoodsMsg(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public CGBuyGoodsMsg getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface GCBuyGoodsMsgOrBuilder extends - // @@protoc_insertion_point(interface_extends:GCBuyGoodsMsg) - com.google.protobuf.MessageOrBuilder { - - /** - * optional string responseMsg = 1; - */ - String getResponseMsg(); - /** - * optional string responseMsg = 1; - */ - com.google.protobuf.ByteString - getResponseMsgBytes(); - } - /** - * Protobuf type {@code GCBuyGoodsMsg} - */ - public static final class GCBuyGoodsMsg extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:GCBuyGoodsMsg) - GCBuyGoodsMsgOrBuilder { - // Use GCBuyGoodsMsg.newBuilder() to construct. - private GCBuyGoodsMsg(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private GCBuyGoodsMsg() { - responseMsg_ = ""; - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private GCBuyGoodsMsg( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - case 10: { - String s = input.readStringRequireUtf8(); - - responseMsg_ = s; - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_GCBuyGoodsMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_GCBuyGoodsMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - GCBuyGoodsMsg.class, Builder.class); - } - - public static final int RESPONSEMSG_FIELD_NUMBER = 1; - private volatile Object responseMsg_; - /** - * optional string responseMsg = 1; - */ - public String getResponseMsg() { - Object ref = responseMsg_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - responseMsg_ = s; - return s; - } - } - /** - * optional string responseMsg = 1; - */ - public com.google.protobuf.ByteString - getResponseMsgBytes() { - Object ref = responseMsg_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - responseMsg_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!getResponseMsgBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, responseMsg_); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!getResponseMsgBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, responseMsg_); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof GCBuyGoodsMsg)) { - return super.equals(obj); - } - GCBuyGoodsMsg other = (GCBuyGoodsMsg) obj; - - boolean result = true; - result = result && getResponseMsg() - .equals(other.getResponseMsg()); - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (37 * hash) + RESPONSEMSG_FIELD_NUMBER; - hash = (53 * hash) + getResponseMsg().hashCode(); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static GCBuyGoodsMsg parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static GCBuyGoodsMsg parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static GCBuyGoodsMsg parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static GCBuyGoodsMsg parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static GCBuyGoodsMsg parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static GCBuyGoodsMsg parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static GCBuyGoodsMsg parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static GCBuyGoodsMsg parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static GCBuyGoodsMsg parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static GCBuyGoodsMsg parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(GCBuyGoodsMsg prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code GCBuyGoodsMsg} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:GCBuyGoodsMsg) - GCBuyGoodsMsgOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_GCBuyGoodsMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_GCBuyGoodsMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - GCBuyGoodsMsg.class, Builder.class); - } - - // Construct using ProtoMsg.GCBuyGoodsMsg.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - responseMsg_ = ""; - - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_GCBuyGoodsMsg_descriptor; - } - - public GCBuyGoodsMsg getDefaultInstanceForType() { - return GCBuyGoodsMsg.getDefaultInstance(); - } - - public GCBuyGoodsMsg build() { - GCBuyGoodsMsg result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public GCBuyGoodsMsg buildPartial() { - GCBuyGoodsMsg result = new GCBuyGoodsMsg(this); - result.responseMsg_ = responseMsg_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof GCBuyGoodsMsg) { - return mergeFrom((GCBuyGoodsMsg)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(GCBuyGoodsMsg other) { - if (other == GCBuyGoodsMsg.getDefaultInstance()) return this; - if (!other.getResponseMsg().isEmpty()) { - responseMsg_ = other.responseMsg_; - onChanged(); - } - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - GCBuyGoodsMsg parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (GCBuyGoodsMsg) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private Object responseMsg_ = ""; - /** - * optional string responseMsg = 1; - */ - public String getResponseMsg() { - Object ref = responseMsg_; - if (!(ref instanceof String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - responseMsg_ = s; - return s; - } else { - return (String) ref; - } - } - /** - * optional string responseMsg = 1; - */ - public com.google.protobuf.ByteString - getResponseMsgBytes() { - Object ref = responseMsg_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - responseMsg_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * optional string responseMsg = 1; - */ - public Builder setResponseMsg( - String value) { - if (value == null) { - throw new NullPointerException(); - } - - responseMsg_ = value; - onChanged(); - return this; - } - /** - * optional string responseMsg = 1; - */ - public Builder clearResponseMsg() { - - responseMsg_ = getDefaultInstance().getResponseMsg(); - onChanged(); - return this; - } - /** - * optional string responseMsg = 1; - */ - public Builder setResponseMsgBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - responseMsg_ = value; - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:GCBuyGoodsMsg) - } - - // @@protoc_insertion_point(class_scope:GCBuyGoodsMsg) - private static final GCBuyGoodsMsg DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new GCBuyGoodsMsg(); - } - - public static GCBuyGoodsMsg getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public GCBuyGoodsMsg parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new GCBuyGoodsMsg(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public GCBuyGoodsMsg getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface CGReceiveWarOrderPrizeMsgOrBuilder extends - // @@protoc_insertion_point(interface_extends:CGReceiveWarOrderPrizeMsg) - com.google.protobuf.MessageOrBuilder { - - /** - * optional int64 prizeId = 1; - */ - long getPrizeId(); - } - /** - * Protobuf type {@code CGReceiveWarOrderPrizeMsg} - */ - public static final class CGReceiveWarOrderPrizeMsg extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:CGReceiveWarOrderPrizeMsg) - CGReceiveWarOrderPrizeMsgOrBuilder { - // Use CGReceiveWarOrderPrizeMsg.newBuilder() to construct. - private CGReceiveWarOrderPrizeMsg(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private CGReceiveWarOrderPrizeMsg() { - prizeId_ = 0L; - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private CGReceiveWarOrderPrizeMsg( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - case 8: { - - prizeId_ = input.readInt64(); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_CGReceiveWarOrderPrizeMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_CGReceiveWarOrderPrizeMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - CGReceiveWarOrderPrizeMsg.class, Builder.class); - } - - public static final int PRIZEID_FIELD_NUMBER = 1; - private long prizeId_; - /** - * optional int64 prizeId = 1; - */ - public long getPrizeId() { - return prizeId_; - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (prizeId_ != 0L) { - output.writeInt64(1, prizeId_); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (prizeId_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(1, prizeId_); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof CGReceiveWarOrderPrizeMsg)) { - return super.equals(obj); - } - CGReceiveWarOrderPrizeMsg other = (CGReceiveWarOrderPrizeMsg) obj; - - boolean result = true; - result = result && (getPrizeId() - == other.getPrizeId()); - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (37 * hash) + PRIZEID_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getPrizeId()); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static CGReceiveWarOrderPrizeMsg parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static CGReceiveWarOrderPrizeMsg parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static CGReceiveWarOrderPrizeMsg parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static CGReceiveWarOrderPrizeMsg parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static CGReceiveWarOrderPrizeMsg parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static CGReceiveWarOrderPrizeMsg parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static CGReceiveWarOrderPrizeMsg parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static CGReceiveWarOrderPrizeMsg parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static CGReceiveWarOrderPrizeMsg parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static CGReceiveWarOrderPrizeMsg parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(CGReceiveWarOrderPrizeMsg prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code CGReceiveWarOrderPrizeMsg} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:CGReceiveWarOrderPrizeMsg) - CGReceiveWarOrderPrizeMsgOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_CGReceiveWarOrderPrizeMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_CGReceiveWarOrderPrizeMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - CGReceiveWarOrderPrizeMsg.class, Builder.class); - } - - // Construct using ProtoMsg.CGReceiveWarOrderPrizeMsg.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - prizeId_ = 0L; - - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_CGReceiveWarOrderPrizeMsg_descriptor; - } - - public CGReceiveWarOrderPrizeMsg getDefaultInstanceForType() { - return CGReceiveWarOrderPrizeMsg.getDefaultInstance(); - } - - public CGReceiveWarOrderPrizeMsg build() { - CGReceiveWarOrderPrizeMsg result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public CGReceiveWarOrderPrizeMsg buildPartial() { - CGReceiveWarOrderPrizeMsg result = new CGReceiveWarOrderPrizeMsg(this); - result.prizeId_ = prizeId_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof CGReceiveWarOrderPrizeMsg) { - return mergeFrom((CGReceiveWarOrderPrizeMsg)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(CGReceiveWarOrderPrizeMsg other) { - if (other == CGReceiveWarOrderPrizeMsg.getDefaultInstance()) return this; - if (other.getPrizeId() != 0L) { - setPrizeId(other.getPrizeId()); - } - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - CGReceiveWarOrderPrizeMsg parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (CGReceiveWarOrderPrizeMsg) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private long prizeId_ ; - /** - * optional int64 prizeId = 1; - */ - public long getPrizeId() { - return prizeId_; - } - /** - * optional int64 prizeId = 1; - */ - public Builder setPrizeId(long value) { - - prizeId_ = value; - onChanged(); - return this; - } - /** - * optional int64 prizeId = 1; - */ - public Builder clearPrizeId() { - - prizeId_ = 0L; - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:CGReceiveWarOrderPrizeMsg) - } - - // @@protoc_insertion_point(class_scope:CGReceiveWarOrderPrizeMsg) - private static final CGReceiveWarOrderPrizeMsg DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new CGReceiveWarOrderPrizeMsg(); - } - - public static CGReceiveWarOrderPrizeMsg getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public CGReceiveWarOrderPrizeMsg parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new CGReceiveWarOrderPrizeMsg(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public CGReceiveWarOrderPrizeMsg getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface GCReceiveWarOrderPrizeMsgOrBuilder extends - // @@protoc_insertion_point(interface_extends:GCReceiveWarOrderPrizeMsg) - com.google.protobuf.MessageOrBuilder { - - /** - * optional string result = 1; - */ - String getResult(); - /** - * optional string result = 1; - */ - com.google.protobuf.ByteString - getResultBytes(); - } - /** - * Protobuf type {@code GCReceiveWarOrderPrizeMsg} - */ - public static final class GCReceiveWarOrderPrizeMsg extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:GCReceiveWarOrderPrizeMsg) - GCReceiveWarOrderPrizeMsgOrBuilder { - // Use GCReceiveWarOrderPrizeMsg.newBuilder() to construct. - private GCReceiveWarOrderPrizeMsg(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private GCReceiveWarOrderPrizeMsg() { - result_ = ""; - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private GCReceiveWarOrderPrizeMsg( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - case 10: { - String s = input.readStringRequireUtf8(); - - result_ = s; - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_GCReceiveWarOrderPrizeMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_GCReceiveWarOrderPrizeMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - GCReceiveWarOrderPrizeMsg.class, Builder.class); - } - - public static final int RESULT_FIELD_NUMBER = 1; - private volatile Object result_; - /** - * optional string result = 1; - */ - public String getResult() { - Object ref = result_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - result_ = s; - return s; - } - } - /** - * optional string result = 1; - */ - public com.google.protobuf.ByteString - getResultBytes() { - Object ref = result_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - result_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!getResultBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, result_); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!getResultBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, result_); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof GCReceiveWarOrderPrizeMsg)) { - return super.equals(obj); - } - GCReceiveWarOrderPrizeMsg other = (GCReceiveWarOrderPrizeMsg) obj; - - boolean result = true; - result = result && getResult() - .equals(other.getResult()); - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (37 * hash) + RESULT_FIELD_NUMBER; - hash = (53 * hash) + getResult().hashCode(); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static GCReceiveWarOrderPrizeMsg parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static GCReceiveWarOrderPrizeMsg parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static GCReceiveWarOrderPrizeMsg parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static GCReceiveWarOrderPrizeMsg parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static GCReceiveWarOrderPrizeMsg parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static GCReceiveWarOrderPrizeMsg parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static GCReceiveWarOrderPrizeMsg parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static GCReceiveWarOrderPrizeMsg parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static GCReceiveWarOrderPrizeMsg parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static GCReceiveWarOrderPrizeMsg parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(GCReceiveWarOrderPrizeMsg prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code GCReceiveWarOrderPrizeMsg} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:GCReceiveWarOrderPrizeMsg) - GCReceiveWarOrderPrizeMsgOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_GCReceiveWarOrderPrizeMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_GCReceiveWarOrderPrizeMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - GCReceiveWarOrderPrizeMsg.class, Builder.class); - } - - // Construct using ProtoMsg.GCReceiveWarOrderPrizeMsg.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - result_ = ""; - - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_GCReceiveWarOrderPrizeMsg_descriptor; - } - - public GCReceiveWarOrderPrizeMsg getDefaultInstanceForType() { - return GCReceiveWarOrderPrizeMsg.getDefaultInstance(); - } - - public GCReceiveWarOrderPrizeMsg build() { - GCReceiveWarOrderPrizeMsg result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public GCReceiveWarOrderPrizeMsg buildPartial() { - GCReceiveWarOrderPrizeMsg result = new GCReceiveWarOrderPrizeMsg(this); - result.result_ = result_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof GCReceiveWarOrderPrizeMsg) { - return mergeFrom((GCReceiveWarOrderPrizeMsg)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(GCReceiveWarOrderPrizeMsg other) { - if (other == GCReceiveWarOrderPrizeMsg.getDefaultInstance()) return this; - if (!other.getResult().isEmpty()) { - result_ = other.result_; - onChanged(); - } - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - GCReceiveWarOrderPrizeMsg parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (GCReceiveWarOrderPrizeMsg) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private Object result_ = ""; - /** - * optional string result = 1; - */ - public String getResult() { - Object ref = result_; - if (!(ref instanceof String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - result_ = s; - return s; - } else { - return (String) ref; - } - } - /** - * optional string result = 1; - */ - public com.google.protobuf.ByteString - getResultBytes() { - Object ref = result_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - result_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * optional string result = 1; - */ - public Builder setResult( - String value) { - if (value == null) { - throw new NullPointerException(); - } - - result_ = value; - onChanged(); - return this; - } - /** - * optional string result = 1; - */ - public Builder clearResult() { - - result_ = getDefaultInstance().getResult(); - onChanged(); - return this; - } - /** - * optional string result = 1; - */ - public Builder setResultBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - result_ = value; - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:GCReceiveWarOrderPrizeMsg) - } - - // @@protoc_insertion_point(class_scope:GCReceiveWarOrderPrizeMsg) - private static final GCReceiveWarOrderPrizeMsg DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new GCReceiveWarOrderPrizeMsg(); - } - - public static GCReceiveWarOrderPrizeMsg getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public GCReceiveWarOrderPrizeMsg parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new GCReceiveWarOrderPrizeMsg(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public GCReceiveWarOrderPrizeMsg getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface CGAttackMsgOrBuilder extends - // @@protoc_insertion_point(interface_extends:CGAttackMsg) - com.google.protobuf.MessageOrBuilder { - } - /** - * Protobuf type {@code CGAttackMsg} - */ - public static final class CGAttackMsg extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:CGAttackMsg) - CGAttackMsgOrBuilder { - // Use CGAttackMsg.newBuilder() to construct. - private CGAttackMsg(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private CGAttackMsg() { - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private CGAttackMsg( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_CGAttackMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_CGAttackMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - CGAttackMsg.class, Builder.class); - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof CGAttackMsg)) { - return super.equals(obj); - } - CGAttackMsg other = (CGAttackMsg) obj; - - boolean result = true; - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static CGAttackMsg parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static CGAttackMsg parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static CGAttackMsg parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static CGAttackMsg parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static CGAttackMsg parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static CGAttackMsg parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static CGAttackMsg parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static CGAttackMsg parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static CGAttackMsg parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static CGAttackMsg parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(CGAttackMsg prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code CGAttackMsg} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:CGAttackMsg) - CGAttackMsgOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_CGAttackMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_CGAttackMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - CGAttackMsg.class, Builder.class); - } - - // Construct using ProtoMsg.CGAttackMsg.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_CGAttackMsg_descriptor; - } - - public CGAttackMsg getDefaultInstanceForType() { - return CGAttackMsg.getDefaultInstance(); - } - - public CGAttackMsg build() { - CGAttackMsg result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public CGAttackMsg buildPartial() { - CGAttackMsg result = new CGAttackMsg(this); - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof CGAttackMsg) { - return mergeFrom((CGAttackMsg)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(CGAttackMsg other) { - if (other == CGAttackMsg.getDefaultInstance()) return this; - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - CGAttackMsg parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (CGAttackMsg) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:CGAttackMsg) - } - - // @@protoc_insertion_point(class_scope:CGAttackMsg) - private static final CGAttackMsg DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new CGAttackMsg(); - } - - public static CGAttackMsg getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public CGAttackMsg parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new CGAttackMsg(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public CGAttackMsg getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface GCAttackMsgOrBuilder extends - // @@protoc_insertion_point(interface_extends:GCAttackMsg) - com.google.protobuf.MessageOrBuilder { - - /** - * optional string result = 1; - */ - String getResult(); - /** - * optional string result = 1; - */ - com.google.protobuf.ByteString - getResultBytes(); - } - /** - * Protobuf type {@code GCAttackMsg} - */ - public static final class GCAttackMsg extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:GCAttackMsg) - GCAttackMsgOrBuilder { - // Use GCAttackMsg.newBuilder() to construct. - private GCAttackMsg(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private GCAttackMsg() { - result_ = ""; - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private GCAttackMsg( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - case 10: { - String s = input.readStringRequireUtf8(); - - result_ = s; - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_GCAttackMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_GCAttackMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - GCAttackMsg.class, Builder.class); - } - - public static final int RESULT_FIELD_NUMBER = 1; - private volatile Object result_; - /** - * optional string result = 1; - */ - public String getResult() { - Object ref = result_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - result_ = s; - return s; - } - } - /** - * optional string result = 1; - */ - public com.google.protobuf.ByteString - getResultBytes() { - Object ref = result_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - result_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!getResultBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, result_); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!getResultBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, result_); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof GCAttackMsg)) { - return super.equals(obj); - } - GCAttackMsg other = (GCAttackMsg) obj; - - boolean result = true; - result = result && getResult() - .equals(other.getResult()); - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (37 * hash) + RESULT_FIELD_NUMBER; - hash = (53 * hash) + getResult().hashCode(); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static GCAttackMsg parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static GCAttackMsg parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static GCAttackMsg parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static GCAttackMsg parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static GCAttackMsg parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static GCAttackMsg parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static GCAttackMsg parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static GCAttackMsg parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static GCAttackMsg parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static GCAttackMsg parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(GCAttackMsg prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code GCAttackMsg} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:GCAttackMsg) - GCAttackMsgOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_GCAttackMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_GCAttackMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - GCAttackMsg.class, Builder.class); - } - - // Construct using ProtoMsg.GCAttackMsg.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - result_ = ""; - - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_GCAttackMsg_descriptor; - } - - public GCAttackMsg getDefaultInstanceForType() { - return GCAttackMsg.getDefaultInstance(); - } - - public GCAttackMsg build() { - GCAttackMsg result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public GCAttackMsg buildPartial() { - GCAttackMsg result = new GCAttackMsg(this); - result.result_ = result_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof GCAttackMsg) { - return mergeFrom((GCAttackMsg)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(GCAttackMsg other) { - if (other == GCAttackMsg.getDefaultInstance()) return this; - if (!other.getResult().isEmpty()) { - result_ = other.result_; - onChanged(); - } - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - GCAttackMsg parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (GCAttackMsg) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private Object result_ = ""; - /** - * optional string result = 1; - */ - public String getResult() { - Object ref = result_; - if (!(ref instanceof String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - result_ = s; - return s; - } else { - return (String) ref; - } - } - /** - * optional string result = 1; - */ - public com.google.protobuf.ByteString - getResultBytes() { - Object ref = result_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - result_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * optional string result = 1; - */ - public Builder setResult( - String value) { - if (value == null) { - throw new NullPointerException(); - } - - result_ = value; - onChanged(); - return this; - } - /** - * optional string result = 1; - */ - public Builder clearResult() { - - result_ = getDefaultInstance().getResult(); - onChanged(); - return this; - } - /** - * optional string result = 1; - */ - public Builder setResultBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - result_ = value; - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:GCAttackMsg) - } - - // @@protoc_insertion_point(class_scope:GCAttackMsg) - private static final GCAttackMsg DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new GCAttackMsg(); - } - - public static GCAttackMsg getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public GCAttackMsg parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new GCAttackMsg(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public GCAttackMsg getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface CGRechargeWarOrderVipMsgOrBuilder extends - // @@protoc_insertion_point(interface_extends:CGRechargeWarOrderVipMsg) - com.google.protobuf.MessageOrBuilder { - } - /** - * Protobuf type {@code CGRechargeWarOrderVipMsg} - */ - public static final class CGRechargeWarOrderVipMsg extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:CGRechargeWarOrderVipMsg) - CGRechargeWarOrderVipMsgOrBuilder { - // Use CGRechargeWarOrderVipMsg.newBuilder() to construct. - private CGRechargeWarOrderVipMsg(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private CGRechargeWarOrderVipMsg() { - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private CGRechargeWarOrderVipMsg( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_CGRechargeWarOrderVipMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_CGRechargeWarOrderVipMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - CGRechargeWarOrderVipMsg.class, Builder.class); - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof CGRechargeWarOrderVipMsg)) { - return super.equals(obj); - } - CGRechargeWarOrderVipMsg other = (CGRechargeWarOrderVipMsg) obj; - - boolean result = true; - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static CGRechargeWarOrderVipMsg parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static CGRechargeWarOrderVipMsg parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static CGRechargeWarOrderVipMsg parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static CGRechargeWarOrderVipMsg parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static CGRechargeWarOrderVipMsg parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static CGRechargeWarOrderVipMsg parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static CGRechargeWarOrderVipMsg parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static CGRechargeWarOrderVipMsg parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static CGRechargeWarOrderVipMsg parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static CGRechargeWarOrderVipMsg parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(CGRechargeWarOrderVipMsg prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code CGRechargeWarOrderVipMsg} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:CGRechargeWarOrderVipMsg) - CGRechargeWarOrderVipMsgOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_CGRechargeWarOrderVipMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_CGRechargeWarOrderVipMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - CGRechargeWarOrderVipMsg.class, Builder.class); - } - - // Construct using ProtoMsg.CGRechargeWarOrderVipMsg.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_CGRechargeWarOrderVipMsg_descriptor; - } - - public CGRechargeWarOrderVipMsg getDefaultInstanceForType() { - return CGRechargeWarOrderVipMsg.getDefaultInstance(); - } - - public CGRechargeWarOrderVipMsg build() { - CGRechargeWarOrderVipMsg result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public CGRechargeWarOrderVipMsg buildPartial() { - CGRechargeWarOrderVipMsg result = new CGRechargeWarOrderVipMsg(this); - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof CGRechargeWarOrderVipMsg) { - return mergeFrom((CGRechargeWarOrderVipMsg)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(CGRechargeWarOrderVipMsg other) { - if (other == CGRechargeWarOrderVipMsg.getDefaultInstance()) return this; - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - CGRechargeWarOrderVipMsg parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (CGRechargeWarOrderVipMsg) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:CGRechargeWarOrderVipMsg) - } - - // @@protoc_insertion_point(class_scope:CGRechargeWarOrderVipMsg) - private static final CGRechargeWarOrderVipMsg DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new CGRechargeWarOrderVipMsg(); - } - - public static CGRechargeWarOrderVipMsg getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public CGRechargeWarOrderVipMsg parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new CGRechargeWarOrderVipMsg(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public CGRechargeWarOrderVipMsg getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface GCRechargeWarOrderVipMsgOrBuilder extends - // @@protoc_insertion_point(interface_extends:GCRechargeWarOrderVipMsg) - com.google.protobuf.MessageOrBuilder { - - /** - * optional string result = 1; - */ - String getResult(); - /** - * optional string result = 1; - */ - com.google.protobuf.ByteString - getResultBytes(); - } - /** - * Protobuf type {@code GCRechargeWarOrderVipMsg} - */ - public static final class GCRechargeWarOrderVipMsg extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:GCRechargeWarOrderVipMsg) - GCRechargeWarOrderVipMsgOrBuilder { - // Use GCRechargeWarOrderVipMsg.newBuilder() to construct. - private GCRechargeWarOrderVipMsg(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private GCRechargeWarOrderVipMsg() { - result_ = ""; - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private GCRechargeWarOrderVipMsg( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - case 10: { - String s = input.readStringRequireUtf8(); - - result_ = s; - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_GCRechargeWarOrderVipMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_GCRechargeWarOrderVipMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - GCRechargeWarOrderVipMsg.class, Builder.class); - } - - public static final int RESULT_FIELD_NUMBER = 1; - private volatile Object result_; - /** - * optional string result = 1; - */ - public String getResult() { - Object ref = result_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - result_ = s; - return s; - } - } - /** - * optional string result = 1; - */ - public com.google.protobuf.ByteString - getResultBytes() { - Object ref = result_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - result_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!getResultBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, result_); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!getResultBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, result_); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof GCRechargeWarOrderVipMsg)) { - return super.equals(obj); - } - GCRechargeWarOrderVipMsg other = (GCRechargeWarOrderVipMsg) obj; - - boolean result = true; - result = result && getResult() - .equals(other.getResult()); - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (37 * hash) + RESULT_FIELD_NUMBER; - hash = (53 * hash) + getResult().hashCode(); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static GCRechargeWarOrderVipMsg parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static GCRechargeWarOrderVipMsg parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static GCRechargeWarOrderVipMsg parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static GCRechargeWarOrderVipMsg parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static GCRechargeWarOrderVipMsg parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static GCRechargeWarOrderVipMsg parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static GCRechargeWarOrderVipMsg parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static GCRechargeWarOrderVipMsg parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static GCRechargeWarOrderVipMsg parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static GCRechargeWarOrderVipMsg parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(GCRechargeWarOrderVipMsg prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code GCRechargeWarOrderVipMsg} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:GCRechargeWarOrderVipMsg) - GCRechargeWarOrderVipMsgOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_GCRechargeWarOrderVipMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_GCRechargeWarOrderVipMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - GCRechargeWarOrderVipMsg.class, Builder.class); - } - - // Construct using ProtoMsg.GCRechargeWarOrderVipMsg.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - result_ = ""; - - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_GCRechargeWarOrderVipMsg_descriptor; - } - - public GCRechargeWarOrderVipMsg getDefaultInstanceForType() { - return GCRechargeWarOrderVipMsg.getDefaultInstance(); - } - - public GCRechargeWarOrderVipMsg build() { - GCRechargeWarOrderVipMsg result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public GCRechargeWarOrderVipMsg buildPartial() { - GCRechargeWarOrderVipMsg result = new GCRechargeWarOrderVipMsg(this); - result.result_ = result_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof GCRechargeWarOrderVipMsg) { - return mergeFrom((GCRechargeWarOrderVipMsg)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(GCRechargeWarOrderVipMsg other) { - if (other == GCRechargeWarOrderVipMsg.getDefaultInstance()) return this; - if (!other.getResult().isEmpty()) { - result_ = other.result_; - onChanged(); - } - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - GCRechargeWarOrderVipMsg parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (GCRechargeWarOrderVipMsg) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private Object result_ = ""; - /** - * optional string result = 1; - */ - public String getResult() { - Object ref = result_; - if (!(ref instanceof String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - result_ = s; - return s; - } else { - return (String) ref; - } - } - /** - * optional string result = 1; - */ - public com.google.protobuf.ByteString - getResultBytes() { - Object ref = result_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - result_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * optional string result = 1; - */ - public Builder setResult( - String value) { - if (value == null) { - throw new NullPointerException(); - } - - result_ = value; - onChanged(); - return this; - } - /** - * optional string result = 1; - */ - public Builder clearResult() { - - result_ = getDefaultInstance().getResult(); - onChanged(); - return this; - } - /** - * optional string result = 1; - */ - public Builder setResultBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - result_ = value; - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:GCRechargeWarOrderVipMsg) - } - - // @@protoc_insertion_point(class_scope:GCRechargeWarOrderVipMsg) - private static final GCRechargeWarOrderVipMsg DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new GCRechargeWarOrderVipMsg(); - } - - public static GCRechargeWarOrderVipMsg getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public GCRechargeWarOrderVipMsg parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new GCRechargeWarOrderVipMsg(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public GCRechargeWarOrderVipMsg getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_CGLoginSuccessMsg_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_CGLoginSuccessMsg_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_GCLoginSuccessMsg_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_GCLoginSuccessMsg_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_CGBuyGoodsMsg_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_CGBuyGoodsMsg_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_GCBuyGoodsMsg_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_GCBuyGoodsMsg_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_CGReceiveWarOrderPrizeMsg_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_CGReceiveWarOrderPrizeMsg_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_GCReceiveWarOrderPrizeMsg_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_GCReceiveWarOrderPrizeMsg_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_CGAttackMsg_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_CGAttackMsg_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_GCAttackMsg_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_GCAttackMsg_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_CGRechargeWarOrderVipMsg_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_CGRechargeWarOrderVipMsg_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_GCRechargeWarOrderVipMsg_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_GCRechargeWarOrderVipMsg_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - String[] descriptorData = { - "\n\014Entity.proto\"%\n\021CGLoginSuccessMsg\022\020\n\010p" + - "layerId\030\001 \001(\003\"\023\n\021GCLoginSuccessMsg\"\"\n\rCG" + - "BuyGoodsMsg\022\021\n\tbuyGoodId\030\001 \001(\003\"$\n\rGCBuyG" + - "oodsMsg\022\023\n\013responseMsg\030\001 \001(\t\",\n\031CGReceiv" + - "eWarOrderPrizeMsg\022\017\n\007prizeId\030\001 \001(\003\"+\n\031GC" + - "ReceiveWarOrderPrizeMsg\022\016\n\006result\030\001 \001(\t\"" + - "\r\n\013CGAttackMsg\"\035\n\013GCAttackMsg\022\016\n\006result\030" + - "\001 \001(\t\"\032\n\030CGRechargeWarOrderVipMsg\"*\n\030GCR" + - "echargeWarOrderVipMsg\022\016\n\006result\030\001 \001(\tB\nB" + - "\010ProtoMsgb\006proto3" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }, assigner); - internal_static_CGLoginSuccessMsg_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_CGLoginSuccessMsg_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_CGLoginSuccessMsg_descriptor, - new String[] { "PlayerId", }); - internal_static_GCLoginSuccessMsg_descriptor = - getDescriptor().getMessageTypes().get(1); - internal_static_GCLoginSuccessMsg_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_GCLoginSuccessMsg_descriptor, - new String[] { }); - internal_static_CGBuyGoodsMsg_descriptor = - getDescriptor().getMessageTypes().get(2); - internal_static_CGBuyGoodsMsg_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_CGBuyGoodsMsg_descriptor, - new String[] { "BuyGoodId", }); - internal_static_GCBuyGoodsMsg_descriptor = - getDescriptor().getMessageTypes().get(3); - internal_static_GCBuyGoodsMsg_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_GCBuyGoodsMsg_descriptor, - new String[] { "ResponseMsg", }); - internal_static_CGReceiveWarOrderPrizeMsg_descriptor = - getDescriptor().getMessageTypes().get(4); - internal_static_CGReceiveWarOrderPrizeMsg_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_CGReceiveWarOrderPrizeMsg_descriptor, - new String[] { "PrizeId", }); - internal_static_GCReceiveWarOrderPrizeMsg_descriptor = - getDescriptor().getMessageTypes().get(5); - internal_static_GCReceiveWarOrderPrizeMsg_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_GCReceiveWarOrderPrizeMsg_descriptor, - new String[] { "Result", }); - internal_static_CGAttackMsg_descriptor = - getDescriptor().getMessageTypes().get(6); - internal_static_CGAttackMsg_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_CGAttackMsg_descriptor, - new String[] { }); - internal_static_GCAttackMsg_descriptor = - getDescriptor().getMessageTypes().get(7); - internal_static_GCAttackMsg_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_GCAttackMsg_descriptor, - new String[] { "Result", }); - internal_static_CGRechargeWarOrderVipMsg_descriptor = - getDescriptor().getMessageTypes().get(8); - internal_static_CGRechargeWarOrderVipMsg_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_CGRechargeWarOrderVipMsg_descriptor, - new String[] { }); - internal_static_GCRechargeWarOrderVipMsg_descriptor = - getDescriptor().getMessageTypes().get(9); - internal_static_GCRechargeWarOrderVipMsg_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_GCRechargeWarOrderVipMsg_descriptor, - new String[] { "Result", }); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/mini-game/src/main/java/com/mini/game/server/GameServer.java b/mini-game/src/main/java/com/mini/game/server/GameServer.java deleted file mode 100644 index e64de9c9c06e98f25d6a670542923ac96e011c5e..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/server/GameServer.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.mini.game.server; - -import com.mini.game.misc.GameRepository; -import io.netty.bootstrap.ServerBootstrap; -import io.netty.channel.Channel; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.nio.NioServerSocketChannel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023/2/18 13:08 - * @Description: TODO - */ -@Slf4j -@Component -public class GameServer { - - @Value("${netty.server.port}") - private Integer port; - - @Autowired - private GameRepository repository; - - @Autowired - private GameMainChannelInitializer gameMainChannelInitializer; - - private ServerBootstrap server; - - /** - * 启动 netty 服务器 - */ - @Async - public void start() { - - NioEventLoopGroup boss = new NioEventLoopGroup(); - NioEventLoopGroup worker = new NioEventLoopGroup(); - - try { - this.server = new ServerBootstrap() - .group(boss, worker) - .channel(NioServerSocketChannel.class) - .childHandler(gameMainChannelInitializer); - - Channel channel = this.server.bind(port).sync().channel(); - channel.closeFuture().sync(); - - } catch (InterruptedException e) { - log.error("server error:[{}]", e.getMessage()); - } finally { - // 关闭服务器资源 - boss.shutdownGracefully(); - worker.shutdownGracefully(); - log.info("[{}] 服务器停止", this.getClass().getSimpleName()); - } - - } -} diff --git a/mini-game/src/main/java/com/mini/game/server/ServerRunner.java b/mini-game/src/main/java/com/mini/game/server/ServerRunner.java deleted file mode 100644 index e9eea211a74874761026f7d4697af808d0c2e898..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/server/ServerRunner.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.mini.game.server; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-02-24 10:22 - * @Description: TODO - */ -@Slf4j -@Component -public class ServerRunner implements ApplicationRunner { - - @Autowired - private GameServer gameServer; - - @Override - public void run(ApplicationArguments args) throws Exception { - gameServer.start(); - } -} diff --git a/mini-game/src/main/java/com/mini/game/server/thread/CGMainHandleThread.java b/mini-game/src/main/java/com/mini/game/server/thread/CGMainHandleThread.java deleted file mode 100644 index 40b82568c28f771d5742af0c67dab047eb23f105..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/server/thread/CGMainHandleThread.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.mini.game.server.thread; - -import com.mini.common.message.BaseMessage; -import com.mini.common.utils.SpringUtils; -import com.mini.game.misc.GameRepository; -import com.mini.game.pojo.entity.Player; -import lombok.extern.slf4j.Slf4j; - -/** - * @author: yumi - * @date: 2023/2/18 22:29 - * @Description: TODO - */ -@Slf4j -public class CGMainHandleThread extends Thread { - - private GameRepository repository; - - public CGMainHandleThread() { - this.repository = SpringUtils.getBean(GameRepository.class); - this.setName("CG 消息处理线程"); - } - - @Override - public void run() { - - log.info("启动 [{}]", this.getName()); - while (true) { - try { - repository.onlinePlayerMap.values().forEach(Player::heartBeat); - BaseMessage msg = repository.popCGMessage(); - if (msg == null) { - Thread.sleep(100); - continue; - } - - log.info("获取消息:[{}]", msg); - msg.handler(repository.getGateChannel()); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - } - } -} diff --git a/mini-game/src/main/java/com/mini/game/server/thread/DBHandlerThread.java b/mini-game/src/main/java/com/mini/game/server/thread/DBHandlerThread.java deleted file mode 100644 index cd9042d524b07e5278139805a599bee5800cf585..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/server/thread/DBHandlerThread.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.mini.game.server.thread; - -import com.mini.common.handler.CGHandler; -import com.mini.common.message.BaseMessage; -import com.mini.common.utils.SpringUtils; -import com.mini.game.misc.GameRepository; -import com.mini.game.pojo.db.ModifyPlayerMsg; -import com.mini.game.service.impl.PlayerServiceImpl; -import lombok.extern.slf4j.Slf4j; - -/** - * @author: yumi - * @date: 2023/2/19 11:45 - * @Description: TODO - */ -@Slf4j -public class DBHandlerThread extends Thread { - - private GameRepository repository; - - /** - * 负责的队列 ID - */ - private Long queueId; - - public DBHandlerThread(Long queueId) { - this.repository = SpringUtils.getBean(GameRepository.class); - this.queueId = queueId; - this.setName("DB 消息队列处理线程 [" + queueId + "]"); - } - - @Override - public void run() { - - log.info("启动 [{}]", this.getName()); - - while (true) { - try { - BaseMessage msg = repository.popDBMessage(queueId); - if (msg == null) { - Thread.sleep(100); - continue; - } - - log.info("DB 线程[{}] 获取消息:[{}]", queueId, msg); - - if (msg instanceof ModifyPlayerMsg) { - ModifyPlayerMsg msg1 = (ModifyPlayerMsg) msg; - PlayerServiceImpl playerService = SpringUtils.getBean(PlayerServiceImpl.class); - playerService.updateById(msg1.getPlayer()); - - log.info("持久化更新玩家 [{}] 信息", ((ModifyPlayerMsg) msg).getPlayer().getId()); - continue; - } - - CGHandler handler = SpringUtils.getBean(msg.getMsgHeader().getMsgType().substring(msg.getMsgHeader().getMsgType().lastIndexOf(".") + 1) + "Handler"); - handler.doDB(msg); - - } catch (InterruptedException e) { - log.error("CG 处理队列写入 DB 消息队列失败:[{}]", e.getMessage()); - } - - } - - } -} diff --git a/mini-game/src/main/java/com/mini/game/service/PlayerService.java b/mini-game/src/main/java/com/mini/game/service/PlayerService.java deleted file mode 100644 index 4c9ac018fe3aa7c0b9134f0a029b7fd65b0a25fb..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/service/PlayerService.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mini.game.service; - - -import com.baomidou.mybatisplus.extension.service.IService; -import com.mini.game.pojo.entity.Player; - -/** - * @author: yumi - * @date: 2023/2/18 14:55 - * @Description: TODO - */ -public interface PlayerService extends IService { -} diff --git a/mini-game/src/main/java/com/mini/game/service/WarOrderService.java b/mini-game/src/main/java/com/mini/game/service/WarOrderService.java deleted file mode 100644 index df70ad963a652da68d4dee15d0d2ba5b72730e73..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/service/WarOrderService.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.mini.game.service; - -/** - * @author: yumi - * @date: 2023-03-20 16:54 - * @Description: TODO - */ -public interface WarOrderService { -} diff --git a/mini-game/src/main/java/com/mini/game/service/impl/PlayerServiceImpl.java b/mini-game/src/main/java/com/mini/game/service/impl/PlayerServiceImpl.java deleted file mode 100644 index 11e13a1bfb9ca6a97a67ca3e3f152b0e24fdbd0d..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/service/impl/PlayerServiceImpl.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mini.game.service.impl; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.mini.game.mapper.PlayerMapper; -import com.mini.game.pojo.entity.Player; -import com.mini.game.service.PlayerService; -import org.springframework.stereotype.Service; - -/** - * @author: yumi - * @date: 2023/2/18 15:00 - * @Description: TODO - */ -@Service -public class PlayerServiceImpl extends ServiceImpl implements PlayerService { -} diff --git a/mini-game/src/main/java/com/mini/game/service/impl/WarOrderServiceImpl.java b/mini-game/src/main/java/com/mini/game/service/impl/WarOrderServiceImpl.java deleted file mode 100644 index b1cecb9aa361b76381883d7e2b0194a4fb9f65e5..0000000000000000000000000000000000000000 --- a/mini-game/src/main/java/com/mini/game/service/impl/WarOrderServiceImpl.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.mini.game.service.impl; - -import com.mini.common.utils.ExcelUtils; -import com.mini.common.utils.SpringUtils; -import com.mini.game.misc.GameRepository; -import com.mini.game.misc.PubSubManager; -import com.mini.game.misc.pubsub.base.Sub; -import com.mini.game.pojo.blob.WarOrder; -import com.mini.game.pojo.entity.Player; -import com.mini.game.pojo.excel.ExcelWarOrderPrize; -import com.mini.game.pojo.excel.ExcelWarOrderTask; -import com.mini.game.pojo.notify.CompleteTaskNotify; -import com.mini.game.service.WarOrderService; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.util.ResourceUtils; - -import javax.annotation.PostConstruct; -import java.io.FileNotFoundException; -import java.util.List; - -/** - * @author: yumi - * @date: 2023-03-20 16:54 - * @Description: TODO - */ -@Slf4j -@Data -@Service -public class WarOrderServiceImpl implements WarOrderService { - - @Autowired - private PubSubManager pubSubManager; - - @Autowired - private GameRepository repository; - - /** - * 战令任务奖励 - */ - private List excelWarOrderPrizes; - - - /** - * 战令任务 - * ps: 最好为 Map 形式 - */ - private List excelWarOrderTasks; - - @PostConstruct - public void init() throws FileNotFoundException { - - log.info("[战令系统] 订阅 [登录]"); - this.pubSubManager.subscribe(PubSubManager.PubType.LOGIN, (Sub) (playerId) -> { - Player player = repository.getPlayer(playerId); - if (player.getBaseInfoManager().isTodayFirstLogin()) { - log.info("[战令系统] 收到 [登录] 通知:玩家 [{}] 今日首次登录", playerId); - ExcelWarOrderTask taskProgress = new ExcelWarOrderTask(); - taskProgress.setTaskType(ExcelWarOrderTask.TASK_LOGIN); - taskProgress.setCompleteNum(1L); - player.getWarOrderManager().submitTaskProgress(taskProgress); - player.getBaseInfoManager().submitFirstLogin(); - } - }); -// log.info("[战令系统] 订阅 [任务完成]"); -// this.pubSubManager.subscribe(PubSubManager.PubType.COMPLETE_TASK, (Sub) (notify) -> { -// log.info("[战令系统] 收到 [任务完成] 通知:玩家 [{}] 完成任务 [{}]", notify.getPlayerId(), notify.getTaskId()); -// }); - - // 加载 Excel 文件 - this.excelWarOrderPrizes = ExcelUtils.read( - ResourceUtils.getFile("classpath:excel/" + "战令系统.xlsx"), - "战令奖励", - ExcelWarOrderPrize.class); - this.excelWarOrderPrizes.forEach(item -> log.info("{}", item)); - log.info("[初始化战令奖励列表]"); - - // 初始化战令任务 - this.excelWarOrderTasks = ExcelUtils.read( - ResourceUtils.getFile("classpath:excel/" + "战令系统.xlsx"), - "战令任务", - ExcelWarOrderTask.class - ); - log.info("[初始化战令任务列表]"); - this.excelWarOrderTasks.forEach(item -> log.info("{}", item)); - } - - /** - * 获取奖励信息 - * @param id - * @return - */ - public ExcelWarOrderPrize getPrize(Long id) { - for (ExcelWarOrderPrize prize : this.excelWarOrderPrizes) { - if (prize.getPrizeId().equals(id)) { - return prize; - } - } - return null; - } - - /** - * 获取任务信息 - * @param id - * @return - */ - public ExcelWarOrderTask getTask(Long id) { - for (ExcelWarOrderTask task : this.excelWarOrderTasks) { - if (task.getTaskId().equals(id)) { - return task; - } - } - return null; - } - -} diff --git a/mini-game/src/main/proto/Entity.proto b/mini-game/src/main/proto/Entity.proto deleted file mode 100644 index ef8dffea84fdfd6e22b712c2d34a667d909212da..0000000000000000000000000000000000000000 --- a/mini-game/src/main/proto/Entity.proto +++ /dev/null @@ -1,37 +0,0 @@ -syntax = "proto3"; -option java_outer_classname = "ProtoMsg"; - -message CGLoginSuccessMsg { - int64 playerId = 1; -} - -message GCLoginSuccessMsg { -} - -message CGBuyGoodsMsg { - int64 buyGoodId = 1; -} - -message GCBuyGoodsMsg { - string responseMsg = 1; -} - -message CGReceiveWarOrderPrizeMsg { - int64 prizeId = 1; -} - -message GCReceiveWarOrderPrizeMsg { - string result = 1; -} - -message CGAttackMsg { -} - -message GCAttackMsg { - string result = 1; -} - -message CGRechargeWarOrderVipMsg {} -message GCRechargeWarOrderVipMsg { - string result = 1; -} \ No newline at end of file diff --git a/mini-game/src/main/resources/application.yml b/mini-game/src/main/resources/application.yml deleted file mode 100644 index e733db2b629e1a60ace3cfa901e7baa11a8e09dc..0000000000000000000000000000000000000000 --- a/mini-game/src/main/resources/application.yml +++ /dev/null @@ -1,19 +0,0 @@ -netty: - server: - port: 8002 - gate: - port: 80 - -spring: - datasource: - url: jdbc:mysql://47.102.133.168:3306/netty?useUnicode=true&characterEncoding=utf-8&useSSL=false - driver-class-name: com.mysql.jdbc.Driver - username: root - password: root - -mybatis-plus: - configuration: - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl - -excel: - folder-path: classpath:excel/ \ No newline at end of file diff --git "a/mini-game/src/main/resources/excel/\346\210\230\344\273\244\347\263\273\347\273\237.xlsx" "b/mini-game/src/main/resources/excel/\346\210\230\344\273\244\347\263\273\347\273\237.xlsx" deleted file mode 100644 index 502b9ee02c7add019d38d1e6825ec8e18267a66f..0000000000000000000000000000000000000000 Binary files "a/mini-game/src/main/resources/excel/\346\210\230\344\273\244\347\263\273\347\273\237.xlsx" and /dev/null differ diff --git "a/mini-game/src/main/resources/excel/\346\234\250\346\235\220\345\225\206\345\272\227.xlsx" "b/mini-game/src/main/resources/excel/\346\234\250\346\235\220\345\225\206\345\272\227.xlsx" deleted file mode 100644 index 0b2c10c3fffa63998c712194aed8025b9f6e8bde..0000000000000000000000000000000000000000 Binary files "a/mini-game/src/main/resources/excel/\346\234\250\346\235\220\345\225\206\345\272\227.xlsx" and /dev/null differ diff --git a/mini-game/src/test/java/com/mini/game/GameTest.java b/mini-game/src/test/java/com/mini/game/GameTest.java deleted file mode 100644 index 980aae8eea4dd8615b42ae5f3cf46ec7a5cf7e67..0000000000000000000000000000000000000000 --- a/mini-game/src/test/java/com/mini/game/GameTest.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.mini.game; - -import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONObject; -import com.alibaba.fastjson2.TypeReference; -import com.mini.common.message.BaseMessage; -import com.mini.common.utils.Wrap; -import com.mini.game.pojo.blob.BaseInfo; -import com.mini.game.pojo.blob.PlayerCurrency; -import com.mini.game.pojo.blob.WarOrder; -import com.mini.game.pojo.entity.Player; -import com.mini.game.service.PlayerService; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; - -import java.util.Map; -import java.util.*; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.concurrent.LinkedBlockingQueue; - -/** - * @author: yumi - * @date: 2023-03-13 11:43 - * @Description: TODO - */ -@SpringBootTest -public class GameTest { - - @Autowired - private PlayerService playerService; - - @Test - void test1() { -// PlayerCurrency playerCurrency = new PlayerCurrency(); -// playerCurrency.setGold(100000L); -// playerCurrency.setWood(0L); -// playerService.update(Wrap.lbu().set(Player::getCurrency, playerCurrency)); - - playerService.list().forEach(System.out::println); - } - - @Test - void test2() throws InterruptedException { - BlockingQueue blockingQueue = new LinkedBlockingQueue<>(); - System.out.println(blockingQueue.poll()); - blockingQueue.put("11"); - System.out.println(blockingQueue.poll()); - } - - - @Test - void test4() { - List list = playerService.list(); - Player player = list.get(0); - - WarOrder warOrder = new WarOrder(); - warOrder.setCurPoint(0L); - warOrder.setIsVip(false); - warOrder.setReceivePrizeId(new CopyOnWriteArrayList<>()); - Map map = new ConcurrentHashMap<>(); -// WarOrder.TaskInfo taskInfo = new WarOrder.TaskInfo(); -// taskInfo.setCurCompleteNum(0L); -// taskInfo.setCurCompleteTimes(0); -// taskInfo.setNextRefreshTime(); -// map.put(1L, taskInfo); - warOrder.setTaskInfoMap(map); - player.setWarOrder(warOrder); - player.setBaseInfo(new BaseInfo(new CopyOnWriteArrayList<>(), new ConcurrentHashMap<>())); - playerService.updateById(player); - System.out.println(); - } - -} diff --git a/mini-game/target/classes/application.yml b/mini-game/target/classes/application.yml deleted file mode 100644 index e733db2b629e1a60ace3cfa901e7baa11a8e09dc..0000000000000000000000000000000000000000 --- a/mini-game/target/classes/application.yml +++ /dev/null @@ -1,19 +0,0 @@ -netty: - server: - port: 8002 - gate: - port: 80 - -spring: - datasource: - url: jdbc:mysql://47.102.133.168:3306/netty?useUnicode=true&characterEncoding=utf-8&useSSL=false - driver-class-name: com.mysql.jdbc.Driver - username: root - password: root - -mybatis-plus: - configuration: - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl - -excel: - folder-path: classpath:excel/ \ No newline at end of file diff --git "a/mini-game/target/classes/excel/\346\210\230\344\273\244\347\263\273\347\273\237.xlsx" "b/mini-game/target/classes/excel/\346\210\230\344\273\244\347\263\273\347\273\237.xlsx" deleted file mode 100644 index 502b9ee02c7add019d38d1e6825ec8e18267a66f..0000000000000000000000000000000000000000 Binary files "a/mini-game/target/classes/excel/\346\210\230\344\273\244\347\263\273\347\273\237.xlsx" and /dev/null differ diff --git "a/mini-game/target/classes/excel/\346\234\250\346\235\220\345\225\206\345\272\227.xlsx" "b/mini-game/target/classes/excel/\346\234\250\346\235\220\345\225\206\345\272\227.xlsx" deleted file mode 100644 index 0b2c10c3fffa63998c712194aed8025b9f6e8bde..0000000000000000000000000000000000000000 Binary files "a/mini-game/target/classes/excel/\346\234\250\346\235\220\345\225\206\345\272\227.xlsx" and /dev/null differ diff --git a/mini-gate/src/main/java/com/mini/gate/client/ClientCfg.java b/mini-gate/src/main/java/com/mini/gate/client/ClientCfg.java deleted file mode 100644 index eb04ae329fcd1774b575e8c861e6bd4441a9d140..0000000000000000000000000000000000000000 --- a/mini-gate/src/main/java/com/mini/gate/client/ClientCfg.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.mini.gate.client; - -import lombok.Data; - -/** - * @author: yumi - * @date: 2023/2/25 10:01 - * @Description: TODO - */ -@Data -public class ClientCfg { - - private String service; - - private String name; - - private String host; - - private Integer port; - -} diff --git a/mini-gate/src/main/java/com/mini/gate/client/ClientManager.java b/mini-gate/src/main/java/com/mini/gate/client/ClientManager.java deleted file mode 100644 index d6a3fb828e98d9c9db8c09480a894ed72367689d..0000000000000000000000000000000000000000 --- a/mini-gate/src/main/java/com/mini/gate/client/ClientManager.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.mini.gate.client; - -import com.mini.gate.misc.ServiceServer; -import io.netty.bootstrap.Bootstrap; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.nio.NioSocketChannel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Async; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.stereotype.Component; - -import java.util.UUID; - -/** - * @author: yumi - * @date: 2023/2/25 10:05 - * @Description: TODO - */ -@Slf4j -@Component -@EnableAsync -public class ClientManager { - - /** - * 网关连接其他服务 - * @param clientCfg - */ - @Async - public void start(ClientCfg clientCfg) { - - NioEventLoopGroup worker = new NioEventLoopGroup(); - Bootstrap client = new Bootstrap() - .group(worker) - .channel(NioSocketChannel.class) - .handler(new GateClientChannelInitializer(clientCfg.getService())); - - ServiceServer serviceServer = new ServiceServer() - .setUId(UUID.randomUUID().toString()) - .setType(ServiceServer.ChannelType.SERVICE) - .setName(clientCfg.getName()) - .setServer(client) - .setClientCfg(clientCfg) - .setWorker(new NioEventLoopGroup()); - - // 连接 - serviceServer.connect(); - - } -} diff --git a/mini-gate/src/main/java/com/mini/gate/client/GateClientChannelInitializer.java b/mini-gate/src/main/java/com/mini/gate/client/GateClientChannelInitializer.java deleted file mode 100644 index 9e45df37d94f63d6eb4d632228ef84472775d351..0000000000000000000000000000000000000000 --- a/mini-gate/src/main/java/com/mini/gate/client/GateClientChannelInitializer.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.mini.gate.client; - -import com.mini.gate.handler.GateMessageHandler; -import com.mini.gate.misc.GateCodec; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInitializer; -import io.netty.channel.socket.nio.NioSocketChannel; -import io.netty.handler.codec.LengthFieldBasedFrameDecoder; -import io.netty.handler.codec.LengthFieldPrepender; -import lombok.extern.slf4j.Slf4j; - -/** - * @author: yumi - * @date: 2023/2/27 21:20 - * @Description: TODO - */ -@Slf4j -public class GateClientChannelInitializer extends ChannelInitializer { - - private String service; - - public GateClientChannelInitializer(String service) { - this.service = service; - } - - @Override - protected void initChannel(NioSocketChannel channel) throws Exception { - channel.pipeline().addLast(new LengthFieldBasedFrameDecoder(65534, 0, 2, 0, 2)); - channel.pipeline().addLast(new LengthFieldPrepender(2)); - channel.pipeline().addLast(new GateCodec()); - - channel.pipeline().addLast(new GateMessageHandler()); - -// channel.pipeline().addLast(new IdleStateHandler(0,3,0)); -// channel.pipeline().addLast(new GateChannelDuplexHandler()); - -// GameChannel gameChannel = new GameChannel() -// .setUId(UUID.randomUUID().toString()) -// .setType(GameChannel.ChannelType.SERVICE) -// .setChannel(channel); -// GateRepository.channels.add(gameChannel); -// GateRepository.registerServer(this.service, gameChannel); -// log.info("[{}] 建立连接", name); - } - - @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { - log.error("{}", cause.getMessage()); - log.error("=============================================="); - } -} diff --git a/mini-gate/src/main/java/com/mini/gate/handler/GateMessageHandler.java b/mini-gate/src/main/java/com/mini/gate/handler/GateMessageHandler.java deleted file mode 100644 index a824178fdcb65390c194f7b130e2e28f6784359b..0000000000000000000000000000000000000000 --- a/mini-gate/src/main/java/com/mini/gate/handler/GateMessageHandler.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.mini.gate.handler; - -import com.mini.common.message.CGHeartMsg; -import com.mini.common.message.GCHeartMsg; -import com.mini.common.message.MsgHeader; -import com.mini.common.proto.ProtoMsg; -import com.mini.game.message.CGLoginSuccessMsg; -import com.mini.gate.misc.ServiceServer; -import com.mini.gate.misc.GateMessage; -import com.mini.gate.misc.GateRepository; -import io.netty.channel.ChannelHandler; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.SimpleChannelInboundHandler; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023/2/25 13:36 - * @Description: TODO - */ -@Slf4j -@ChannelHandler.Sharable -@Component -public class GateMessageHandler extends SimpleChannelInboundHandler { - - @Override - protected void channelRead0(ChannelHandlerContext ctx, GateMessage msg) throws Exception { - MsgHeader header = msg.getMsgHeader(); - log.info("收到 msg [{}]", header); - - if (header.getMsgType().equals(CGHeartMsg.class.getName()) || header.getMsgType().equals(GCHeartMsg.class.getName())) { - log.info("receive heart"); - ctx.channel().writeAndFlush(new GCHeartMsg()); - return; - } - - String simpleName = header.getMsgType().substring(header.getMsgType().lastIndexOf(".") + 1); - if (simpleName.startsWith("CG")) { - - System.out.println(header.getMsgType()); - // 登录成功记录玩家 ID - if (header.getMsgType().equals(CGLoginSuccessMsg.class.getName())) { - ProtoMsg.CGLoginSuccessMsg cgLoginSuccessMsg = ProtoMsg.CGLoginSuccessMsg.parseFrom(msg.getMsgBody()); - GateRepository.getPlayerChannel(header.getChannelId()).setPlayerId(cgLoginSuccessMsg.getPlayerId()); - } - - // 网关设置消息参数 - ServiceServer playerChannel = GateRepository.getPlayerChannel(ctx.channel()); - header.setChannelId(playerChannel.getUId()); - header.setPlayerId(playerChannel.getPlayerId() - ); - - // 转发 - ServiceServer serverServiceServer = GateRepository.getChannel(ctx.channel(), msg.getMsgHeader().getServiceName()); - log.info("使用的服务名称 [{}]", serverServiceServer.getName()); - serverServiceServer.getChannel().writeAndFlush(msg); - ServiceServer serviceServer = GateRepository.getPlayerChannel(ctx.channel()); - log.info("转发 CGmsg [{}] [{}] [{}]", serviceServer.getUId(), serviceServer.getType(), msg.getMsgHeader()); - - } else if (simpleName.startsWith("GC")) { - - // 回复 - ServiceServer serviceServer = GateRepository.getPlayerChannel(msg.getMsgHeader().getChannelId()); - serviceServer.getChannel().writeAndFlush(msg); - log.info("回复 GCmsg [{}] [{}] [{}]", serviceServer.getUId(), serviceServer.getType(), msg.getMsgHeader()); - - } - - } - - @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { -// super.exceptionCaught(ctx, cause); - log.error("发生异常 [{}]", cause.getMessage()); -// log.info("Removed {}", ctx.isRemoved()); -// log.info("Active {}", ctx.channel().isActive()); -// log.info("Open {}", ctx.channel().isOpen()); -// log.info("Registered {}", ctx.channel().isRegistered()); - log.info("发起重连..."); - GateRepository.getPlayerChannel(ctx.channel()).connect(); - } -} diff --git a/mini-gate/src/main/java/com/mini/gate/misc/GateCodec.java b/mini-gate/src/main/java/com/mini/gate/misc/GateCodec.java deleted file mode 100644 index 52b864dc0166c7854721b60e683c7ebd6938d24b..0000000000000000000000000000000000000000 --- a/mini-gate/src/main/java/com/mini/gate/misc/GateCodec.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.mini.gate.misc; - -import com.mini.common.message.BaseMessage; -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.ByteToMessageCodec; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * @author: yumi - * @date: 2023/2/27 20:51 - * @Description: TODO - */ -@Slf4j -@Component -public class GateCodec extends ByteToMessageCodec { - - @Override - protected void encode(ChannelHandlerContext ctx, BaseMessage msg, ByteBuf out) throws Exception { - - msg.getMsgHeader().serialization(out); - - msg.serialization(out); - } - - @Override - protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { - - // 读取请求头 - GateMessage gateMessage = new GateMessage(); - gateMessage.deserialization(in); - - out.add(gateMessage); - - - } - - -} diff --git a/mini-gate/src/main/java/com/mini/gate/misc/GateMessage.java b/mini-gate/src/main/java/com/mini/gate/misc/GateMessage.java deleted file mode 100644 index 05ac23cd6547a18de429ebbdd398294362bd71db..0000000000000000000000000000000000000000 --- a/mini-gate/src/main/java/com/mini/gate/misc/GateMessage.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.mini.gate.misc; - -import com.google.protobuf.InvalidProtocolBufferException; -import com.mini.common.message.BaseMessage; -import com.mini.common.message.MsgHeader; -import io.netty.buffer.ByteBuf; -import lombok.Data; - -/** - * @author: yumi - * @date: 2023/2/27 20:49 - * @Description: TODO - */ -@Data -public class GateMessage extends BaseMessage { - - private byte[] msgBody; - - - @Override - public void serialization(ByteBuf out) { - - out.writeBytes(msgBody); - - } - - /** - * 网关只解析请求头 - * @param in - */ - @Override - public void deserialization(ByteBuf in) throws InvalidProtocolBufferException { - - MsgHeader msgHeader = MsgHeader.builder().build(); - msgHeader.deserialization(in); - this.setMsgHeader(msgHeader); - - byte[] bytes = new byte[in.readableBytes()]; - in.readBytes(bytes); - this.setMsgBody(bytes); - } -} diff --git a/mini-gate/src/main/java/com/mini/gate/misc/GateRepository.java b/mini-gate/src/main/java/com/mini/gate/misc/GateRepository.java deleted file mode 100644 index 79e99280a57872c6cbd5300cd9abe6533374e39d..0000000000000000000000000000000000000000 --- a/mini-gate/src/main/java/com/mini/gate/misc/GateRepository.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.mini.gate.misc; - -import io.netty.channel.Channel; -import io.netty.channel.socket.nio.NioSocketChannel; -import lombok.extern.slf4j.Slf4j; - -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.stream.Collectors; - -/** - * @author: yumi - * @date: 2023/2/25 15:13 - * @Description: TODO - */ -@Slf4j -public class GateRepository { - - /** - * 玩家连接 - */ - public static Map channelMap = new LinkedHashMap<>(); - public static Map playerMap = new LinkedHashMap<>(); - public static List channels = new CopyOnWriteArrayList<>(); - - public static ServiceServer getPlayerChannel(String channelId) { - for (ServiceServer channel : channels) { - if (channel.getUId().equals(channelId)) { - return channel; - } - } - return null; - - } - - public static ServiceServer getPlayerChannel(Channel channel) { - for (ServiceServer ch : channels) { - if (ch.getChannel() == channel) { - return ch; - } - } - return null; - - } - - - /** - * 服务连接 - */ - public static Map> serverMap = new ConcurrentHashMap<>(); - - /** - * 注册服务 - * @param serverName - * @param server - */ - public static void registerServer(String serverName, ServiceServer server) { - if (serverMap.get(serverName) == null) { - serverMap.put(serverName, new CopyOnWriteArrayList<>()); - } - serverMap.get(serverName).add(server); - } - - /** - * 获取服务中的随机一个实例 - * @param serverName - * @return - */ - public static ServiceServer getRandomServer(String serverName) { - List channels = serverMap.get(serverName); - if (channels == null || channels.size() == 0) { - return null; - } - // 0 ~ size - 1 - return channels.get((int) (Math.random() * channels.size())); - } - - public static ServiceServer getChannel(Channel channel, String serviceName) { - ServiceServer playerChannel = getPlayerChannel(channel); - // 如果是第一次使用服务,为其随机分配一个服务器 - if (playerChannel.getServiceMap().get(serviceName) == null) { - log.info("首次分配服务"); - log.info("服务列表 [{}]", serverMap.get(serviceName).stream().map(ServiceServer::getName).collect(Collectors.toList())); - playerChannel.getServiceMap().put(serviceName, getRandomServer(serviceName)); - log.info("分配到服务 [{}]", playerChannel.getServiceMap().get(serviceName).getName()); - } - return playerChannel.getServiceMap().get(serviceName); - } -} diff --git a/mini-gate/src/main/java/com/mini/gate/misc/ServiceServer.java b/mini-gate/src/main/java/com/mini/gate/misc/ServiceServer.java deleted file mode 100644 index 0b9433feb6a4017664eb622c3fce967cbf6032ba..0000000000000000000000000000000000000000 --- a/mini-gate/src/main/java/com/mini/gate/misc/ServiceServer.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.mini.gate.misc; - -import com.mini.gate.client.ClientCfg; -import io.netty.bootstrap.Bootstrap; -import io.netty.channel.Channel; -import io.netty.channel.nio.NioEventLoopGroup; -import lombok.Data; -import lombok.experimental.Accessors; -import lombok.extern.slf4j.Slf4j; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * @author: yumi - * @date: 2023/3/10 21:43 - * @Description: TODO - */ -@Data -@Accessors(chain = true) -@Slf4j -public class ServiceServer { - - private String uId; - private ChannelType type; - public enum ChannelType { - PLAYER, - SERVICE - } - private Channel channel; - private String name; - private Bootstrap server; - private ClientCfg clientCfg; - private NioEventLoopGroup worker; - private Long playerId; - - // [serviceName : server] 玩家所在的服务器 - private Map serviceMap = new ConcurrentHashMap<>(); - - public void connect() { - while (true) { - try { - this.channel = server.connect(clientCfg.getHost(), clientCfg.getPort()).sync().channel(); - GateRepository.channels.add(this); - GateRepository.registerServer(this.getClientCfg().getService(), this); - log.info("[{}] 连接成功", clientCfg.getName()); - break; - } catch (Exception e) { - log.error("[{}]\t[{}:{}]\t连接失败,发起重连... [{}]", name, clientCfg.getHost(), clientCfg.getPort(), e.getMessage()); - } - } - waitAndClose(); - log.info("[{}] 关闭", clientCfg.getName()); - } - - public void waitAndClose() { - try { - channel.closeFuture().sync(); - } catch (InterruptedException e) { - log.error("[{}] server error: [{}]", clientCfg.getName(), e.getMessage()); - } finally { - worker.shutdownGracefully(); - } - - } - -} diff --git a/mini-gate/src/main/java/com/mini/gate/server/GateChannelDuplexHandler.java b/mini-gate/src/main/java/com/mini/gate/server/GateChannelDuplexHandler.java deleted file mode 100644 index 052d068bd28725db66a64a409c453e62c1e6baa1..0000000000000000000000000000000000000000 --- a/mini-gate/src/main/java/com/mini/gate/server/GateChannelDuplexHandler.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.mini.gate.server; - -import io.netty.channel.ChannelDuplexHandler; -import io.netty.channel.ChannelHandlerContext; -import lombok.extern.slf4j.Slf4j; - -/** - * @author: yumi - * @date: 2023/2/24 20:23 - * @Description: TODO - */ -@Slf4j -public class GateChannelDuplexHandler extends ChannelDuplexHandler { - - @Override - public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { -// IdleStateEvent event = (IdleStateEvent) evt; -// if(event.state()== IdleState.WRITER_IDLE){ -// log.info("已经3s没有写数据了,发送心跳包..."); -// ctx.writeAndFlush(new CGHeartMsg()); -// } - } - -} diff --git a/mini-gate/src/main/java/com/mini/gate/server/GateServer.java b/mini-gate/src/main/java/com/mini/gate/server/GateServer.java deleted file mode 100644 index 0e9f5d90f5f0c960872cb400f5532488502952d5..0000000000000000000000000000000000000000 --- a/mini-gate/src/main/java/com/mini/gate/server/GateServer.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.mini.gate.server; - -import io.netty.bootstrap.ServerBootstrap; -import io.netty.channel.Channel; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.nio.NioServerSocketChannel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-02-24 14:27 - * @Description: TODO - */ -@Slf4j -@Component -public class GateServer { - - @Value("${netty.server.port}") - private Integer port; - - @Autowired - private GateServerChannelInitializer gateServerChannelInitializer; - - private ServerBootstrap server; - - /** - * 启动 netty 服务器 - */ - @Async - public void start() { - - NioEventLoopGroup boss = new NioEventLoopGroup(); - NioEventLoopGroup worker = new NioEventLoopGroup(); - try { - this.server = new ServerBootstrap() - .group(boss, worker) - .channel(NioServerSocketChannel.class) - .childHandler(gateServerChannelInitializer); - - Channel channel = this.server.bind(port).sync().channel(); - log.info("gate start"); - - channel.closeFuture().sync(); - - } catch (InterruptedException e) { - log.error("server error: [{}]", e.getMessage()); - } finally { - boss.shutdownGracefully(); - worker.shutdownGracefully(); - } - - } - -} diff --git a/mini-gate/src/main/java/com/mini/gate/server/GateServerChannelInitializer.java b/mini-gate/src/main/java/com/mini/gate/server/GateServerChannelInitializer.java deleted file mode 100644 index 5f003c4acff8d7e7dbeb5d63bf94b53eacc2da74..0000000000000000000000000000000000000000 --- a/mini-gate/src/main/java/com/mini/gate/server/GateServerChannelInitializer.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.mini.gate.server; - -import com.mini.gate.handler.GateMessageHandler; -import com.mini.gate.misc.ServiceServer; -import com.mini.gate.misc.GateCodec; -import com.mini.gate.misc.GateRepository; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInitializer; -import io.netty.channel.socket.nio.NioSocketChannel; -import io.netty.handler.codec.LengthFieldBasedFrameDecoder; -import io.netty.handler.codec.LengthFieldPrepender; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.UUID; - -/** - * @author: yumi - * @date: 2023-02-24 16:48 - * @Description: TODO - */ -@Slf4j -@Component -public class GateServerChannelInitializer extends ChannelInitializer { - - @Override - protected void initChannel(NioSocketChannel channel) throws Exception { - channel.pipeline().addLast(new LengthFieldBasedFrameDecoder(65534, 0, 2, 0, 2)); - channel.pipeline().addLast(new LengthFieldPrepender(2)); - channel.pipeline().addLast(new GateCodec()); - - channel.pipeline().addLast(new GateMessageHandler()); - - // 给该匿名玩家通道设置一个唯一 ID,登录成功后唯一 ID 变为玩家 ID - String uuid = UUID.randomUUID().toString(); - ServiceServer serviceServer = new ServiceServer() - .setUId(uuid) - .setType(ServiceServer.ChannelType.PLAYER) - .setChannel(channel); - GateRepository.channels.add(serviceServer); - log.info("有玩家建立连接 uuid: [{}]", uuid); -// log.info("[{}] 建立连接", name); - } - - @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { - log.error("{}", cause.getMessage()); - cause.printStackTrace(); - } -} diff --git a/mini-gate/src/main/resources/application.yml b/mini-gate/src/main/resources/application.yml deleted file mode 100644 index fd5dabd446c3012d3d1a22ac45b5ab44ccef421a..0000000000000000000000000000000000000000 --- a/mini-gate/src/main/resources/application.yml +++ /dev/null @@ -1,30 +0,0 @@ -netty: - server: - port: 80 - clients: - - service: login - name: 登录模块 - host: localhost - port: 8001 - - service: game - name: 游戏服1 - host: localhost - port: 8002 - - service: game - name: 游戏服2 - host: localhost - port: 8003 - -spring: - datasource: - url: jdbc:mysql://47.102.133.168:3306/netty?useUnicode=true&characterEncoding=utf-8&useSSL=false - driver-class-name: com.mysql.jdbc.Driver - username: root - password: root - -mybatis-plus: - configuration: - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl - -excel: - folder-path: classpath:excel/ \ No newline at end of file diff --git a/mini-gate/target/classes/application.yml b/mini-gate/target/classes/application.yml deleted file mode 100644 index fd5dabd446c3012d3d1a22ac45b5ab44ccef421a..0000000000000000000000000000000000000000 --- a/mini-gate/target/classes/application.yml +++ /dev/null @@ -1,30 +0,0 @@ -netty: - server: - port: 80 - clients: - - service: login - name: 登录模块 - host: localhost - port: 8001 - - service: game - name: 游戏服1 - host: localhost - port: 8002 - - service: game - name: 游戏服2 - host: localhost - port: 8003 - -spring: - datasource: - url: jdbc:mysql://47.102.133.168:3306/netty?useUnicode=true&characterEncoding=utf-8&useSSL=false - driver-class-name: com.mysql.jdbc.Driver - username: root - password: root - -mybatis-plus: - configuration: - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl - -excel: - folder-path: classpath:excel/ \ No newline at end of file diff --git a/mini-login/pom.xml b/mini-login/pom.xml deleted file mode 100644 index 3b7070dbcb6678b1d95a114694a7c871b8f13999..0000000000000000000000000000000000000000 --- a/mini-login/pom.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - mini - com.mini - 0.0.1-SNAPSHOT - - 4.0.0 - - mini-login - - - - - com.mini - mini-common - - - - org.springframework.boot - spring-boot-starter-test - - - - org.springframework.boot - spring-boot-starter-data-redis - - - - com.baomidou - mybatis-plus-boot-starter - - - - com.mini - mini-game - - - - - - - - kr.motd.maven - os-maven-plugin - 1.4.1.Final - - - - - org.springframework.boot - spring-boot-maven-plugin - - - org.xolstice.maven.plugins - protobuf-maven-plugin - 0.5.0 - - - com.google.protobuf:protoc:3.1.0:exe:${os.detected.classifier} - - grpc-java - - io.grpc:protoc-gen-grpc-java:1.29.0:exe:${os.detected.classifier} - - - - - - compile - compile-custom - - - - - - - - - \ No newline at end of file diff --git a/mini-login/src/main/java/com/mini/login/client/GateClient.java b/mini-login/src/main/java/com/mini/login/client/GateClient.java deleted file mode 100644 index 4aab5e94d7c0b66fa5ad6ec128f2c62bfbc2604b..0000000000000000000000000000000000000000 --- a/mini-login/src/main/java/com/mini/login/client/GateClient.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.mini.login.client; - -import com.mini.common.misc.GameChannelInitializer; -import io.netty.bootstrap.Bootstrap; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.nio.NioSocketChannel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-02-24 16:54 - * @Description: TODO - */ -@Slf4j -@Component -public class GateClient { - - @Value("${netty.gate.port}") - private Integer port; - - private Bootstrap client; - - public void start() { - - this.client = new Bootstrap() - .group(new NioEventLoopGroup()) - .channel(NioSocketChannel.class) - .handler(new GameChannelInitializer()); - - this.client.connect("localhost", port); - - - } - -} diff --git a/mini-login/src/main/java/com/mini/login/handler/CGLoginMsgHandler.java b/mini-login/src/main/java/com/mini/login/handler/CGLoginMsgHandler.java deleted file mode 100644 index 928e76f32ba159f2490407d8777b85366c1b26e6..0000000000000000000000000000000000000000 --- a/mini-login/src/main/java/com/mini/login/handler/CGLoginMsgHandler.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.mini.login.handler; - -import com.mini.common.handler.BaseHandler; -import com.mini.common.utils.Wrap; -import com.mini.game.message.CGLoginSuccessMsg; -import com.mini.login.message.CGLoginMsg; -import com.mini.login.message.GCLoginMsg; -import com.mini.login.pojo.entity.Player; -import com.mini.login.service.PlayerService; -import io.netty.channel.Channel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023/2/25 12:44 - * @Description: TODO - */ -@Slf4j -@Component -public class CGLoginMsgHandler implements BaseHandler { - - @Autowired - private PlayerService playerService; - - @Override - public void handler(Channel channel, CGLoginMsg msg) { - log.info("receive msg [{}]", msg); - - Player player = playerService.getOne(Wrap.lbq() - .eq(Player::getAccount, msg.getAccount()) - .eq(Player::getPwd, msg.getPwd()) - ); - - - // 登录失败 - if (player == null) { - GCLoginMsg gcLoginMsg = msg.buildGC().setReason(false); - channel.writeAndFlush(gcLoginMsg); - log.info("send GCLoginMsg [{}]", gcLoginMsg); - return; - } - - // 向游戏服发送登录请求 - CGLoginSuccessMsg cgLoginSuccessMsg = new CGLoginSuccessMsg(player.getId()); - cgLoginSuccessMsg.getMsgHeader().setChannelId(msg.getMsgHeader().getChannelId()); - channel.writeAndFlush(cgLoginSuccessMsg); - log.info("send CGLoginSuccessMsg [{}]", cgLoginSuccessMsg); - -// // 登录成功 - GCLoginMsg gcLoginMsg = msg.buildGC().setReason(true); - channel.writeAndFlush(gcLoginMsg); - log.info("send GCLoginMsg [{}]", gcLoginMsg); - - } -} diff --git a/mini-login/src/main/java/com/mini/login/handler/GCLoginSuccessMsgHandler.java b/mini-login/src/main/java/com/mini/login/handler/GCLoginSuccessMsgHandler.java deleted file mode 100644 index cb8ef63b890afbb0550290a0c1ec1ac4f5b503f5..0000000000000000000000000000000000000000 --- a/mini-login/src/main/java/com/mini/login/handler/GCLoginSuccessMsgHandler.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.mini.login.handler; - -import com.mini.common.handler.BaseHandler; -import com.mini.game.message.GCLoginSuccessMsg; -import io.netty.channel.Channel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-03-06 16:08 - * @Description: 游戏服登录成功响应 - */ -@Slf4j -@Component -public class GCLoginSuccessMsgHandler implements BaseHandler { - - @Override - public void handler(Channel channel, GCLoginSuccessMsg msg) { - log.info("receive msg [{}]", msg); - } - -} diff --git a/mini-login/src/main/java/com/mini/login/mapper/PlayerMapper.java b/mini-login/src/main/java/com/mini/login/mapper/PlayerMapper.java deleted file mode 100644 index 0e8c4b4c32b6a0ce6a2d736572ce41ccc48f6fcc..0000000000000000000000000000000000000000 --- a/mini-login/src/main/java/com/mini/login/mapper/PlayerMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.mini.login.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.mini.login.pojo.entity.Player; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author: yumi - * @date: 2023/2/18 14:55 - * @Description: TODO - */ -@Mapper -public interface PlayerMapper extends BaseMapper { -} diff --git a/mini-login/src/main/java/com/mini/login/pojo/blob/BaseBlob.java b/mini-login/src/main/java/com/mini/login/pojo/blob/BaseBlob.java deleted file mode 100644 index 484da753535e0e267d909fd09b1659a929da92c9..0000000000000000000000000000000000000000 --- a/mini-login/src/main/java/com/mini/login/pojo/blob/BaseBlob.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.mini.login.pojo.blob; - -import lombok.Data; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectOutputStream; -import java.io.Serializable; - -/** - * @author: yumi - * @date: 2023/2/19 10:24 - * @Description: TODO - */ -@Data -public class BaseBlob implements Serializable { - - public byte[] toByteArray() throws IOException { - ByteArrayOutputStream bo = new ByteArrayOutputStream(); - ObjectOutputStream oos = new ObjectOutputStream(bo); - oos.writeObject(this); - return bo.toByteArray(); - } -} diff --git a/mini-login/src/main/java/com/mini/login/proto/ProtoMsg.java b/mini-login/src/main/java/com/mini/login/proto/ProtoMsg.java deleted file mode 100644 index c8e61f716d7a28dd4063e5806e2419819e98350e..0000000000000000000000000000000000000000 --- a/mini-login/src/main/java/com/mini/login/proto/ProtoMsg.java +++ /dev/null @@ -1,1135 +0,0 @@ -package com.mini.login.proto;// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Entity.proto - -public final class ProtoMsg { - private ProtoMsg() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistryLite registry) { - } - - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - registerAllExtensions( - (com.google.protobuf.ExtensionRegistryLite) registry); - } - public interface CGLoginMsgOrBuilder extends - // @@protoc_insertion_point(interface_extends:CGLoginMsg) - com.google.protobuf.MessageOrBuilder { - - /** - * optional string account = 1; - */ - String getAccount(); - /** - * optional string account = 1; - */ - com.google.protobuf.ByteString - getAccountBytes(); - - /** - * optional string pwd = 2; - */ - String getPwd(); - /** - * optional string pwd = 2; - */ - com.google.protobuf.ByteString - getPwdBytes(); - } - /** - * Protobuf type {@code CGLoginMsg} - */ - public static final class CGLoginMsg extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:CGLoginMsg) - CGLoginMsgOrBuilder { - // Use CGLoginMsg.newBuilder() to construct. - private CGLoginMsg(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private CGLoginMsg() { - account_ = ""; - pwd_ = ""; - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private CGLoginMsg( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - case 10: { - String s = input.readStringRequireUtf8(); - - account_ = s; - break; - } - case 18: { - String s = input.readStringRequireUtf8(); - - pwd_ = s; - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_CGLoginMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_CGLoginMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - CGLoginMsg.class, Builder.class); - } - - public static final int ACCOUNT_FIELD_NUMBER = 1; - private volatile Object account_; - /** - * optional string account = 1; - */ - public String getAccount() { - Object ref = account_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - account_ = s; - return s; - } - } - /** - * optional string account = 1; - */ - public com.google.protobuf.ByteString - getAccountBytes() { - Object ref = account_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - account_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int PWD_FIELD_NUMBER = 2; - private volatile Object pwd_; - /** - * optional string pwd = 2; - */ - public String getPwd() { - Object ref = pwd_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - pwd_ = s; - return s; - } - } - /** - * optional string pwd = 2; - */ - public com.google.protobuf.ByteString - getPwdBytes() { - Object ref = pwd_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - pwd_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!getAccountBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, account_); - } - if (!getPwdBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, pwd_); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!getAccountBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, account_); - } - if (!getPwdBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, pwd_); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof CGLoginMsg)) { - return super.equals(obj); - } - CGLoginMsg other = (CGLoginMsg) obj; - - boolean result = true; - result = result && getAccount() - .equals(other.getAccount()); - result = result && getPwd() - .equals(other.getPwd()); - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (37 * hash) + ACCOUNT_FIELD_NUMBER; - hash = (53 * hash) + getAccount().hashCode(); - hash = (37 * hash) + PWD_FIELD_NUMBER; - hash = (53 * hash) + getPwd().hashCode(); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static CGLoginMsg parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static CGLoginMsg parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static CGLoginMsg parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static CGLoginMsg parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static CGLoginMsg parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static CGLoginMsg parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static CGLoginMsg parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static CGLoginMsg parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static CGLoginMsg parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static CGLoginMsg parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(CGLoginMsg prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code CGLoginMsg} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:CGLoginMsg) - CGLoginMsgOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_CGLoginMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_CGLoginMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - CGLoginMsg.class, Builder.class); - } - - // Construct using ProtoMsg.CGLoginMsg.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - account_ = ""; - - pwd_ = ""; - - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_CGLoginMsg_descriptor; - } - - public CGLoginMsg getDefaultInstanceForType() { - return CGLoginMsg.getDefaultInstance(); - } - - public CGLoginMsg build() { - CGLoginMsg result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public CGLoginMsg buildPartial() { - CGLoginMsg result = new CGLoginMsg(this); - result.account_ = account_; - result.pwd_ = pwd_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof CGLoginMsg) { - return mergeFrom((CGLoginMsg)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(CGLoginMsg other) { - if (other == CGLoginMsg.getDefaultInstance()) return this; - if (!other.getAccount().isEmpty()) { - account_ = other.account_; - onChanged(); - } - if (!other.getPwd().isEmpty()) { - pwd_ = other.pwd_; - onChanged(); - } - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - CGLoginMsg parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (CGLoginMsg) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private Object account_ = ""; - /** - * optional string account = 1; - */ - public String getAccount() { - Object ref = account_; - if (!(ref instanceof String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - account_ = s; - return s; - } else { - return (String) ref; - } - } - /** - * optional string account = 1; - */ - public com.google.protobuf.ByteString - getAccountBytes() { - Object ref = account_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - account_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * optional string account = 1; - */ - public Builder setAccount( - String value) { - if (value == null) { - throw new NullPointerException(); - } - - account_ = value; - onChanged(); - return this; - } - /** - * optional string account = 1; - */ - public Builder clearAccount() { - - account_ = getDefaultInstance().getAccount(); - onChanged(); - return this; - } - /** - * optional string account = 1; - */ - public Builder setAccountBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - account_ = value; - onChanged(); - return this; - } - - private Object pwd_ = ""; - /** - * optional string pwd = 2; - */ - public String getPwd() { - Object ref = pwd_; - if (!(ref instanceof String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - pwd_ = s; - return s; - } else { - return (String) ref; - } - } - /** - * optional string pwd = 2; - */ - public com.google.protobuf.ByteString - getPwdBytes() { - Object ref = pwd_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - pwd_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * optional string pwd = 2; - */ - public Builder setPwd( - String value) { - if (value == null) { - throw new NullPointerException(); - } - - pwd_ = value; - onChanged(); - return this; - } - /** - * optional string pwd = 2; - */ - public Builder clearPwd() { - - pwd_ = getDefaultInstance().getPwd(); - onChanged(); - return this; - } - /** - * optional string pwd = 2; - */ - public Builder setPwdBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - pwd_ = value; - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:CGLoginMsg) - } - - // @@protoc_insertion_point(class_scope:CGLoginMsg) - private static final CGLoginMsg DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new CGLoginMsg(); - } - - public static CGLoginMsg getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public CGLoginMsg parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new CGLoginMsg(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public CGLoginMsg getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface GCLoginMsgOrBuilder extends - // @@protoc_insertion_point(interface_extends:GCLoginMsg) - com.google.protobuf.MessageOrBuilder { - - /** - * optional bool reason = 1; - */ - boolean getReason(); - } - /** - * Protobuf type {@code GCLoginMsg} - */ - public static final class GCLoginMsg extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:GCLoginMsg) - GCLoginMsgOrBuilder { - // Use GCLoginMsg.newBuilder() to construct. - private GCLoginMsg(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private GCLoginMsg() { - reason_ = false; - } - - @Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private GCLoginMsg( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - case 8: { - - reason_ = input.readBool(); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_GCLoginMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_GCLoginMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - GCLoginMsg.class, Builder.class); - } - - public static final int REASON_FIELD_NUMBER = 1; - private boolean reason_; - /** - * optional bool reason = 1; - */ - public boolean getReason() { - return reason_; - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (reason_ != false) { - output.writeBool(1, reason_); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (reason_ != false) { - size += com.google.protobuf.CodedOutputStream - .computeBoolSize(1, reason_); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof GCLoginMsg)) { - return super.equals(obj); - } - GCLoginMsg other = (GCLoginMsg) obj; - - boolean result = true; - result = result && (getReason() - == other.getReason()); - return result; - } - - @Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - hash = (37 * hash) + REASON_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( - getReason()); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static GCLoginMsg parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static GCLoginMsg parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static GCLoginMsg parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static GCLoginMsg parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static GCLoginMsg parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static GCLoginMsg parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static GCLoginMsg parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static GCLoginMsg parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static GCLoginMsg parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static GCLoginMsg parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(GCLoginMsg prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @Override - protected Builder newBuilderForType( - BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code GCLoginMsg} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:GCLoginMsg) - GCLoginMsgOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return ProtoMsg.internal_static_GCLoginMsg_descriptor; - } - - protected FieldAccessorTable - internalGetFieldAccessorTable() { - return ProtoMsg.internal_static_GCLoginMsg_fieldAccessorTable - .ensureFieldAccessorsInitialized( - GCLoginMsg.class, Builder.class); - } - - // Construct using ProtoMsg.GCLoginMsg.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - reason_ = false; - - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return ProtoMsg.internal_static_GCLoginMsg_descriptor; - } - - public GCLoginMsg getDefaultInstanceForType() { - return GCLoginMsg.getDefaultInstance(); - } - - public GCLoginMsg build() { - GCLoginMsg result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public GCLoginMsg buildPartial() { - GCLoginMsg result = new GCLoginMsg(this); - result.reason_ = reason_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof GCLoginMsg) { - return mergeFrom((GCLoginMsg)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(GCLoginMsg other) { - if (other == GCLoginMsg.getDefaultInstance()) return this; - if (other.getReason() != false) { - setReason(other.getReason()); - } - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - GCLoginMsg parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (GCLoginMsg) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private boolean reason_ ; - /** - * optional bool reason = 1; - */ - public boolean getReason() { - return reason_; - } - /** - * optional bool reason = 1; - */ - public Builder setReason(boolean value) { - - reason_ = value; - onChanged(); - return this; - } - /** - * optional bool reason = 1; - */ - public Builder clearReason() { - - reason_ = false; - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:GCLoginMsg) - } - - // @@protoc_insertion_point(class_scope:GCLoginMsg) - private static final GCLoginMsg DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new GCLoginMsg(); - } - - public static GCLoginMsg getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public GCLoginMsg parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new GCLoginMsg(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public GCLoginMsg getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_CGLoginMsg_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_CGLoginMsg_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_GCLoginMsg_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_GCLoginMsg_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - String[] descriptorData = { - "\n\014Entity.proto\"*\n\nCGLoginMsg\022\017\n\007account\030" + - "\001 \001(\t\022\013\n\003pwd\030\002 \001(\t\"\034\n\nGCLoginMsg\022\016\n\006reas" + - "on\030\001 \001(\010B\nB\010ProtoMsgb\006proto3" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }, assigner); - internal_static_CGLoginMsg_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_CGLoginMsg_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_CGLoginMsg_descriptor, - new String[] { "Account", "Pwd", }); - internal_static_GCLoginMsg_descriptor = - getDescriptor().getMessageTypes().get(1); - internal_static_GCLoginMsg_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_GCLoginMsg_descriptor, - new String[] { "Reason", }); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/mini-login/src/main/java/com/mini/login/server/LoginChannelInitializer.java b/mini-login/src/main/java/com/mini/login/server/LoginChannelInitializer.java deleted file mode 100644 index e6abd638a344c8f3568c5fbf20911ad60ed092ee..0000000000000000000000000000000000000000 --- a/mini-login/src/main/java/com/mini/login/server/LoginChannelInitializer.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mini.login.server; - -import com.mini.common.misc.GameChannelInitializer; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-02-24 17:56 - * @Description: TODO - */ -@Component -public class LoginChannelInitializer extends GameChannelInitializer { -} diff --git a/mini-login/src/main/java/com/mini/login/server/LoginServer.java b/mini-login/src/main/java/com/mini/login/server/LoginServer.java deleted file mode 100644 index 2580503cdebf4b148f0d08c7fc1079526a3a0151..0000000000000000000000000000000000000000 --- a/mini-login/src/main/java/com/mini/login/server/LoginServer.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.mini.login.server; - -import com.mini.common.misc.GameChannelInitializer; -import io.netty.bootstrap.ServerBootstrap; -import io.netty.channel.Channel; -import io.netty.channel.ChannelFuture; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.nio.NioServerSocketChannel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-02-24 14:34 - * @Description: TODO - */ -@Slf4j -@Component -public class LoginServer { - - @Value("${netty.server.port}") - private Integer port; - - private ServerBootstrap server; - - /** - * 启动 netty 服务器 - */ - @Async - public void start() { - - NioEventLoopGroup boss = new NioEventLoopGroup(); - NioEventLoopGroup worker = new NioEventLoopGroup(); - - try { - this.server = new ServerBootstrap() - .group(boss, worker) - .channel(NioServerSocketChannel.class) - .childHandler(new LoginChannelInitializer()); - - Channel channel = this.server.bind(port).sync().channel(); - channel.closeFuture().sync(); - - } catch (InterruptedException e) { - log.error("server error:[{}]", e.getMessage()); - } finally { - // 关闭服务器资源 - boss.shutdownGracefully(); - worker.shutdownGracefully(); - log.info("[{}] 服务器停止", this.getClass().getSimpleName()); - } - - - } -} diff --git a/mini-login/src/main/java/com/mini/login/server/ServerRunner.java b/mini-login/src/main/java/com/mini/login/server/ServerRunner.java deleted file mode 100644 index 4c6a02f07795f22854d31ce91b30bd857e178863..0000000000000000000000000000000000000000 --- a/mini-login/src/main/java/com/mini/login/server/ServerRunner.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.mini.login.server; - -import com.mini.login.client.GateClient; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; -import org.springframework.stereotype.Component; - -/** - * @author: yumi - * @date: 2023-02-24 14:36 - * @Description: TODO - */ -@Slf4j -@Component -public class ServerRunner implements ApplicationRunner { - - @Autowired - private LoginServer loginServer; - - @Override - public void run(ApplicationArguments args) throws Exception { - - loginServer.start(); - log.info("login start"); - - } -} diff --git a/mini-login/src/main/java/com/mini/login/service/PlayerService.java b/mini-login/src/main/java/com/mini/login/service/PlayerService.java deleted file mode 100644 index b604ace0790362959a7c302e537982053d235dc9..0000000000000000000000000000000000000000 --- a/mini-login/src/main/java/com/mini/login/service/PlayerService.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mini.login.service; - - -import com.baomidou.mybatisplus.extension.service.IService; -import com.mini.login.pojo.entity.Player; - -/** - * @author: yumi - * @date: 2023/2/18 14:55 - * @Description: TODO - */ -public interface PlayerService extends IService { -} diff --git a/mini-login/src/main/java/com/mini/login/service/impl/PlayerServiceImpl.java b/mini-login/src/main/java/com/mini/login/service/impl/PlayerServiceImpl.java deleted file mode 100644 index bf061f50b4b5f663cd865a6252331cbccdb3e1e6..0000000000000000000000000000000000000000 --- a/mini-login/src/main/java/com/mini/login/service/impl/PlayerServiceImpl.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mini.login.service.impl; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.mini.login.mapper.PlayerMapper; -import com.mini.login.pojo.entity.Player; -import com.mini.login.service.PlayerService; -import org.springframework.stereotype.Service; - -/** - * @author: yumi - * @date: 2023/2/18 15:00 - * @Description: TODO - */ -@Service -public class PlayerServiceImpl extends ServiceImpl implements PlayerService { -} diff --git a/mini-login/src/main/proto/Entity.proto b/mini-login/src/main/proto/Entity.proto deleted file mode 100644 index 4c0497b503add698fe3c0a1fc39880ce04774487..0000000000000000000000000000000000000000 --- a/mini-login/src/main/proto/Entity.proto +++ /dev/null @@ -1,11 +0,0 @@ -syntax = "proto3"; -option java_outer_classname = "ProtoMsg"; - -message CGLoginMsg { - string account = 1; - string pwd = 2; -} - -message GCLoginMsg { - bool reason = 1; -} \ No newline at end of file diff --git a/mini-login/src/main/resources/application.yml b/mini-login/src/main/resources/application.yml deleted file mode 100644 index b5b6843f445190a12d1209c4df09945dfedcad75..0000000000000000000000000000000000000000 --- a/mini-login/src/main/resources/application.yml +++ /dev/null @@ -1,16 +0,0 @@ -netty: - server: - port: 8001 - gate: - port: 80 - -spring: - datasource: - url: jdbc:mysql://47.102.133.168:3306/netty?useUnicode=true&characterEncoding=utf-8&useSSL=false - driver-class-name: com.mysql.jdbc.Driver - username: root - password: root - -mybatis-plus: - configuration: - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl \ No newline at end of file diff --git a/mini-login/src/test/java/com/mini/login/LoginTest.java b/mini-login/src/test/java/com/mini/login/LoginTest.java deleted file mode 100644 index b1eda1a4eb7ad17bd84a642d852182dba73bc35e..0000000000000000000000000000000000000000 --- a/mini-login/src/test/java/com/mini/login/LoginTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.mini.login; - - -import com.mini.login.service.PlayerService; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; - -/** - * @author: yumi - * @date: 2023/2/24 20:07 - * @Description: TODO - */ -@SpringBootTest -public class LoginTest { - - @Autowired - private PlayerService playerService; - - @Test - void test1() { - - playerService.list().forEach(System.out::println); - - } - -} diff --git a/mini-client/pom.xml b/paradogs-demo/paradogs-demo-client/pom.xml similarity index 60% rename from mini-client/pom.xml rename to paradogs-demo/paradogs-demo-client/pom.xml index 9c885a44ccb94a45eb0f611e676d99d99a3181d5..34df6be3384fa48d838a6e73cbfa159a4e13414e 100644 --- a/mini-client/pom.xml +++ b/paradogs-demo/paradogs-demo-client/pom.xml @@ -3,13 +3,13 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - mini - com.mini - 0.0.1-SNAPSHOT + paradogs-demo + com.paradogs + 0.0.1 4.0.0 - mini-client + paradogs-demo-client 8 @@ -18,12 +18,8 @@ - com.mini - mini-common - - - com.mini - mini-login + com.paradogs + paradogs-framework-core diff --git a/paradogs-demo/paradogs-demo-client/src/main/java/com/paradogs/demo/client/DemoClientApplication.java b/paradogs-demo/paradogs-demo-client/src/main/java/com/paradogs/demo/client/DemoClientApplication.java new file mode 100644 index 0000000000000000000000000000000000000000..9e12c9b9c30bf3f2e4d97dcd275b3b3e5907967e --- /dev/null +++ b/paradogs-demo/paradogs-demo-client/src/main/java/com/paradogs/demo/client/DemoClientApplication.java @@ -0,0 +1,99 @@ +package com.paradogs.demo.client; + +import com.paradogs.demo.client.demo.Client; +import com.paradogs.demo.client.pojo.CGLogin; +import com.paradogs.framework.common.pojo.cg.CGGatewayLogin; +import com.paradogs.framework.common.pojo.gc.GCAllocGateway; +import com.paradogs.framework.common.pojo.gc.GCApplyGate; +import com.paradogs.framework.core.msg.ByteData; +import com.paradogs.framework.core.netty.PRCodec; +import com.paradogs.framework.core.utils.ProtoUtils; +import io.netty.bootstrap.Bootstrap; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.handler.codec.LengthFieldBasedFrameDecoder; +import io.netty.handler.codec.LengthFieldPrepender; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @author: yumi + * @date: 2023/7/31 23:25 + * @Description: TODO + */ +@Slf4j +@SpringBootApplication +public class DemoClientApplication { + public static void main(String[] args) throws InterruptedException { + SpringApplication.run(DemoClientApplication.class, args); + + Bootstrap client = new Bootstrap() + .group(new NioEventLoopGroup()) + .channel(NioSocketChannel.class) + .handler(new ChannelInitializer() { + @Override + protected void initChannel(NioSocketChannel channel) throws Exception { + channel.pipeline().addLast(new LengthFieldBasedFrameDecoder( + 65534, + 0, + 2, + 0, + 2)); + + channel.pipeline().addLast(new LengthFieldPrepender(2)); + + channel.pipeline().addLast(new PRCodec()); + + // addLast() 加入越晚的出栈时越先执行 + channel.pipeline().addLast(new SimpleChannelInboundHandler() { + @Override + protected void channelRead0(ChannelHandlerContext ctx, ByteData msg) throws Exception { + GCApplyGate result = ProtoUtils.decode(msg.getDataBytes(), GCApplyGate.class); + log.info("Receive: {}", result); + + Bootstrap client = new Bootstrap() + .group(new NioEventLoopGroup()) + .channel(NioSocketChannel.class) + .handler(new ChannelInitializer() { + @Override + protected void initChannel(NioSocketChannel channel) throws Exception { + channel.pipeline().addLast(new LengthFieldBasedFrameDecoder( + 65534, + 0, + 2, + 0, + 2)); + + channel.pipeline().addLast(new LengthFieldPrepender(2)); + + channel.pipeline().addLast(new PRCodec()); + + // addLast() 加入越晚的出栈时越先执行 + channel.pipeline().addLast(new SimpleChannelInboundHandler() { + @Override + protected void channelRead0(ChannelHandlerContext ctx, ByteData msg) throws Exception { + log.info("Receive: {}", msg); + Client.send(ctx.channel(), "logic|misc.hello", new CGGatewayLogin("123")); + } + }); + } + }); + Channel gateChannel = client.connect(result.getHost(), result.getPort()).sync().channel(); + log.info("Connect Gate success"); + Client.send(gateChannel, "gate|login", new CGGatewayLogin(result.getToken())); + + } + }); + } + }); + + Channel channel = client.connect("localhost", 80).sync().channel(); + + Client.send(channel, "login|applyGate", new CGLogin("yumi", "123")); + } +} diff --git a/paradogs-demo/paradogs-demo-client/src/main/java/com/paradogs/demo/client/demo/Client.java b/paradogs-demo/paradogs-demo-client/src/main/java/com/paradogs/demo/client/demo/Client.java new file mode 100644 index 0000000000000000000000000000000000000000..067f7caf0d413b07cff3dcedb1612f865e08940f --- /dev/null +++ b/paradogs-demo/paradogs-demo-client/src/main/java/com/paradogs/demo/client/demo/Client.java @@ -0,0 +1,33 @@ +package com.paradogs.demo.client.demo; + +import com.paradogs.framework.core.msg.PRMsg; +import com.paradogs.framework.core.msg.MsgHeader; +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; + +/** + * @author: yumi + * @date: 2023/9/23 13:44 + * @Description: TODO + */ +@Slf4j +public class Client { + + public static void send(Channel channel, String route, T data) { + PRMsg msg = new PRMsg(data); + if (msg == null) { + msg = new PRMsg(); + } + if (msg.getMsgHeader() == null) { + msg.setMsgHeader(new MsgHeader()); + } + msg.getMsgHeader().setRoute(route); + + if (channel != null) { + channel.writeAndFlush(msg); + log.info(">>>>> [{}] ", msg.getMsgHeader().getRoute()); + } else { + log.warn("channel is null, route: {}", route); + } + } +} diff --git a/mini-game/src/main/java/com/mini/game/pojo/blob/BaseInfo.java b/paradogs-demo/paradogs-demo-client/src/main/java/com/paradogs/demo/client/pojo/CGLogin.java similarity index 40% rename from mini-game/src/main/java/com/mini/game/pojo/blob/BaseInfo.java rename to paradogs-demo/paradogs-demo-client/src/main/java/com/paradogs/demo/client/pojo/CGLogin.java index 3213c28b0ef4cf4f3d87f020f3a5612346f1a17d..a33679a3cdc81f01ecab129150c9a2101e84d299 100644 --- a/mini-game/src/main/java/com/mini/game/pojo/blob/BaseInfo.java +++ b/paradogs-demo/paradogs-demo-client/src/main/java/com/paradogs/demo/client/pojo/CGLogin.java @@ -1,31 +1,29 @@ -package com.mini.game.pojo.blob; +package com.paradogs.demo.client.pojo; +import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.LocalDateTime; -import java.util.List; -import java.util.Map; - /** * @author: yumi - * @date: 2023-03-21 16:37 + * @date: 2023/11/13 14:37 * @Description: TODO */ @Data -@NoArgsConstructor @AllArgsConstructor -public class BaseInfo extends BaseBlob { +@NoArgsConstructor +@ProtobufClass +public class CGLogin { /** - * 登录天数 + * 账号 */ - private List loginDays; + private String account; /** - * 每日杀敌数 key: date, value: kills + * 密码 */ - private Map kills; + private String password; } diff --git a/paradogs-demo/paradogs-demo-client/src/main/resources/application.yml b/paradogs-demo/paradogs-demo-client/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..4674ff9b2a2cff7fae5ef8e6ddeaf0a70d59c37b --- /dev/null +++ b/paradogs-demo/paradogs-demo-client/src/main/resources/application.yml @@ -0,0 +1,26 @@ +paradogs: + server: + port: 8003 + type: client + key: client-1 + master: + host: localhost + port: 8888 + +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://120.26.15.12:3306/paradogs_game?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8 + username: root + password: ningensama122 + +mybatis-plus: + mapper-locations: classpath:/mappers/**/*.xml + global-config: + db-config: + id-type: auto + field-strategy: not_empty + table-underline: true + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + diff --git a/mini-gate/pom.xml b/paradogs-demo/paradogs-demo-gate/pom.xml similarity index 49% rename from mini-gate/pom.xml rename to paradogs-demo/paradogs-demo-gate/pom.xml index c8297db82fc8a81db69aa43b99a246cc59b07cdf..f038ebd3a77dc571016c253d636ecf484ef2527d 100644 --- a/mini-gate/pom.xml +++ b/paradogs-demo/paradogs-demo-gate/pom.xml @@ -3,26 +3,24 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - mini - com.mini - 0.0.1-SNAPSHOT + paradogs-demo + com.paradogs + 0.0.1 4.0.0 - mini-gate + paradogs-demo-gate - - - - com.mini - mini-common - + + 8 + 8 + + - com.mini - mini-game + com.paradogs + paradogs-framework-gate-starter - \ No newline at end of file diff --git a/mini-gate/src/main/java/com/mini/gate/GateApplication.java b/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/DemoGateApplication.java similarity index 38% rename from mini-gate/src/main/java/com/mini/gate/GateApplication.java rename to paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/DemoGateApplication.java index 1c3a3d17c419fd2513de638e1883decaad5be463..4a60aa590f2c0f4bbde1eb3cefaea4bb0f397c8c 100644 --- a/mini-gate/src/main/java/com/mini/gate/GateApplication.java +++ b/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/DemoGateApplication.java @@ -1,21 +1,19 @@ -package com.mini.gate; +package com.paradogs.demo.gate; + +import com.paradogs.framework.core.annoations.EnableParadogs; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.scheduling.annotation.EnableAsync; /** * @author: yumi - * @date: 2023-02-24 14:20 + * @date: 2023/8/7 17:32 * @Description: TODO */ -@SpringBootApplication( - scanBasePackageClasses = {GateApplication.class}, - scanBasePackages = {"com.mini.common"} -) -@EnableAsync -public class GateApplication { +@EnableParadogs +@SpringBootApplication +public class DemoGateApplication { public static void main(String[] args) { - SpringApplication.run(GateApplication.class, args); + SpringApplication.run(DemoGateApplication.class, args); } } diff --git a/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/controller/GateController.java b/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/controller/GateController.java new file mode 100644 index 0000000000000000000000000000000000000000..12499bce91c49f5f1358e829fa95c0b80395022b --- /dev/null +++ b/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/controller/GateController.java @@ -0,0 +1,60 @@ +package com.paradogs.demo.gate.controller; + +import com.paradogs.demo.gate.misc.PlayerOnlineHolder; +import com.paradogs.demo.gate.rpc.LogicClient; +import com.paradogs.framework.common.pojo.cg.CGGatewayLogin; +import com.paradogs.framework.common.pojo.cg.CGPrepareLogin; +import com.paradogs.framework.common.pojo.misc.LongWrapper; +import com.paradogs.framework.core.annoations.request.PRController; +import com.paradogs.framework.core.annoations.request.PRMsgMapping; +import com.paradogs.framework.core.msg.GCAck; +import com.paradogs.framework.core.utils.PRAsync; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + * @author: yumi + * @date: 2023/11/13 14:51 + * @Description: TODO + */ +@Slf4j +@PRController +public class GateController { + + @Autowired + private LogicClient logicClient; + + @Autowired + private PlayerOnlineHolder playerOnlineHolder; + + /** + * 玩家准备从登录服转移连接到网关服,待优化:这里要防止玩家调用 + * @param msg + */ + @PRMsgMapping("prepareLogin") + public GCAck prepareLogin(CGPrepareLogin msg) { + playerOnlineHolder.willLogin(msg.getUid(), msg.getToken()); + return GCAck.success(); + } + + /** + * 玩家携带 token 登录 + * @param msg + * @return + */ + @PRMsgMapping(value = "login", async = true) + public GCAck login(CGGatewayLogin msg) { + PlayerOnlineHolder.WillLoginInfo info = playerOnlineHolder.get(msg.getToken()); + if (info != null) { + logicClient.loadPlayer(new LongWrapper(info.getUid())); + return GCAck.success(); + } + return GCAck.fail(); + } + +} diff --git a/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/misc/PlayerOnlineHolder.java b/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/misc/PlayerOnlineHolder.java new file mode 100644 index 0000000000000000000000000000000000000000..994fd4df7c24e735c4d0b56943e936320b7daf2e --- /dev/null +++ b/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/misc/PlayerOnlineHolder.java @@ -0,0 +1,69 @@ +package com.paradogs.demo.gate.misc; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; + +/** + * @author: yumi + * @date: 2023/11/23 14:35 + * @Description: TODO + */ +@Slf4j +@Component +public class PlayerOnlineHolder { + + /** + * 准备登录的玩家 + */ + private Map willLoginMap = new HashMap<>(); + + + /** + * 准备登录 + * @param uid + * @param token + */ + public void willLogin(Long uid, String token) { + willLoginMap.put(token, new WillLoginInfo(uid, token)); + } + public WillLoginInfo get(String token) { + return willLoginMap.get(token); + } + public void removeToken(String token) { + willLoginMap.remove(token); + } + + @Data + public class WillLoginInfo { + /** + * 登录凭证 + */ + private String token; + /** + * 玩家 ID + */ + private Long uid; + /** + * 创建时间 + */ + private LocalDateTime createTime; + /** + * 超时时间 + */ + private LocalDateTime expireTime; + + public WillLoginInfo(Long uid, String token) { + this.token = token; + this.uid = uid; + this.createTime = LocalDateTime.now(); + this.expireTime = LocalDateTime.now().plusMinutes(1L); // 写死 1 分钟超时 + } + } + + +} diff --git a/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/rpc/LogicClient.java b/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/rpc/LogicClient.java new file mode 100644 index 0000000000000000000000000000000000000000..0ff2a287b90cd34b0c4836a0bfffce712f8634de --- /dev/null +++ b/paradogs-demo/paradogs-demo-gate/src/main/java/com/paradogs/demo/gate/rpc/LogicClient.java @@ -0,0 +1,18 @@ +package com.paradogs.demo.gate.rpc; + +import com.paradogs.framework.common.pojo.misc.LongWrapper; +import com.paradogs.framework.core.annoations.rpc.PRClient; +import com.paradogs.framework.core.annoations.rpc.PRRPCMapping; +import com.paradogs.framework.core.msg.GCAck; + +/** + * @author: yumi + * @date: 2023/11/29 10:18 + * @Description: TODO + */ +@PRClient("logic") +public interface LogicClient { + + @PRRPCMapping("misc.loadPlayer") + GCAck loadPlayer(LongWrapper uid); +} diff --git a/paradogs-demo/paradogs-demo-gate/src/main/resources/application.yml b/paradogs-demo/paradogs-demo-gate/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..79db3fca36024b352358cf21ecee50ecddace7c9 --- /dev/null +++ b/paradogs-demo/paradogs-demo-gate/src/main/resources/application.yml @@ -0,0 +1,35 @@ +paradogs: + server: + port: 8001 + type: gate + key: gate-1 + master: + host: localhost + port: 8888 + clients: + - host: localhost + port: 8090 + type: logic + +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://120.26.15.12:3306/paradogs_game?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8 + username: root + password: ningensama122 + +mybatis-plus: + mapper-locations: classpath:/mappers/**/*.xml + global-config: + db-config: + id-type: auto + field-strategy: not_empty + table-underline: true + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + +# 日志级别配置 +logging: + level: + # 指定的包路径 + com.paradogs: debug diff --git a/paradogs-demo/paradogs-demo-logic/pom.xml b/paradogs-demo/paradogs-demo-logic/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..2f654767309c5cd830e2a4bf457cce65652041a8 --- /dev/null +++ b/paradogs-demo/paradogs-demo-logic/pom.xml @@ -0,0 +1,26 @@ + + + + paradogs-demo + com.paradogs + 0.0.1 + + 4.0.0 + + paradogs-demo-logic + + + 8 + 8 + + + + + com.paradogs + paradogs-framework-server-starter + + + + \ No newline at end of file diff --git a/mini-game/src/main/java/com/mini/game/GameApplication.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/DemoLogicApplication.java similarity index 46% rename from mini-game/src/main/java/com/mini/game/GameApplication.java rename to paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/DemoLogicApplication.java index bdae14ce626d8e05f0c272e256ccddc03b884e8a..68507a8e8e8e8926893798c4415bee3fe7c72505 100644 --- a/mini-game/src/main/java/com/mini/game/GameApplication.java +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/DemoLogicApplication.java @@ -1,23 +1,20 @@ -package com.mini.game; +package com.paradogs.demo.logic; -import lombok.extern.slf4j.Slf4j; +import com.paradogs.framework.core.annoations.EnableParadogs; import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableAsync; /** * @author: yumi - * @date: 2023-02-24 09:18 + * @date: 2023/7/31 23:20 * @Description: TODO */ -@SpringBootApplication( - scanBasePackageClasses = {GameApplication.class}, - scanBasePackages = {"com.mini.common"} -) -@EnableAsync -@Slf4j -public class GameApplication { +@EnableParadogs +@SpringBootApplication +public class DemoLogicApplication { public static void main(String[] args) { - SpringApplication.run(GameApplication.class, args); + SpringApplication.run(DemoLogicApplication.class, args); } } diff --git a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/controller/LoginController.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/controller/LoginController.java new file mode 100644 index 0000000000000000000000000000000000000000..ca18e5d570616801023e8fee77076c13033fb768 --- /dev/null +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/controller/LoginController.java @@ -0,0 +1,42 @@ +package com.paradogs.demo.logic.controller; + +import com.paradogs.demo.logic.event.PlayerLoginEvent; +import com.paradogs.demo.logic.manager.base.PlayerTemplate; +import com.paradogs.framework.common.pojo.misc.LongWrapper; +import com.paradogs.framework.core.annoations.request.PRController; +import com.paradogs.framework.core.annoations.request.PRMsgMapping; +import com.paradogs.framework.core.msg.GCAck; +import com.paradogs.framework.core.utils.EventUtils; +import com.paradogs.framework.core.utils.PRAsync; +import lombok.extern.slf4j.Slf4j; + +import java.util.concurrent.CompletableFuture; + +/** + * @author: yumi + * @date: 2023/11/29 9:56 + * @Description: TODO + */ +@Slf4j +@PRController +@PRMsgMapping("misc") +public class LoginController { + + @PRMsgMapping(value = "loadPlayer", async = true) + public GCAck loadPlayer(LongWrapper wrapper) { + // 初始化玩家数据 + Long uid = wrapper.getVal(); + PlayerTemplate playerTemplate = new PlayerTemplate(uid); + EventUtils.publishEvent(new PlayerLoginEvent(uid, playerTemplate)); + log.info("Load Player: {}", uid); + return GCAck.success(); + } + + @PRMsgMapping("hello") + public GCAck hello() { + log.info("================ hello game !!!"); + return GCAck.success(); + } + + +} diff --git a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/event/PlayerLoginEvent.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/event/PlayerLoginEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..ca638a9836ce42ebd9fca88865621b3cc3f185ca --- /dev/null +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/event/PlayerLoginEvent.java @@ -0,0 +1,29 @@ +package com.paradogs.demo.logic.event; + +import com.paradogs.demo.logic.manager.base.PlayerTemplate; +import com.paradogs.framework.common.events.base.AnonEvent; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author: yumi + * @date: 2023/11/29 10:36 + * @Description: TODO + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PlayerLoginEvent extends AnonEvent { + + /** + * 玩家 ID + */ + private Long uid; + + /** + * 玩家数据 + */ + private PlayerTemplate playerTemplate; + +} diff --git a/mini-game/src/main/java/com/mini/game/pojo/blob/PlayerCurrency.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/event/PlayerLogoutEvent.java similarity index 48% rename from mini-game/src/main/java/com/mini/game/pojo/blob/PlayerCurrency.java rename to paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/event/PlayerLogoutEvent.java index ad188def8fef6169b6645f647a96b2093c4f60f0..6cdaf9518f57623187f873867cec3227340ed0e7 100644 --- a/mini-game/src/main/java/com/mini/game/pojo/blob/PlayerCurrency.java +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/event/PlayerLogoutEvent.java @@ -1,27 +1,23 @@ -package com.mini.game.pojo.blob; +package com.paradogs.demo.logic.event; +import com.paradogs.framework.common.events.base.AnonEvent; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * @author: yumi - * @date: 2023-02-28 11:45 + * @date: 2023/11/29 10:38 * @Description: TODO */ @Data @AllArgsConstructor @NoArgsConstructor -public class PlayerCurrency extends BaseBlob { +public class PlayerLogoutEvent extends AnonEvent { /** - * 金币 + * 玩家 ID */ - private Long gold; - - /** - * 木材 - */ - private Long wood; + private Long uid; } diff --git a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/exceptions/GobalExceptionHandler.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/exceptions/GobalExceptionHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..70dbde8ee5276f710259dad1b038775bf0a52acd --- /dev/null +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/exceptions/GobalExceptionHandler.java @@ -0,0 +1,26 @@ +package com.paradogs.demo.logic.exceptions; + +import com.paradogs.framework.core.annoations.exception.PRExceptionHandler; +import com.paradogs.framework.core.annoations.exception.PRExceptionHandlerClass; +import lombok.extern.slf4j.Slf4j; + +/** + * @author: yumi + * @date: 2023/8/2 11:06 + * @Description: TODO + */ +@Slf4j +@PRExceptionHandlerClass +public class GobalExceptionHandler { + + @PRExceptionHandler(Exception.class) + public void handleException(Exception e) { + log.info("{}", e); + } + +// @PdgExceptionHandler(SerializationException.class) +// public void handleSerializationException(SerializationException e) { +// log.info("yumi !! 序列化异常 !!"); +// } + +} diff --git a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/PlayerManager.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/PlayerManager.java new file mode 100644 index 0000000000000000000000000000000000000000..8b3bd7eebd6e1b48aa8eaa17c524b10ebba5b640 --- /dev/null +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/PlayerManager.java @@ -0,0 +1,18 @@ +package com.paradogs.demo.logic.manager; + +import com.paradogs.framework.common.dao.PlayerDao; +import com.paradogs.framework.common.entity.Player; +import com.paradogs.demo.logic.manager.base.BaseManager; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +/** + * @author: yumi + * @date: 2023/11/23 14:01 + * @Description: TODO + */ +@Scope("prototype") +@Component +public class PlayerManager extends BaseManager { + +} diff --git a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/base/BaseManager.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/base/BaseManager.java new file mode 100644 index 0000000000000000000000000000000000000000..ff08883dbc2ae1e7a1fdd083dd9780b5c284ccff --- /dev/null +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/base/BaseManager.java @@ -0,0 +1,48 @@ +package com.paradogs.demo.logic.manager.base; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.paradogs.framework.common.entity.base.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @author: yumi + * @date: 2023/11/23 14:01 + * @Description: TODO + */ +@Slf4j +public abstract class BaseManager> { + + @Autowired + private D dao; + + @Getter + @Setter + private T entity; + + /** + * 加载玩家数据 + * @param uid + */ + public void loadData(Long uid) { + this.entity = dao.getById(uid); + if (this.entity == null) { + try { + this.entity = dao.getEntityClass().newInstance(); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + log.debug("Load {}: {}", this.getClass().getSimpleName(), this.entity); + } + + /** + * 循环检测 + */ + void heartBeat() {} + +} diff --git a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/base/PlayerTemplate.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/base/PlayerTemplate.java new file mode 100644 index 0000000000000000000000000000000000000000..28ea8b70f258f38ffea5a86f1d666133b8cc6ecd --- /dev/null +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/manager/base/PlayerTemplate.java @@ -0,0 +1,43 @@ +package com.paradogs.demo.logic.manager.base; + +import com.paradogs.demo.logic.manager.PlayerManager; +import com.paradogs.framework.core.utils.SpringUtils; +import lombok.Data; + +import java.lang.reflect.Field; + +/** + * @author: yumi + * @date: 2023/11/23 14:00 + * @Description: TODO + */ +@Data +public class PlayerTemplate { + + /** + * 玩家 ID + */ + private Long uid; + + private PlayerManager playerManager; + + public PlayerTemplate(Long uid) { + /** + * 通过反射初始化所有 Manager + */ + Field[] fields = this.getClass().getDeclaredFields(); + for (Field field : fields) { + if (BaseManager.class.isAssignableFrom(field.getType())) { + try { + BaseManager manager = (BaseManager) SpringUtils.getBean(field.getType()); + // 加载数据 + manager.loadData(uid); + field.set(this, manager); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } + } + +} diff --git a/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/PlayerOnlineHolder.java b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/PlayerOnlineHolder.java new file mode 100644 index 0000000000000000000000000000000000000000..4a7d46b2d2e2b772e153d51c41d23463b2059547 --- /dev/null +++ b/paradogs-demo/paradogs-demo-logic/src/main/java/com/paradogs/demo/logic/misc/PlayerOnlineHolder.java @@ -0,0 +1,37 @@ +package com.paradogs.demo.logic.misc; + +import com.paradogs.demo.logic.event.PlayerLoginEvent; +import com.paradogs.demo.logic.event.PlayerLogoutEvent; +import com.paradogs.demo.logic.manager.base.PlayerTemplate; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author: yumi + * @date: 2023/11/29 10:34 + * @Description: TODO + */ +@Slf4j +@Component +public class PlayerOnlineHolder { + + /** + * 在线玩家 uid: template + */ + private Map onlinePlayerMap = new HashMap<>(); + + @EventListener(PlayerLoginEvent.class) + public void PlayerLoginEventHandler(PlayerLoginEvent event) { + onlinePlayerMap.put(event.getUid(), event.getPlayerTemplate()); + } + + @EventListener(PlayerLogoutEvent.class) + public void PlayerLogoutEventHandler(PlayerLogoutEvent event) { + onlinePlayerMap.remove(event.getUid()); + } + +} diff --git a/paradogs-demo/paradogs-demo-logic/src/main/resources/application.yml b/paradogs-demo/paradogs-demo-logic/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..0d96fe13a8c5c11ee77ccb9a0d1639f29f971932 --- /dev/null +++ b/paradogs-demo/paradogs-demo-logic/src/main/resources/application.yml @@ -0,0 +1,31 @@ +paradogs: + server: + port: 8090 + type: logic + key: logic-1 + master: + host: localhost + port: 8888 + +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://120.26.15.12:3306/paradogs_game?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8 + username: root + password: ningensama122 + +mybatis-plus: + mapper-locations: classpath:/mappers/**/*.xml + global-config: + db-config: + id-type: auto + field-strategy: not_empty + table-underline: true + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + +# 日志级别配置 +logging: + level: + # 指定的包路径 + com.paradogs: debug \ No newline at end of file diff --git a/paradogs-demo/paradogs-demo-login/pom.xml b/paradogs-demo/paradogs-demo-login/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..91ae9a27bc369622feeac22148ed221de5969dde --- /dev/null +++ b/paradogs-demo/paradogs-demo-login/pom.xml @@ -0,0 +1,26 @@ + + + + paradogs-demo + com.paradogs + 0.0.1 + + 4.0.0 + + paradogs-demo-login + + + 8 + 8 + + + + + com.paradogs + paradogs-framework-gate-starter + + + + \ No newline at end of file diff --git a/mini-client/src/main/java/com/mini/client/ClientApplication.java b/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/DemoLoginApplication.java similarity index 33% rename from mini-client/src/main/java/com/mini/client/ClientApplication.java rename to paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/DemoLoginApplication.java index 13b2c8540072bc712c3a50421278df3223f4e240..b0258988c93ee2a9a418be00236dac5cdcc93f16 100644 --- a/mini-client/src/main/java/com/mini/client/ClientApplication.java +++ b/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/DemoLoginApplication.java @@ -1,23 +1,21 @@ -package com.mini.client; +package com.paradogs.demo.login; -import org.mybatis.spring.annotation.MapperScan; +import com.paradogs.framework.gate.PRGateServerMsgHandler; +import com.paradogs.framework.core.annoations.EnableParadogs; +import com.paradogs.framework.core.netty.server.PRAbServerMsgHandler; +import com.paradogs.framework.core.utils.SpringUtils; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.scheduling.annotation.EnableAsync; /** * @author: yumi - * @date: 2023/2/25 13:41 + * @date: 2023/8/24 16:47 * @Description: TODO */ -@SpringBootApplication( - scanBasePackageClasses = {ClientApplication.class}, - scanBasePackages = {"com.mini.common"} -) -@MapperScan("com.mini.common") -@EnableAsync -public class ClientApplication { +@EnableParadogs +@SpringBootApplication +public class DemoLoginApplication { public static void main(String[] args) { - SpringApplication.run(ClientApplication.class, args); + SpringApplication.run(DemoLoginApplication.class, args); } } diff --git a/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/controller/LoginController.java b/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/controller/LoginController.java new file mode 100644 index 0000000000000000000000000000000000000000..d6fd32b7c9b606b5767d98c5b625476b63abb7ce --- /dev/null +++ b/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/controller/LoginController.java @@ -0,0 +1,65 @@ +package com.paradogs.demo.login.controller; + +import com.paradogs.framework.common.pojo.cg.CGLogin; +import com.paradogs.framework.common.pojo.cg.CGPrepareLogin; +import com.paradogs.demo.login.rpc.GateClient; +import com.paradogs.demo.login.rpc.MasterClient; +import com.paradogs.framework.common.dao.PlayerDao; +import com.paradogs.framework.common.entity.Player; +import com.paradogs.framework.common.pojo.gc.GCAllocGateway; +import com.paradogs.framework.common.pojo.gc.GCApplyGate; +import com.paradogs.framework.core.annoations.request.PRController; +import com.paradogs.framework.core.annoations.request.PRMsgMapping; +import com.paradogs.framework.core.msg.GCAck; +import com.paradogs.framework.core.utils.PRAsync; +import com.paradogs.framework.core.utils.Wrap; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.UUID; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.atomic.AtomicLong; + +/** + * @author: yumi + * @date: 2023/11/13 14:33 + * @Description: TODO + */ +@Slf4j +@PRController +public class LoginController { + + @Autowired + private MasterClient masterClient; + + @Autowired + private GateClient gateClient; + + @Autowired + private PlayerDao playerDao; + + @PRMsgMapping(value = "applyGate", async = true) + public GCApplyGate login(CGLogin dto) { + Player player = playerDao.getOne(Wrap.lbq() + .eq(Player::getAccount, dto.getAccount()) + .eq(Player::getPwd, dto.getPassword())); + + if (player == null) { + GCAck.fail(); + } + + log.info("!!! 玩家登录成功: {}, {}", player.getAccount(), player); + + // 申请一个可以连接的网关 + GCAllocGateway gcAllocGateway = masterClient.allocGate(); + + // 网关服准备登录信息 + String token = UUID.randomUUID().toString(); + gateClient.prepareLogin(new CGPrepareLogin(player.getUid(), token)); + GCApplyGate gc = new GCApplyGate(gcAllocGateway.getHost(), gcAllocGateway.getPort(), token); + + // 返回连接地址 + return gc; // 这个是发给客户端的,而不是发给服务器的,要特殊处理 + } + +} diff --git a/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/rpc/GateClient.java b/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/rpc/GateClient.java new file mode 100644 index 0000000000000000000000000000000000000000..2386179a71998d91f91c27220429edf9e738ee27 --- /dev/null +++ b/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/rpc/GateClient.java @@ -0,0 +1,19 @@ +package com.paradogs.demo.login.rpc; + +import com.paradogs.framework.common.pojo.cg.CGPrepareLogin; +import com.paradogs.framework.core.annoations.rpc.PRClient; +import com.paradogs.framework.core.annoations.rpc.PRRPCMapping; +import com.paradogs.framework.core.msg.GCAck; + +/** + * @author: yumi + * @date: 2023/11/13 14:50 + * @Description: TODO + */ +@PRClient("gate") +public interface GateClient { + + @PRRPCMapping("prepareLogin") + GCAck prepareLogin(CGPrepareLogin prepareLogin); + +} diff --git a/mini-common/src/main/java/com/mini/common/message/MsgData.java b/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/rpc/LogicClient.java similarity index 34% rename from mini-common/src/main/java/com/mini/common/message/MsgData.java rename to paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/rpc/LogicClient.java index e805e9475278a7bc4047116f3b75df1f275bb794..89478d8e790e462089efd50a90ce047075d9534b 100644 --- a/mini-common/src/main/java/com/mini/common/message/MsgData.java +++ b/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/rpc/LogicClient.java @@ -1,9 +1,9 @@ -package com.mini.common.message; +package com.paradogs.demo.login.rpc; /** * @author: yumi - * @date: 2023/2/15 21:14 + * @date: 2023/11/29 10:08 * @Description: TODO */ -public class MsgData { +public interface LogicClient { } diff --git a/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/rpc/MasterClient.java b/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/rpc/MasterClient.java new file mode 100644 index 0000000000000000000000000000000000000000..50ca82a10fa8229bdc5424ff8fd74cb3e0e8d6d3 --- /dev/null +++ b/paradogs-demo/paradogs-demo-login/src/main/java/com/paradogs/demo/login/rpc/MasterClient.java @@ -0,0 +1,18 @@ +package com.paradogs.demo.login.rpc; + +import com.paradogs.framework.common.pojo.gc.GCAllocGateway; +import com.paradogs.framework.core.annoations.rpc.PRClient; +import com.paradogs.framework.core.annoations.rpc.PRRPCMapping; + +/** + * @author: yumi + * @date: 2023/11/13 11:19 + * @Description: TODO + */ +@PRClient("master") +public interface MasterClient { + + @PRRPCMapping("_master.allocGate") + GCAllocGateway allocGate(); + +} diff --git a/paradogs-demo/paradogs-demo-login/src/main/resources/application.yml b/paradogs-demo/paradogs-demo-login/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..df2b71a3796330d695db57beb35852fdcb63f3a0 --- /dev/null +++ b/paradogs-demo/paradogs-demo-login/src/main/resources/application.yml @@ -0,0 +1,31 @@ +paradogs: + server: + port: 80 + type: login + key: login-1 + master: + host: localhost + port: 8888 + +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://120.26.15.12:3306/paradogs_game?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8 + username: root + password: ningensama122 + +mybatis-plus: + mapper-locations: classpath:/mappers/**/*.xml + global-config: + db-config: + id-type: auto + field-strategy: not_empty + table-underline: true + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + +# 日志级别配置 +logging: + level: + # 指定的包路径 + com.paradogs: debug diff --git a/paradogs-demo/paradogs-demo-master/pom.xml b/paradogs-demo/paradogs-demo-master/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..72dd4be08895b0858289c74658c6d29c0a9b8580 --- /dev/null +++ b/paradogs-demo/paradogs-demo-master/pom.xml @@ -0,0 +1,26 @@ + + + + paradogs-demo + com.paradogs + 0.0.1 + + 4.0.0 + + paradogs-demo-master + + + 8 + 8 + + + + + com.paradogs + paradogs-framework-master-starter + + + + \ No newline at end of file diff --git a/mini-login/src/main/java/com/mini/login/LoginApplication.java b/paradogs-demo/paradogs-demo-master/src/main/java/com/paradogs/demo/master/DemoMasterApplication.java similarity index 35% rename from mini-login/src/main/java/com/mini/login/LoginApplication.java rename to paradogs-demo/paradogs-demo-master/src/main/java/com/paradogs/demo/master/DemoMasterApplication.java index b0da69a752dd29d93b8112caaecf2d0384b5ae7f..dfed78b4bd77faa7451ddacc3fc68c599fc2d008 100644 --- a/mini-login/src/main/java/com/mini/login/LoginApplication.java +++ b/paradogs-demo/paradogs-demo-master/src/main/java/com/paradogs/demo/master/DemoMasterApplication.java @@ -1,22 +1,18 @@ -package com.mini.login; +package com.paradogs.demo.master; -import org.mybatis.spring.annotation.MapperScan; +import com.paradogs.framework.core.annoations.EnableParadogs; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.scheduling.annotation.EnableAsync; /** * @author: yumi - * @date: 2023-02-24 14:22 + * @date: 2023/8/28 9:32 * @Description: TODO */ -@SpringBootApplication( - scanBasePackageClasses = {LoginApplication.class}, - scanBasePackages = {"com.mini.common"} -) -@EnableAsync -public class LoginApplication { +@EnableParadogs +@SpringBootApplication +public class DemoMasterApplication { public static void main(String[] args) { - SpringApplication.run(LoginApplication.class, args); + SpringApplication.run(DemoMasterApplication.class, args); } } diff --git a/paradogs-demo/paradogs-demo-master/src/main/resources/application.yml b/paradogs-demo/paradogs-demo-master/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..bc5aeb53959365cbf16a531498c3b5e8a9fe71bf --- /dev/null +++ b/paradogs-demo/paradogs-demo-master/src/main/resources/application.yml @@ -0,0 +1,29 @@ +paradogs: + server: + port: 8888 + type: master + name: master-1 + master: true + +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://120.26.15.12:3306/paradogs_game?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8 + username: root + password: ningensama122 + +mybatis-plus: + mapper-locations: classpath:/mappers/**/*.xml + global-config: + db-config: + id-type: assign_id + field-strategy: not_empty + table-underline: true + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + +# 日志级别配置 +logging: + level: + # 指定的包路径 + com.paradogs: debug \ No newline at end of file diff --git a/paradogs-demo/pom.xml b/paradogs-demo/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..405438baf06e22752a2ebf232408dbf94cc99ce5 --- /dev/null +++ b/paradogs-demo/pom.xml @@ -0,0 +1,27 @@ + + + + paradogs + com.paradogs + 0.0.1 + + 4.0.0 + + paradogs-demo + pom + + paradogs-demo-logic + paradogs-demo-client + paradogs-demo-gate + paradogs-demo-login + paradogs-demo-master + + + + 8 + 8 + + + \ No newline at end of file diff --git a/paradogs-framework/paradogs-framework-common/pom.xml b/paradogs-framework/paradogs-framework-common/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..1732bc1d94a79969c65358609936c6e899f83ebe --- /dev/null +++ b/paradogs-framework/paradogs-framework-common/pom.xml @@ -0,0 +1,38 @@ + + + + paradogs-framework + com.paradogs + 0.0.1 + + 4.0.0 + + paradogs-framework-common + + + 8 + 8 + + + + + com.baomidou + mybatis-plus-boot-starter + + + org.projectlombok + lombok + + + com.baidu + jprotobuf + + + io.netty + netty-all + + + + \ No newline at end of file diff --git a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/PlayerDao.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/PlayerDao.java new file mode 100644 index 0000000000000000000000000000000000000000..1d5b9128f6ac220b45cf6c59e46b67efc33bcd65 --- /dev/null +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/PlayerDao.java @@ -0,0 +1,16 @@ +package com.paradogs.framework.common.dao; + +import com.paradogs.framework.common.entity.Player; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author yumi + * @since 2023-11-20 + */ +public interface PlayerDao extends IService { + +} diff --git a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/impl/PlayerDaoImpl.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/impl/PlayerDaoImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..d7650f97cebeb99b0d0cd936ecb3242f0704aa82 --- /dev/null +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/dao/impl/PlayerDaoImpl.java @@ -0,0 +1,20 @@ +package com.paradogs.framework.common.dao.impl; + +import com.paradogs.framework.common.entity.Player; +import com.paradogs.framework.common.mapper.PlayerMapper; +import com.paradogs.framework.common.dao.PlayerDao; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author yumi + * @since 2023-11-20 + */ +@Service +public class PlayerDaoImpl extends ServiceImpl implements PlayerDao { + +} diff --git a/mini-login/src/main/java/com/mini/login/pojo/entity/Player.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/entity/Player.java similarity index 30% rename from mini-login/src/main/java/com/mini/login/pojo/entity/Player.java rename to paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/entity/Player.java index 7041bb793e1aa632c503399357489ab43433873d..d3a3d31688e7d43e6ddae6a10a661807050c6cb8 100644 --- a/mini-login/src/main/java/com/mini/login/pojo/entity/Player.java +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/entity/Player.java @@ -1,41 +1,34 @@ -package com.mini.login.pojo.entity; +package com.paradogs.framework.common.entity; -import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.mini.login.pojo.blob.PlayerCurrency; + +import com.paradogs.framework.common.entity.base.BaseEntity; import lombok.AllArgsConstructor; -import lombok.Data; +import lombok.Getter; import lombok.NoArgsConstructor; - -import java.io.Serializable; +import lombok.Setter; /** - * 登陆器仅用于登录的玩家对象,也可以提高效率, - * 避免 blob 加载错误(可以引用 game 的 entity 模块解决,暂无) - * @author: yumi - * @date: 2023/2/18 12:16 - * @Description: TODO + *

+ * + *

+ * + * @author yumi + * @since 2023-11-20 */ -@Data -@NoArgsConstructor +@Getter +@Setter @AllArgsConstructor -@TableName(value = "player", autoResultMap = true) -public class Player implements Serializable { +@NoArgsConstructor +@TableName("g_player") +public class Player extends BaseEntity { - @TableId(type = IdType.AUTO) - private Long id; + private static final long serialVersionUID = 1L; @TableField("account") private String account; @TableField("pwd") private String pwd; - - public Player(String account, String pwd, PlayerCurrency currency) { - this.account = account; - this.pwd = pwd; - } - } diff --git a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/entity/base/BaseEntity.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/entity/base/BaseEntity.java new file mode 100644 index 0000000000000000000000000000000000000000..58ba82d3c14913412125fd5fb09bab7c43f84b0d --- /dev/null +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/entity/base/BaseEntity.java @@ -0,0 +1,38 @@ +package com.paradogs.framework.common.entity.base; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author: yumi + * @date: 2023/11/20 11:01 + * @Description: TODO + */ +@Data +public class BaseEntity implements Serializable { + + /** + * 玩家 ID + */ + @TableId(value = "uid", type = IdType.AUTO) + private Long uid; + + /** + * 创建时间 + */ + @TableField(value = "createTime", fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 更新时间 + */ + @TableField(value = "updateTime", fill = FieldFill.UPDATE) + private LocalDateTime updateTime; + +} diff --git a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/events/base/AnonEvent.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/events/base/AnonEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..a967f142fe98833192e291cdea707d376e5a5e16 --- /dev/null +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/events/base/AnonEvent.java @@ -0,0 +1,19 @@ +package com.paradogs.framework.common.events.base; + +/** + * @author: yumi + * @date: 2023/8/7 15:35 + * @Description: 匿名事件,不记录事件发布者 + */ +public class AnonEvent extends BaseEvent { + + /** + * ApplicationEvent 的 Object 参数用于记录发布事件的对象(发布者) + */ + public AnonEvent() { + super(new AnonObject()); + } + + public static class AnonObject {} + +} diff --git a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/events/base/BaseEvent.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/events/base/BaseEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..0cc84291c95f93d89b9373efb1377cc861c2f1b8 --- /dev/null +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/events/base/BaseEvent.java @@ -0,0 +1,39 @@ +package com.paradogs.framework.common.events.base; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import org.springframework.context.ApplicationEvent; + +import java.util.UUID; + +/** + * @author: yumi + * @date: 2023/7/31 22:00 + * @Description: TODO + * 事件分为三种: + * 1、内部传输(父子类接口实现) + * 2、远程传输(SpringEvent 实现) + * 3、待优化:网络传输(未实现) + */ +@Getter +@Setter +@ToString +public class BaseEvent extends ApplicationEvent { + + /** + * 唯一 ID + */ + private String id; + +// /** +// * 创建时间,ApplicationEvent 自带 +// */ +// private LocalDateTime createTime; + + public BaseEvent(Object source) { + super(source); + this.id = UUID.randomUUID().toString(); + } + +} diff --git a/mini-game/src/main/java/com/mini/game/mapper/PlayerMapper.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/mapper/PlayerMapper.java similarity index 40% rename from mini-game/src/main/java/com/mini/game/mapper/PlayerMapper.java rename to paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/mapper/PlayerMapper.java index b0e4c8119ab06016dc88a490a55438fe891e34d1..af723da794ac0864f4ac0077c128e5f4a5466b88 100644 --- a/mini-game/src/main/java/com/mini/game/mapper/PlayerMapper.java +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/mapper/PlayerMapper.java @@ -1,14 +1,16 @@ -package com.mini.game.mapper; +package com.paradogs.framework.common.mapper; +import com.paradogs.framework.common.entity.Player; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.mini.game.pojo.entity.Player; -import org.apache.ibatis.annotations.Mapper; /** - * @author: yumi - * @date: 2023/2/18 14:55 - * @Description: TODO + *

+ * Mapper 接口 + *

+ * + * @author yumi + * @since 2023-11-20 */ -@Mapper public interface PlayerMapper extends BaseMapper { + } diff --git a/mini-game/src/main/java/com/mini/game/message/CGBuyGoodsMsg.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/cg/CGGatewayLogin.java similarity index 45% rename from mini-game/src/main/java/com/mini/game/message/CGBuyGoodsMsg.java rename to paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/cg/CGGatewayLogin.java index 1f93c08c7e6461fcf2c58e7462bbfd973fb8ae12..0774ef97f5239b32d832e6097ee336c8de3a6fd1 100644 --- a/mini-game/src/main/java/com/mini/game/message/CGBuyGoodsMsg.java +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/cg/CGGatewayLogin.java @@ -1,26 +1,23 @@ -package com.mini.game.message; +package com.paradogs.framework.common.pojo.cg; -import com.mini.common.message.CGMessage; +import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; -import lombok.experimental.Accessors; /** * @author: yumi - * @date: 2023/2/18 18:12 + * @date: 2023/11/23 15:01 * @Description: TODO */ @Data @AllArgsConstructor @NoArgsConstructor -@Accessors(chain = true) @ToString(callSuper = true) -public class CGBuyGoodsMsg extends CGMessage { +@ProtobufClass +public class CGGatewayLogin { + + private String token; - /** - * 购买的商品 ID - */ - private Long buyGoodId; } diff --git a/mini-login/src/main/java/com/mini/login/message/CGLoginMsg.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/cg/CGLogin.java similarity index 44% rename from mini-login/src/main/java/com/mini/login/message/CGLoginMsg.java rename to paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/cg/CGLogin.java index b7e6d8a53f82465f2b7c2eb18b1b389ebd7b97c8..bdce9b34387564a6e32bc29531049d025907873d 100644 --- a/mini-login/src/main/java/com/mini/login/message/CGLoginMsg.java +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/cg/CGLogin.java @@ -1,16 +1,16 @@ -package com.mini.login.message; +package com.paradogs.framework.common.pojo.cg; -import com.mini.common.message.BaseMessage; -import com.mini.common.message.CGMessage; +import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass; import lombok.Data; /** * @author: yumi - * @date: 2023/2/25 12:30 + * @date: 2023/11/13 14:37 * @Description: TODO */ @Data -public class CGLoginMsg extends CGMessage { +@ProtobufClass +public class CGLogin { /** * 账号 @@ -20,6 +20,6 @@ public class CGLoginMsg extends CGMessage { /** * 密码 */ - private String pwd; + private String password; } diff --git a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/cg/CGPrepareLogin.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/cg/CGPrepareLogin.java new file mode 100644 index 0000000000000000000000000000000000000000..a48932d44817dc2c3f778122a8f62574be5a4ccc --- /dev/null +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/cg/CGPrepareLogin.java @@ -0,0 +1,23 @@ +package com.paradogs.framework.common.pojo.cg; + +import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author: yumi + * @date: 2023/11/13 17:18 + * @Description: TODO + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@ProtobufClass +public class CGPrepareLogin { + + private Long uid; + + private String token; + +} diff --git a/mini-login/src/main/java/com/mini/login/message/GCLoginMsg.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/gc/GCAllocGateway.java similarity index 39% rename from mini-login/src/main/java/com/mini/login/message/GCLoginMsg.java rename to paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/gc/GCAllocGateway.java index 5a8f8c8f547ad2b548a6460eb1410f898a168e4c..6535772d03eebf0ff8a8f39583a193bbeae3416b 100644 --- a/mini-login/src/main/java/com/mini/login/message/GCLoginMsg.java +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/gc/GCAllocGateway.java @@ -1,26 +1,29 @@ -package com.mini.login.message; +package com.paradogs.framework.common.pojo.gc; -import com.mini.common.message.BaseMessage; -import com.mini.common.message.GCMessage; +import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; /** * @author: yumi - * @date: 2023/2/25 12:39 + * @date: 2023/11/13 14:12 * @Description: TODO */ @Data @AllArgsConstructor @NoArgsConstructor -@Accessors(chain = true) -public class GCLoginMsg extends GCMessage { +@ProtobufClass +public class GCAllocGateway { /** - * 登录是否成功 + * 主机地址 */ - private Boolean reason; + private String host; + + /** + * 端口号 + */ + private int port; } diff --git a/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/gc/GCApplyGate.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/gc/GCApplyGate.java new file mode 100644 index 0000000000000000000000000000000000000000..69e5f1f0a0c0411f665fe722277d46ea822c1aba --- /dev/null +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/gc/GCApplyGate.java @@ -0,0 +1,34 @@ +package com.paradogs.framework.common.pojo.gc; + +import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author: yumi + * @date: 2023/11/29 10:46 + * @Description: TODO + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@ProtobufClass +public class GCApplyGate { + + /** + * 主机 + */ + private String host; + + /** + * 端口 + */ + private Integer port; + + /** + * 登录凭证 + */ + private String token; + +} diff --git a/mini-common/src/main/java/com/mini/common/message/GCErrorMsg.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/misc/IntWrapper.java similarity index 47% rename from mini-common/src/main/java/com/mini/common/message/GCErrorMsg.java rename to paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/misc/IntWrapper.java index 95fca276eb6b4a884b0dfb13babd34b613076955..4a51adbb47b4cb5311596bb6516c28a73a581936 100644 --- a/mini-common/src/main/java/com/mini/common/message/GCErrorMsg.java +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/misc/IntWrapper.java @@ -1,19 +1,21 @@ -package com.mini.common.message; +package com.paradogs.framework.common.pojo.misc; +import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * @author: yumi - * @date: 2023/2/18 19:11 + * @date: 2023/11/29 14:11 * @Description: TODO */ @Data @AllArgsConstructor @NoArgsConstructor -public class GCErrorMsg extends BaseMessage { +@ProtobufClass +public class IntWrapper { - private String errorMessage; + private Integer val; } diff --git a/mini-game/src/main/java/com/mini/game/message/CGLoginSuccessMsg.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/misc/LongWrapper.java similarity index 47% rename from mini-game/src/main/java/com/mini/game/message/CGLoginSuccessMsg.java rename to paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/misc/LongWrapper.java index d9ae8b152818839bf460de17bc57f6056374b3fc..8da05de42c022b0daaaec57957f132531f94c20b 100644 --- a/mini-game/src/main/java/com/mini/game/message/CGLoginSuccessMsg.java +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/misc/LongWrapper.java @@ -1,20 +1,21 @@ -package com.mini.game.message; +package com.paradogs.framework.common.pojo.misc; -import com.mini.common.message.CGMessage; +import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * @author: yumi - * @date: 2023-03-03 15:59 + * @date: 2023/11/29 14:10 * @Description: TODO */ @Data @AllArgsConstructor @NoArgsConstructor -public class CGLoginSuccessMsg extends CGMessage { +@ProtobufClass +public class LongWrapper { - private Long playerId; + private Long val; } diff --git a/mini-login/src/main/java/com/mini/login/pojo/blob/PlayerCurrency.java b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/misc/StringWrapper.java similarity index 46% rename from mini-login/src/main/java/com/mini/login/pojo/blob/PlayerCurrency.java rename to paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/misc/StringWrapper.java index 39d8c5d1aab309587fc03d785e64fdaaee8ce300..e80d95fefdc87a867442500e269689ede582a52b 100644 --- a/mini-login/src/main/java/com/mini/login/pojo/blob/PlayerCurrency.java +++ b/paradogs-framework/paradogs-framework-common/src/main/java/com/paradogs/framework/common/pojo/misc/StringWrapper.java @@ -1,27 +1,21 @@ -package com.mini.login.pojo.blob; +package com.paradogs.framework.common.pojo.misc; +import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * @author: yumi - * @date: 2023-02-28 11:45 + * @date: 2023/11/29 14:11 * @Description: TODO */ @Data @AllArgsConstructor @NoArgsConstructor -public class PlayerCurrency extends BaseBlob { +@ProtobufClass +public class StringWrapper { - /** - * 金币 - */ - private Long gold; - - /** - * 木材 - */ - private Long wood; + private String val; } diff --git a/paradogs-framework/paradogs-framework-common/src/main/resources/mapper/PlayerMapper.xml b/paradogs-framework/paradogs-framework-common/src/main/resources/mapper/PlayerMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..2378f5dfaeabc12252d93159b5b927ab9504f163 --- /dev/null +++ b/paradogs-framework/paradogs-framework-common/src/main/resources/mapper/PlayerMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/paradogs-framework/paradogs-framework-core/pom.xml b/paradogs-framework/paradogs-framework-core/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..5038f0d14c01df3fba4cd07807f6892b4868b1be --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/pom.xml @@ -0,0 +1,53 @@ + + + + paradogs-framework + com.paradogs + 0.0.1 + + 4.0.0 + + paradogs-framework-core + + + 8 + 8 + + + + + + io.netty + netty-all + + + + org.springframework.boot + spring-boot-starter + + + + + + + + + com.baidu + jprotobuf + + + + mysql + mysql-connector-java + + + + com.paradogs + paradogs-framework-common + + + + + \ No newline at end of file diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/CoreStarter.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/CoreStarter.java new file mode 100644 index 0000000000000000000000000000000000000000..f387142055974d6fe42120815349b97042b7f288 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/CoreStarter.java @@ -0,0 +1,19 @@ +package com.paradogs.framework.core; + +import com.paradogs.framework.core.annoations.request.PRRequestInterfaceSelector; +import com.paradogs.framework.core.annoations.rpc.PRRPCProxyBeanImportSelector; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +/** + * @author: yumi + * @date: 2023/8/28 17:56 + * @Description: TODO + */ +@Import({ + PRRPCProxyBeanImportSelector.class, + PRRequestInterfaceSelector.class, +}) +@Configuration +public class CoreStarter { +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/EnableParadogs.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/EnableParadogs.java new file mode 100644 index 0000000000000000000000000000000000000000..5422afed528d04395b8964a6a3c717b0259401fd --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/EnableParadogs.java @@ -0,0 +1,42 @@ +package com.paradogs.framework.core.annoations; + +import com.paradogs.framework.core.annoations.request.PRRequestInterfaceSelector; +import com.paradogs.framework.core.annoations.rpc.PRRPCProxyBeanImportSelector; +import com.paradogs.framework.core.config.*; +import com.paradogs.framework.core.netty.clients.common.PRClientLaunch; +import com.paradogs.framework.core.netty.server.PRServerLaunch; +import com.paradogs.framework.core.netty.server.ServerProperties; +import org.springframework.context.annotation.Import; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author: yumi + * @date: 2023/8/14 9:45 + * @Description: TODO + */ +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Import({ + // 等同于使用 META-INF.spring,看 @Import 注释,主要区别在于 @Import 可以手动注册,META-INF 为导入依赖自动注册 + PRRPCProxyBeanImportSelector.class, + PRRequestInterfaceSelector.class, + PRServerLaunch.class, // 启动服务器 + PRClientLaunch.class, // 连接 master 服务器 + ServerProperties.class, + NettyConfiguration.class, + QueueConfiguration.class, + RPCConfiguration.class, + MybatisPlusConfiguration.class +}) +public @interface EnableParadogs { + +// /** +// * 扫描包 +// * @return +// */ +// String[] scanPackages(); +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/base/BaseImportSelector.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/base/BaseImportSelector.java new file mode 100644 index 0000000000000000000000000000000000000000..39f4c129d0b8ddde8a334429f1d1f02de0191599 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/base/BaseImportSelector.java @@ -0,0 +1,64 @@ +package com.paradogs.framework.core.annoations.base; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.BeanFactoryAware; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.ImportSelector; +import org.springframework.core.type.AnnotationMetadata; + +import java.util.Set; + +/** + * @author: yumi + * @date: 2023/8/25 16:56 + * @Description: TODO + */ +@Slf4j +public abstract class BaseImportSelector extends BaseSelector implements ImportSelector { + + private AnnotationMetadata importingClassMetadata; + + @Override + public void setBeanFactory(BeanFactory beanFactory) throws BeansException { + super.beanFactory = beanFactory; + } + + /** + * 使用 @Import 引入时执行的逻辑 + * @param importingClassMetadata + * @return + */ + @Override + public String[] selectImports(AnnotationMetadata importingClassMetadata) { + this.importingClassMetadata = importingClassMetadata; + return scanAndHandle(); + } + + /** + * 设置扫描的路径 + * @return + */ + public String[] getScanPackages() { + try { + // 获取被注解的类(启动类)的 Class,以及包路径 + String startupClassStr = importingClassMetadata.getClassName(); + Class startupClass = Class.forName(startupClassStr); + String startupPackage = startupClass.getPackage().getName(); + + String[] result = new String[]{startupPackage}; + + return result; + + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + + /** + * 处理扫描到的 Bean + * @param beanDefinition + */ + public abstract void handle(BeanDefinition beanDefinition); +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/base/BaseScanner.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/base/BaseScanner.java new file mode 100644 index 0000000000000000000000000000000000000000..0fe7d92d0095270e3f5102ba45f1c23805bceb86 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/base/BaseScanner.java @@ -0,0 +1,55 @@ +package com.paradogs.framework.core.annoations.base; + +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.BeanDefinitionHolder; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.annotation.ClassPathBeanDefinitionScanner; + +import java.util.HashSet; +import java.util.Set; + +/** + * @author: yumi + * @date: 2023/8/25 17:00 + * @Description: TODO + */ +public abstract class BaseScanner extends ClassPathBeanDefinitionScanner { + + public BaseScanner(BeanDefinitionRegistry registry) { + super(registry); + } + + /** + * 扫描出满足条件的类或接口 + * @param basePackages + * @return + */ + public Set findCandidateComponents(String... basePackages) { + Set candidateComponents = new HashSet<>(); + for (String basePackage : basePackages) { + candidateComponents.addAll(findCandidateComponents(basePackage)); + } + return candidateComponents; + } + + /** + * 扫描并注册未注册的 Bean + * *ps: 使用 super.doScan() 时,已经注册到 Spring 的 Bean 不会被扫描到,super.doScan() 在扫描后会做注册操作 + * 该方法一般接口做代理注册时使用 + * @param basePackages + * @return 注册成功的 Bean (已存在但仍注册的 Bean 不会返回) + */ + public Set findAndRegisterComponents(String... basePackages) { + Set beanDefinitionHolders = super.doScan(basePackages); + Set beanDefinitions = new HashSet<>(); + for (BeanDefinitionHolder beanDefinitionHolder : beanDefinitionHolders) { + beanDefinitions.add(beanDefinitionHolder.getBeanDefinition()); + } + return beanDefinitions; + } + + public boolean isNeedRegister() { + return false; + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/base/BaseSelector.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/base/BaseSelector.java new file mode 100644 index 0000000000000000000000000000000000000000..673afd4bfd42283e529305030bb7135041b8ff84 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/base/BaseSelector.java @@ -0,0 +1,72 @@ +package com.paradogs.framework.core.annoations.base; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.BeanFactoryAware; +import org.springframework.beans.factory.config.BeanDefinition; + +import java.util.Set; + +/** + * @author: yumi + * @date: 2023/11/18 11:00 + * @Description: TODO + */ +@Slf4j +public abstract class BaseSelector implements BeanFactoryAware { + + public BeanFactory beanFactory; + + @Override + public void setBeanFactory(BeanFactory beanFactory) throws BeansException { + this.beanFactory = beanFactory; + } + + /** + * @return + */ + public final String[] scanAndHandle() { + + long startTime = System.currentTimeMillis(); + + // 设置扫描路径,扫描出符合条件的 bean (接口、类等) + String[] scanPackages = getScanPackages(); + + // 获取扫描类 + BaseScanner scanner = getScanner(beanFactory); + + // 扫描出符合条件的 bean + Set beanDefinitions = scanner.isNeedRegister() ? + scanner.findAndRegisterComponents(scanPackages) : + scanner.findCandidateComponents(scanPackages); + + // 循环处理每个被扫描到的bean对象 + for (BeanDefinition beanDefinition : beanDefinitions) { + handle(beanDefinition); + } + + log.debug("Scan: {}, {}", scanPackages, this.getClass().getSimpleName()); + + return new String[0]; + } + + /** + * 设置扫描的路径 + * @return + */ + public abstract String[] getScanPackages(); + + /** + * 设置要扫描的 Scanner + * @param beanFactory + * @return + */ + public abstract BaseScanner getScanner(BeanFactory beanFactory); + + /** + * 处理扫描到的 Bean + * @param beanDefinition + */ + public abstract void handle(BeanDefinition beanDefinition); +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/exception/PRExceptionHandler.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/exception/PRExceptionHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..46fe5957cf13afb5f843380032adafe94c43c30e --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/exception/PRExceptionHandler.java @@ -0,0 +1,19 @@ +package com.paradogs.framework.core.annoations.exception; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author: yumi + * @date: 2023/8/2 9:15 + * @Description: TODO + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface PRExceptionHandler { + + Class value(); + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/exception/PRExceptionHandlerClass.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/exception/PRExceptionHandlerClass.java new file mode 100644 index 0000000000000000000000000000000000000000..ee95b886bad3eec4f7d0dca935135f19bf36602d --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/exception/PRExceptionHandlerClass.java @@ -0,0 +1,19 @@ +package com.paradogs.framework.core.annoations.exception; + +import org.springframework.stereotype.Component; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author: yumi + * @date: 2023/8/2 9:16 + * @Description: TODO + */ +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Component +public @interface PRExceptionHandlerClass { +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/request/PRController.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/request/PRController.java new file mode 100644 index 0000000000000000000000000000000000000000..8e351e0e6de155268e7b4d69cd3c1c8eaa3a41d4 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/request/PRController.java @@ -0,0 +1,19 @@ +package com.paradogs.framework.core.annoations.request; + +import org.springframework.stereotype.Controller; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author: yumi + * @date: 2023/7/27 11:58 + * @Description: TODO + */ +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Controller +public @interface PRController { +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/request/PRMsg.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/request/PRMsg.java new file mode 100644 index 0000000000000000000000000000000000000000..6a30e5cecef79c1907ade37859f186595dcd62b3 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/request/PRMsg.java @@ -0,0 +1,21 @@ +package com.paradogs.framework.core.annoations.request; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author: yumi + * @date: 2023/7/27 9:47 + * @Description: TODO + */ +@Target({ElementType.PARAMETER}) +@Retention(RetentionPolicy.RUNTIME) +//@ProtobufClass 坑,@ProtobufClass 加在自定义注解上时,使用自定义注解不会生效该注解 +// 可以加上父类 BaseMsg 上或者实际类上 +public @interface PRMsg { + +// int value(); + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/request/PRMsgMapping.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/request/PRMsgMapping.java new file mode 100644 index 0000000000000000000000000000000000000000..6c60992d5e37d0afe633800d0d245d0fff19f852 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/request/PRMsgMapping.java @@ -0,0 +1,26 @@ +package com.paradogs.framework.core.annoations.request; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author: yumi + * @date: 2023/8/1 15:19 + * @Description: TODO + * 根据消息 class 映射找到对应的处理方法 + */ +@Target({ElementType.METHOD, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface PRMsgMapping { + + /** + * 路由路径 + * @return + */ + String value(); + + boolean async() default false; + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/request/PRMsgMappingHolder.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/request/PRMsgMappingHolder.java new file mode 100644 index 0000000000000000000000000000000000000000..155295a2605a7db2b8889f0b9fa5482629356ecd --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/request/PRMsgMappingHolder.java @@ -0,0 +1,55 @@ +package com.paradogs.framework.core.annoations.request; + +import com.paradogs.framework.core.msg.PRMsg; +import com.paradogs.framework.core.msg.route.MsgMapping; +import lombok.extern.slf4j.Slf4j; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author: yumi + * @date: 2023/8/25 17:28 + * @Description: TODO + */ +@Slf4j +public class PRMsgMappingHolder { + + private static Map mappingMap = new HashMap<>(); + + public static MsgMapping put(String route, MsgMapping mapping) { + return mappingMap.put(route, mapping); + } + + /** + * 获取映射 + * @param route + * @return + */ + public static MsgMapping getMsgMapping(String route) { + return PRMsgMappingHolder.mappingMap.get(route); + } + + /** + * 获取路由映射的传参数据对象类型 + * @param route + * @return + */ + public static Class getMsgMappingClass(String route) { + MsgMapping msgMapping = PRMsgMappingHolder.getMsgMapping(route); + if (msgMapping == null || msgMapping.getMsgClass() == null || msgMapping.getMsgClass().isAssignableFrom(void.class)) { + return null; + } + return msgMapping.getMsgClass(); + } + + /** + * 是否存在对应路由映射 + * @param route + * @return + */ + public static boolean containsRoute(String route) { + return PRMsgMappingHolder.mappingMap.containsKey(route); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/request/PRRequestInterfaceSelector.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/request/PRRequestInterfaceSelector.java new file mode 100644 index 0000000000000000000000000000000000000000..269cff1030a4a39fef2aae3c2020604b643d3331 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/request/PRRequestInterfaceSelector.java @@ -0,0 +1,84 @@ +package com.paradogs.framework.core.annoations.request; + +import com.paradogs.framework.core.annoations.base.BaseImportSelector; +import com.paradogs.framework.core.annoations.base.BaseScanner; +import com.paradogs.framework.core.msg.PRMsg; +import com.paradogs.framework.core.msg.route.MsgMapping; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.support.DefaultListableBeanFactory; +import org.springframework.core.annotation.AnnotationUtils; + +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @author: yumi + * @date: 2023/8/25 16:15 + * @Description: TODO + */ +@Slf4j +public class PRRequestInterfaceSelector extends BaseImportSelector { + + @Override + public BaseScanner getScanner(BeanFactory beanFactory) { + return new PRRequestScanner((DefaultListableBeanFactory) beanFactory); + } + + @Override + public void handle(BeanDefinition beanDefinition) { + + try { + Class beanClass = Class.forName(beanDefinition.getBeanClassName()); + + // 扫描方法 + Method[] methods = beanClass.getDeclaredMethods(); + for (Method method : methods) { + + // 计算路由 + PRMsgMapping parentRouteMapping = AnnotationUtils.findAnnotation(method.getDeclaringClass(), PRMsgMapping.class); + PRMsgMapping msgMapping = AnnotationUtils.findAnnotation(method, PRMsgMapping.class); + if (msgMapping == null) { + continue; + } + String route = (parentRouteMapping != null ? (parentRouteMapping.value() + ".") : "") + msgMapping.value(); + if (PRMsgMappingHolder.containsRoute(route)) { + throw new RuntimeException("Duplicate route found: " + route); + } + + // 保存 Msg 类型和要执行的方法 + Class targetMsgClass = null; + for (Parameter parameter : method.getParameters()) { + if (parameter.getAnnotation(com.paradogs.framework.core.annoations.request.PRMsg.class) != null) { + targetMsgClass = parameter.getType(); + + } else { + // 如果找不到 @PRMsg 修饰,默认第一个参数为消息 + if (method.getParameters().length > 0) { + targetMsgClass = parameter.getType(); + } +// // 如果只有一个 BaseMsg 参数,自动优化添加,等于加了 PdgMsg +// List baseMsgList = Stream.of(method.getParameters()). +// filter(param -> PRMsg.class.isAssignableFrom(param.getType())) +// .collect(Collectors.toList()); +// if (baseMsgList.size() == 1) { +// targetMsgClass = (Class) parameter.getType(); +// } + + } + } + PRMsgMappingHolder.put(route, new MsgMapping(targetMsgClass, method, msgMapping.async())); + log.debug("Register RequestMapping: [{}]", route); + } + + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/request/PRRequestScanner.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/request/PRRequestScanner.java new file mode 100644 index 0000000000000000000000000000000000000000..786caac21748b970d02ba0d8e8dbe2b2f6da1378 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/request/PRRequestScanner.java @@ -0,0 +1,46 @@ +package com.paradogs.framework.core.annoations.request; + +import com.paradogs.framework.core.annoations.base.BaseScanner; +import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.core.type.classreading.MetadataReader; +import org.springframework.stereotype.Controller; + +import java.io.IOException; + +/** + * @author: yumi + * @date: 2023/8/25 15:54 + * @Description: TODO + */ +public class PRRequestScanner extends BaseScanner { + + public PRRequestScanner(BeanDefinitionRegistry registry) { + super(registry); + } + + /** + * 是否为可添加 bean,返回接口类型 + * 可以用 TypeFilter 加,但 TypeFilter 只能指定类,未知的动态类无法处理 + * hasMetaAnnotation() 可以读到注解中的注解信息,hasAnnotation() 只能读取当前 Class 上的注解 + * @param metadataReader + * @return + * @throws IOException + */ + @Override + protected boolean isCandidateComponent(MetadataReader metadataReader) { + return metadataReader.getAnnotationMetadata().hasMetaAnnotation(Controller.class.getName()); + } + + /** + * @param beanDefinition 一个 bean + * @return + */ + @Override + protected boolean isCandidateComponent(AnnotatedBeanDefinition beanDefinition) { + return !beanDefinition.getMetadata().isInterface() + && !beanDefinition.getMetadata().isAnnotation() + && beanDefinition.getMetadata().hasMetaAnnotation(Controller.class.getName()); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRClient.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRClient.java new file mode 100644 index 0000000000000000000000000000000000000000..3d1d38c84c5f35953ab7025f777b63093e9ad57f --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRClient.java @@ -0,0 +1,21 @@ +package com.paradogs.framework.core.annoations.rpc; + +import java.lang.annotation.*; + +/** + * @author: yumi + * @date: 2023/8/13 12:19 + * @Description: TODO + */ +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface PRClient { + + /** + * 服务名 + * @return + */ + String value(); + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCHolder.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCHolder.java new file mode 100644 index 0000000000000000000000000000000000000000..743e4e7090a766b0b793d55350819a0eb1ecfcdc --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCHolder.java @@ -0,0 +1,19 @@ +package com.paradogs.framework.core.annoations.rpc; + +import com.paradogs.framework.core.msg.route.MsgMapping; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author: yumi + * @date: 2023/8/25 17:33 + * @Description: TODO + */ +public class PRRPCHolder { + + @Getter + private static Map mappingMap = new HashMap<>(); + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCInterfaceScanner.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCInterfaceScanner.java new file mode 100644 index 0000000000000000000000000000000000000000..646462d4b5dd94c1d0727db2720ddab06c262803 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCInterfaceScanner.java @@ -0,0 +1,48 @@ +package com.paradogs.framework.core.annoations.rpc; + +import com.paradogs.framework.core.annoations.base.BaseScanner; +import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.core.type.classreading.MetadataReader; + +import java.io.IOException; + +/** + * @author: yumi + * @date: 2023/8/13 23:24 + * @Description: TODO + */ +public class PRRPCInterfaceScanner extends BaseScanner { + + public PRRPCInterfaceScanner(BeanDefinitionRegistry registry) { + super(registry); + } + + /** + * 是否为可添加 bean,返回接口类型 + * 可以用 TypeFilter 加,但 TypeFilter 只能指定类,未知的动态类无法处理 + * @param metadataReader + * @return + * @throws IOException + */ + @Override + protected boolean isCandidateComponent(MetadataReader metadataReader) throws IOException { + return metadataReader.getClassMetadata().isInterface() + && metadataReader.getAnnotationMetadata().hasAnnotation(PRClient.class.getName()); + } + + /** + * @param beanDefinition 一个 bean + * @return + */ + @Override + protected boolean isCandidateComponent(AnnotatedBeanDefinition beanDefinition) { + return beanDefinition.getMetadata().isInterface() + && beanDefinition.getMetadata().hasAnnotation(PRClient.class.getName()); + } + + @Override + public boolean isNeedRegister() { + return true; + } +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCMapping.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCMapping.java new file mode 100644 index 0000000000000000000000000000000000000000..29d415c6ebca5707fd0e2c03e1782a3865e08ef6 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCMapping.java @@ -0,0 +1,25 @@ +package com.paradogs.framework.core.annoations.rpc; + +import com.paradogs.framework.core.msg.PRMsg; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author: yumi + * @date: 2023/8/11 10:53 + * @Description: TODO + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface PRRPCMapping { + + /** + * 路由路径 + * @return + */ + String value(); + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCProxyBean.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCProxyBean.java new file mode 100644 index 0000000000000000000000000000000000000000..9d22007337098a8db80cafe5067c180ed1c8f63c --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCProxyBean.java @@ -0,0 +1,63 @@ +package com.paradogs.framework.core.annoations.rpc; + +import org.springframework.beans.factory.FactoryBean; +import org.springframework.cglib.proxy.Enhancer; + +/** + * @author: yumi + * @date: 2023/8/13 9:37 + * @Description: TODO + */ +public class PRRPCProxyBean implements FactoryBean { + + /** + * 被代理的接口 + */ + private Class myInterfaceClass; + + /** + * 构造函数 + * @param myInterfaceClass 被代理的接口类型,该参数,由注解解析器自动赋值 + */ + public PRRPCProxyBean(Class myInterfaceClass) { + this.myInterfaceClass = myInterfaceClass; + } + + /** + * 返回该bean是否为单例类型 + * @return + */ + @Override + public boolean isSingleton() { + return FactoryBean.super.isSingleton(); + } + + /** + * 当 ioc 容器提取对象时,调用此方法获取一个代理对象 + * @return + * @throws Exception + */ + @Override + public T getObject() throws Exception { + + //用于创建代理对象的增强器,可以对目标对象进行扩展 + Enhancer enhancer = new Enhancer(); + //将目标对象设置为父类 + enhancer.setSuperclass(myInterfaceClass); + //设置目标拦截器 + enhancer.setCallback(new PRRPCProxyInterceptor()); + // 创建代理对象 + return (T)enhancer.create(); + + } + + /** + * 当 ioc 容器获取类型时,从此方法获取类型 + * @return + */ + @Override + public Class getObjectType() { + return myInterfaceClass; + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCProxyBeanImportSelector.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCProxyBeanImportSelector.java new file mode 100644 index 0000000000000000000000000000000000000000..4e7889defa1f360a6ff5e52b2ac09b3e6f4416d3 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCProxyBeanImportSelector.java @@ -0,0 +1,130 @@ +package com.paradogs.framework.core.annoations.rpc; + +import com.paradogs.framework.core.annoations.base.BaseImportSelector; +import com.paradogs.framework.core.annoations.base.BaseScanner; +import com.paradogs.framework.core.msg.PRMsg; +import com.paradogs.framework.core.msg.route.MsgMapping; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.support.DefaultListableBeanFactory; +import org.springframework.core.annotation.AnnotationUtils; + +import java.lang.reflect.Method; + +/** + * @author: yumi + * @date: 2023/8/13 16:39 + * @Description: TODO + */ +@Slf4j +public class PRRPCProxyBeanImportSelector extends BaseImportSelector { + + @Override + public BaseScanner getScanner(BeanFactory beanFactory) { + // 转换为 DefaultListableBeanFactory 便于操作 + DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) beanFactory; + // 自定义扫描器,获取 BeanDefinitionHolder + PRRPCInterfaceScanner scanner = new PRRPCInterfaceScanner(defaultListableBeanFactory); + return scanner; + } + + @Override + public void handle(BeanDefinition beanDefinition) { + + registerRPCMapping(beanDefinition); + + registerProxyBean(beanDefinition); + + } + + /** + * 注册 RPC 响应映射 + * @param beanDefinition + */ + private void registerRPCMapping(BeanDefinition beanDefinition) { + + try { + Class beanClass = Class.forName(beanDefinition.getBeanClassName()); + Method[] methods = beanClass.getDeclaredMethods(); + + for (Method method : methods) { + // 计算路由 + PRRPCMapping mapping = AnnotationUtils.findAnnotation(method, PRRPCMapping.class); + String route = mapping.value() + "|resp"; + + if (PRRPCHolder.getMappingMap().containsKey(route)) { + throw new RuntimeException("Duplicate route found: [" + route + "]"); + } + + // 保存 Msg 类型和要执行的方法 + try { + // 异步 Async +// if (pdgRPCMapping.returnType() == BaseMsg.class && !method.getReturnType().isAssignableFrom(CompletableFuture.class)) { +// throw new RuntimeException("RPC[" + pdgRPCMapping.value() + "] use async but returnType is null"); +// } +// if (!method.getReturnType().equals(Void.TYPE) && !method.getReturnType().isAssignableFrom(CompletableFuture.class)) { +// throw new RuntimeException("RPC[" + PRRPCMapping.value() + "] return must use async.(CompleteFuture)"); +// } +// Class genericReturnType = null; +// try { +// genericReturnType = (Class) ReflectUtils.getGenericReturnType(method); +// } catch (Exception e) { +// throw new RuntimeException("GetGenericReturnType error, ReturnType[" + method.getReturnType() + "] must extends BaseMsg: " + method.getName()); +// } +// // PdgRpcMapping.returnType default == BaseMsg.class +// Class targetMsgClass = PRRPCMapping.returnType() == BaseMsg.class ? genericReturnType : PRRPCMapping.returnType(); + + + if (PRRPCHolder.getMappingMap().containsKey(route)) { + throw new RuntimeException("Route already exist: " + route); + } + Class targetMsgClass = (Class) method.getReturnType(); + PRRPCHolder.getMappingMap().put(route, new MsgMapping(targetMsgClass, method, false)); + log.debug("Register RPC callback mapping: [{}]", route); + + } catch (Exception e) { + throw new RuntimeException("RPC[" + mapping.value() + "] return must extends BaseMsg(?GCMsg)"); + } + } + + + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * 注册代理 + * @param beanDefinition + */ + private void registerProxyBean(BeanDefinition beanDefinition) { + try { + + try { + // 获取当前被扫描到到接口的具体 class name + String beanClassName = beanDefinition.getBeanClassName(); + // 装载 class + Class targetInterface = Class.forName(beanClassName); + + // 为该自定义的代理实现类,提供构造方法所需要的原始接口类型参数 + beanDefinition.getConstructorArgumentValues().addGenericArgumentValue(targetInterface); + + // 修改被扫描接口到具体实现类型,替换为自定义到代理实现类 + String originBeanName = beanDefinition.getBeanClassName(); + beanDefinition.setBeanClassName(PRRPCProxyBean.class.getName()); + + log.debug("Proxy RPC interface: [{}]", originBeanName); + + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCProxyInterceptor.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCProxyInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..dcccd6600c7699f05b995db821a2d52569269915 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCProxyInterceptor.java @@ -0,0 +1,98 @@ +package com.paradogs.framework.core.annoations.rpc; + +import com.paradogs.framework.core.events.RPCRequestEvent; +import com.paradogs.framework.core.utils.EventUtils; +import com.paradogs.framework.core.utils.RouteUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.aop.support.AopUtils; +import org.springframework.cglib.proxy.MethodInterceptor; +import org.springframework.cglib.proxy.MethodProxy; +import org.springframework.core.annotation.AnnotationUtils; + +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.util.concurrent.CompletableFuture; + +/** + * @author: yumi + * @date: 2023/8/13 9:40 + * @Description: TODO + */ +@Slf4j +public class PRRPCProxyInterceptor implements MethodInterceptor { + + /** + * 执行方法拦截器 + * @param obj 被代理的目标对象实例对象,该对象为cglib代理实现,为自定义实现类 + * @param method 被代理接口正在执行的方法 + * @param args 被代理接口正在执行方法的参数 + * @param methodProxy methodProxy.invokeSuper() ?执行原本方法 + * @return 方法执行结果,如果方法无返回值,可以返回 null + * 待优化:目前每次执行都会反射找到 Class,完全没必要,可以项目启动时初始化成 Map,和 Controller 的一样 + * @throws Throwable + */ + @Override + public Object intercept(Object obj, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { + + try { + PRRPCMapping PRRPCMapping = AnnotationUtils.findAnnotation(method, PRRPCMapping.class); + if (PRRPCMapping == null) { + return methodProxy.invokeSuper(obj, args); + } + + // 获取被代理目标的真实 class + Class targetClass = obj.getClass(); + boolean aopProxy = AopUtils.isAopProxy(obj); + if (aopProxy) { + targetClass = AopUtils.getTargetClass(obj); + } + + PRClient PRClient = AnnotationUtils.findAnnotation(targetClass, PRClient.class); + + // 获得参数消息 + Object requestData = null; + Parameter[] parameters = method.getParameters(); + for (int i = 0; i < parameters.length; i++) { + com.paradogs.framework.core.annoations.request.PRMsg requestAnnotation = AnnotationUtils.findAnnotation(parameters[i], com.paradogs.framework.core.annoations.request.PRMsg.class); + if (requestAnnotation != null) { + try { + requestData = args[i]; + } catch (Exception e) { + throw new RuntimeException("@PdgMsg arg must extends BaseMsg: " + method.getName()); + } finally { + break; + } + } + } + // 如果只有一个参数,则默认视为被 @PRMsg 修饰 + if (requestData == null && parameters.length == 1) { + requestData = args[0]; + } + + // 获得返回值类型 + Class returnType = method.getReturnType(); + if (returnType.equals(Void.TYPE)) { + return null; + } + + /** + * 监听回调 + */ + CompletableFuture promise = new CompletableFuture<>(); + // 解耦 MsgUtils + EventUtils.publishEvent(new RPCRequestEvent( + PRClient.value() + RouteUtils.SERVER_SEPARATOR + PRRPCMapping.value(), + requestData, + returnType, + promise + )); + + Object result = promise.get();// 阻塞等待 + return result; // 类型不对应可能会导致回调失败并且没有抛异常 + + } catch (Exception e) { + log.error("{}", e.getMessage(), e); + } + return null; + } +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCResponseResolver.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCResponseResolver.java new file mode 100644 index 0000000000000000000000000000000000000000..4b0fcabeaf049d9c0c20641b641ebe429f5412de --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/rpc/PRRPCResponseResolver.java @@ -0,0 +1,107 @@ +package com.paradogs.framework.core.annoations.rpc; + +import com.paradogs.framework.core.events.RPCRespEvent; +import com.paradogs.framework.core.msg.PRMsg; +import com.paradogs.framework.core.msg.ByteData; +import com.paradogs.framework.core.msg.PRMsgContextHolder; +import com.paradogs.framework.core.utils.ProtoUtils; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @author: yumi + * @date: 2023/8/11 13:45 + * @Description: RPC 响应处理 + */ +@Slf4j +@Component +public class PRRPCResponseResolver { + + /** + * 等待响应的消息 map + */ + private volatile Map waitRespMap = new ConcurrentHashMap<>(); + + + /** + * 监听 rpc 响应 + * @param event + */ + @EventListener(RPCRespEvent.class) + private void onRpcMsgResponse(RPCRespEvent event) { + + Long key = event.getMsg().getMsgHeader().getReplyMsgId(); + ByteData byteData = event.getMsg(); + + PRRPCHolder.getMappingMap(); + try { + // 执行回调方法 + RespData respInfo = waitRespMap.get(key); + if (respInfo == null) { + log.warn("Missing callback listener, maybe timeout"); + return; + } + if (respInfo.getPromise() == null) { + log.warn("Promise == null"); + return; + } + + // 解码消息体数据 + Object data = ProtoUtils.decode(byteData.getDataBytes(), respInfo.getReturnClass()); + + // 设置上下文 + PRMsgContextHolder.setContext(respInfo.getMsgContextHolder()); + + // 标记任务完成,执行回调 + boolean isSuccess = respInfo.getPromise().complete(data); + if (!isSuccess) {log.error("Callback promise invoke is fail: {}", respInfo);} + + } catch (Exception e) { + log.error("{}", e.getMessage(), e); + } finally { + // 处理完毕移除响应监听 + waitRespMap.remove(key); + log.debug("Release callback listener: {}", key); + } + } + + /** + * 监听一次 + * @param route + * @param cgMsgId + * @param promise + */ + public void on4Once(String route, Long cgMsgId, Class returnClass, CompletableFuture promise) { + this.waitRespMap.put(cgMsgId, new RespData(returnClass, promise, PRMsgContextHolder.getSnapshot())); + } + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class RespData { + + /** + * 返回消息类型 + */ + private Class returnClass; + + /** + * 回调方法 + */ + private CompletableFuture promise; + + /** + * 开始监听时的上下文状态 + */ + private PRMsgContextHolder.Snapshot msgContextHolder; + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/tick/PRTick.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/tick/PRTick.java new file mode 100644 index 0000000000000000000000000000000000000000..396f8059c25126ccf0d30c2f8de27e179a7f7c31 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/annoations/tick/PRTick.java @@ -0,0 +1,16 @@ +package com.paradogs.framework.core.annoations.tick; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author: yumi + * @date: 2023/8/4 9:54 + * @Description: 添加上该注解的方法,会在每次主循环执行一次 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface PRTick { +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/config/MybatisPlusConfiguration.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/config/MybatisPlusConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..d21a324db125922e5a362244f927c64ed8e591bd --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/config/MybatisPlusConfiguration.java @@ -0,0 +1,43 @@ +package com.paradogs.framework.core.config; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import org.apache.ibatis.reflection.MetaObject; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +import java.time.LocalDateTime; + +/** + * @author: yumi + * @date: 2023/11/20 11:17 + * @Description: TODO + */ +@Configuration +/** + * mybatis-plus 扫描要精确到 dao 或 mapper,否则自动装配会有问题(dao(service)找不到正确 mapper) + * 可能原因是扫描重叠了,dao(service)也被当成 mapper 自动生成代理实现类了 + * !!! 虽然是微服务,但是所有业务的 dao 都放在一起了,!! 方便单人开发 !!,如果需要正常的微服务操作,可以取消这里的注册,自行在对应服务中编写 dao 和 pojo + */ +@ComponentScan(basePackages = {"com.paradogs.framework.common.dao.*"}) // 要精确到 dao +@MapperScan("com.paradogs.framework.common.mapper") // 不能加 * +public class MybatisPlusConfiguration { + + @Bean + public MetaObjectHandler metaObjectHandler() { + return new MetaObjectHandler() { + @Override + public void insertFill(MetaObject metaObject) { + this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 插入时填充 createTime + this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 插入时填充 updateTime + } + + @Override + public void updateFill(MetaObject metaObject) { + this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 更新时填充 updateTime + } + }; + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/config/NettyConfiguration.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/config/NettyConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..e6b4916168bb8d4f27d1d1eec7325c4a1c40576b --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/config/NettyConfiguration.java @@ -0,0 +1,79 @@ +package com.paradogs.framework.core.config; + +import com.paradogs.framework.core.exceptions.GlobalExceptionDispatch; +import com.paradogs.framework.core.netty.clients.common.ClientsProperties; +import com.paradogs.framework.core.netty.clients.common.PRServerClientChannelInitializer; +import com.paradogs.framework.core.netty.clients.common.PRServerClientMsgHandler; +import com.paradogs.framework.core.netty.clients.master.MasterProperties; +import com.paradogs.framework.core.netty.*; +import com.paradogs.framework.core.netty.clients.master.PRMasterClientChannelInitializer; +import com.paradogs.framework.core.netty.clients.master.PRMasterClientMsgHandler; +import com.paradogs.framework.core.netty.server.PRAbServerMsgHandler; +import com.paradogs.framework.core.netty.server.PRServerChannelInitializer; +import com.paradogs.framework.core.utils.MsgUtils; +import com.paradogs.framework.core.utils.PRAsync; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Lazy; +import org.springframework.context.annotation.Scope; + +/** + * @author: yumi + * @date: 2023/8/26 17:22 + * @Description: TODO + */ +@AutoConfiguration // @AutoConfiguration 与 @Configuration 作用相同?,规范使用,代表自动装配 +public class NettyConfiguration { + + @Bean + public ProtocolProperties protocolProperties() { + return new ProtocolProperties(); + } + + @Bean + public MasterProperties masterProperties() {return new MasterProperties();} + + @Bean + public ClientsProperties clientsProperties() {return new ClientsProperties();} + + @Bean + public PRMasterClientChannelInitializer masterClientChannelInitializer(PRMasterClientMsgHandler msgHandler) { + return new PRMasterClientChannelInitializer(msgHandler); + } + + @Scope("prototype") // @Scope 代表了懒加载,启动时不会初始化 + @Bean + public PRServerClientChannelInitializer serverClientChannelInitializer(PRServerClientMsgHandler msgHandler) { + return new PRServerClientChannelInitializer(msgHandler); + } + + @Bean + public PRMasterClientMsgHandler masterClientMsgHandler() { + return new PRMasterClientMsgHandler(); + } + + @Bean + public GlobalExceptionDispatch globalExceptionDispatch() { + return new GlobalExceptionDispatch(); + } + + @Bean + public PRServerChannelInitializer serverChannelInitializer(PRAbServerMsgHandler msgHandler) { + return new PRServerChannelInitializer(msgHandler); + } + + @Bean + @Scope("prototype") + public PRCodec serverCodec() { + return new PRCodec(); + } + + @Bean + public MsgUtils msgUtils() { + return new MsgUtils(); + } + + @Bean + public PRAsync pRAsync() {return new PRAsync();} + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/config/QueueConfiguration.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/config/QueueConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..45d2599211f1c4dda7e2b9f100ee5ec00ba1f120 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/config/QueueConfiguration.java @@ -0,0 +1,41 @@ +package com.paradogs.framework.core.config; + +import com.paradogs.framework.core.queue.AbstractMsgConsumer; +import com.paradogs.framework.core.queue.MsgDefaultConsumer; +import com.paradogs.framework.core.queue.PRQueueHolder; +import com.paradogs.framework.core.queue.QueueProperties; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; + +/** + * @author: yumi + * @date: 2023/8/3 11:21 + * @Description: TODO + */ +@AutoConfiguration +public class QueueConfiguration { + + @Bean + @Scope("prototype") + @ConditionalOnMissingBean(AbstractMsgConsumer.class) + public AbstractMsgConsumer defaultMsgConsumer() { + return new MsgDefaultConsumer(); + } + + @Bean + public QueueProperties queueProperties() { + return new QueueProperties(); + } + + @Bean + public PRQueueHolder prQueueHolder(QueueProperties queueProperties) { + PRQueueHolder queueManager = new PRQueueHolder(); + queueManager.setQueueProperties(queueProperties); + return queueManager; + } + + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/config/RPCConfiguration.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/config/RPCConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..abbd1853c159cab2985f4cbab801ea378a367db7 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/config/RPCConfiguration.java @@ -0,0 +1,26 @@ +package com.paradogs.framework.core.config; + +import com.paradogs.framework.core.annoations.rpc.PRRPCResponseResolver; +import com.paradogs.framework.core.msg.CommonController; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author: yumi + * @date: 2023/8/28 14:32 + * @Description: TODO + */ +@AutoConfiguration +public class RPCConfiguration { + + @Bean + public PRRPCResponseResolver rpcResponseResolver() { + return new PRRPCResponseResolver(); + } + + @Bean + public CommonController commonController() { + return new CommonController(); + } +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/config/UtilsConfiguration.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/config/UtilsConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..ed01aa8a0ecf76d74b12a3bbfb80e50ad689f5d2 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/config/UtilsConfiguration.java @@ -0,0 +1,28 @@ +package com.paradogs.framework.core.config; + +import com.paradogs.framework.core.utils.EventUtils; +import com.paradogs.framework.core.utils.MsgUtils; +import com.paradogs.framework.core.utils.PRAsync; +import com.paradogs.framework.core.utils.SpringUtils; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.context.annotation.Bean; + +/** + * @author: yumi + * @date: 2023/8/26 17:28 + * @Description: TODO + */ +@AutoConfiguration +public class UtilsConfiguration { + + @Bean + public EventUtils eventUtils() { + return new EventUtils(); + } + + @Bean + public SpringUtils springUtils() { + return new SpringUtils(); + } + +} diff --git a/mini-game/src/main/java/com/mini/game/message/CGReceiveWarOrderPrizeMsg.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/PlayerClientActiveEvent.java similarity index 33% rename from mini-game/src/main/java/com/mini/game/message/CGReceiveWarOrderPrizeMsg.java rename to paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/PlayerClientActiveEvent.java index 493c34a9185a853e3220ecbce1a8ce7cfe20c37f..7fc06fb6dc90179abf5aee09c41c54e8ee5bdef1 100644 --- a/mini-game/src/main/java/com/mini/game/message/CGReceiveWarOrderPrizeMsg.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/PlayerClientActiveEvent.java @@ -1,21 +1,21 @@ -package com.mini.game.message; +package com.paradogs.framework.core.events; -import com.mini.common.message.BaseMessage; -import com.mini.common.message.CGMessage; +import com.paradogs.framework.common.events.base.AnonEvent; +import io.netty.channel.ChannelHandlerContext; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * @author: yumi - * @date: 2023-03-24 14:35 - * @Description: 领取战令奖励 + * @date: 2023/8/10 14:54 + * @Description: 玩家客户端成功连接 */ @Data -@NoArgsConstructor @AllArgsConstructor -public class CGReceiveWarOrderPrizeMsg extends CGMessage { +@NoArgsConstructor +public class PlayerClientActiveEvent extends AnonEvent { - private Long prizeId; + private ChannelHandlerContext ctx; } diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/PlayerClientInactiveEvent.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/PlayerClientInactiveEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..9bd9f53f0d9c85fc3f7b811d6a8a83f445926bca --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/PlayerClientInactiveEvent.java @@ -0,0 +1,21 @@ +package com.paradogs.framework.core.events; + +import com.paradogs.framework.common.events.base.AnonEvent; +import io.netty.channel.ChannelHandlerContext; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author: yumi + * @date: 2023/8/10 14:57 + * @Description: 玩家客户端断开连接 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PlayerClientInactiveEvent extends AnonEvent { + + private ChannelHandlerContext ctx; + +} diff --git a/mini-game/src/main/java/com/mini/game/message/GCBuyGoodsMsg.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/RPCRequestEvent.java similarity index 31% rename from mini-game/src/main/java/com/mini/game/message/GCBuyGoodsMsg.java rename to paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/RPCRequestEvent.java index 106c00727ab3b3571078fa8aa6ba678b5843f8d8..b9c59cfad84071912fb15c2a565ca11d6331d519 100644 --- a/mini-game/src/main/java/com/mini/game/message/GCBuyGoodsMsg.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/RPCRequestEvent.java @@ -1,21 +1,24 @@ -package com.mini.game.message; +package com.paradogs.framework.core.events; -import com.mini.common.message.GCMessage; +import com.paradogs.framework.common.events.base.AnonEvent; +import com.paradogs.framework.core.msg.PRMsg; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; + +import java.util.concurrent.CompletableFuture; /** * @author: yumi - * @date: 2023/2/19 11:38 + * @date: 2023/8/17 10:45 * @Description: TODO */ @Data @AllArgsConstructor @NoArgsConstructor -@Accessors(chain = true) -public class GCBuyGoodsMsg extends GCMessage { - - private String responseMsg; +public class RPCRequestEvent extends AnonEvent { + private String route; + private T data; + private Class returnClass; + private CompletableFuture promise; } diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/RPCRespEvent.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/RPCRespEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..db7d37bf6fd73fcbdb90ab8693b6a264df4843fb --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/RPCRespEvent.java @@ -0,0 +1,21 @@ +package com.paradogs.framework.core.events; + +import com.paradogs.framework.common.events.base.AnonEvent; +import com.paradogs.framework.core.msg.ByteData; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author: yumi + * @date: 2023/8/19 23:16 + * @Description: TODO + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RPCRespEvent extends AnonEvent { + + private ByteData msg; + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/ReceiveMsgEvent.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/ReceiveMsgEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..565eb11d921a4f91afb8035c91b7587308859c64 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/ReceiveMsgEvent.java @@ -0,0 +1,22 @@ +package com.paradogs.framework.core.events; + +import com.paradogs.framework.common.events.base.AnonEvent; +import com.paradogs.framework.core.msg.ByteData; +import com.paradogs.framework.core.msg.PRMsg; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author: yumi + * @date: 2023/8/11 9:57 + * @Description: TODO + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ReceiveMsgEvent extends AnonEvent { + + private ByteData msg; + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/ServerClientActiveEvent.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/ServerClientActiveEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..21b3be16ce5eb9287adcaba5cf7295898d812ce8 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/ServerClientActiveEvent.java @@ -0,0 +1,21 @@ +package com.paradogs.framework.core.events; + +import com.paradogs.framework.common.events.base.AnonEvent; +import io.netty.channel.ChannelHandlerContext; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author: yumi + * @date: 2023/8/10 14:54 + * @Description: 成功连接 Master 服务器 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ServerClientActiveEvent extends AnonEvent { + + private ChannelHandlerContext ctx; + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/ServerClientInactiveEvent.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/ServerClientInactiveEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..31c805e08cf0132a83b45a35d9bf3ee9073f0a8d --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/ServerClientInactiveEvent.java @@ -0,0 +1,21 @@ +package com.paradogs.framework.core.events; + +import com.paradogs.framework.common.events.base.AnonEvent; +import io.netty.channel.ChannelHandlerContext; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author: yumi + * @date: 2023/8/10 14:57 + * @Description: 从 Master 服务器断开连接 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ServerClientInactiveEvent extends AnonEvent { + + private ChannelHandlerContext ctx; + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/ServerClientStartEvent.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/ServerClientStartEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..d5b5942cca9ca837b763bf9915979fb1a25c4db5 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/ServerClientStartEvent.java @@ -0,0 +1,13 @@ +package com.paradogs.framework.core.events; + +import com.paradogs.framework.common.events.base.AnonEvent; +import lombok.Data; + +/** + * @author: yumi + * @date: 2023/11/27 11:05 + * @Description: TODO + */ +@Data +public class ServerClientStartEvent extends AnonEvent { +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/ServerStartEvent.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/ServerStartEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..983a3d9adedf6100cd879a5cbb3bbe59ff0ce11c --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/events/ServerStartEvent.java @@ -0,0 +1,15 @@ +package com.paradogs.framework.core.events; + +import com.paradogs.framework.common.events.base.AnonEvent; +import lombok.Data; + + +/** + * @author: yumi + * @date: 2023/7/29 9:18 + * @Description: TODO + */ +@Data +public class ServerStartEvent extends AnonEvent { + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/exceptions/GlobalExceptionDispatch.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/exceptions/GlobalExceptionDispatch.java new file mode 100644 index 0000000000000000000000000000000000000000..b83a8c1439d2b7f5e250647be7cc4c46b3d81492 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/exceptions/GlobalExceptionDispatch.java @@ -0,0 +1,77 @@ +package com.paradogs.framework.core.exceptions; + +import com.paradogs.framework.core.annoations.exception.PRExceptionHandler; +import com.paradogs.framework.core.annoations.exception.PRExceptionHandlerClass; +import com.paradogs.framework.core.utils.SpringUtils; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; +import java.util.stream.Stream; + +/** + * @author: yumi + * @date: 2023/8/2 9:12 + * @Description: TODO + */ +@Slf4j +@Component +public class GlobalExceptionDispatch { + + @Getter + private Map, Method> exceptionHandlerMap = new HashMap<>(); + + /** + * 加载注册异常处理 + */ + @PostConstruct + public void registerExceptionHandler() { + for (Object bean : SpringUtils.getBeansWithAnnotation(PRExceptionHandlerClass.class).values()) { + for (Method method : bean.getClass().getDeclaredMethods()) { + PRExceptionHandler PRExceptionHandler = method.getAnnotation(PRExceptionHandler.class); + if (PRExceptionHandler == null) { + continue; + } + exceptionHandlerMap.put(PRExceptionHandler.value(), method); + } + } + + } + + /** + * 将异常转发到对应异常处理方法 + * ps: 会自动优先找最相近的类 + * @param throwable + */ + public void forward(Throwable throwable) { + + if (throwable == null) {return;} + + Throwable realThrowable = throwable.getCause() != null ? throwable.getCause() : throwable; + + // 这里的异常时 InvocationTargetException 反射异常,转换成真正的异常 + Method method = exceptionHandlerMap.get(realThrowable.getClass()); + if (method == null && (method = exceptionHandlerMap.get(Exception.class)) == null) { + realThrowable.printStackTrace(); + return; + } + try { + method.invoke( + SpringUtils.getBean(method.getDeclaringClass()), + Stream.of(method.getParameterTypes()) + .map(type -> Exception.class.isAssignableFrom(type) ? realThrowable : null) + .toArray() + ); + } catch (Exception e) { + throw new RuntimeException(e); +// // 可能会死循环 +// forward(e.getCause()); + } + } + + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/exceptions/MessageException.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/exceptions/MessageException.java new file mode 100644 index 0000000000000000000000000000000000000000..c81c0d6a6d02aff078278c7eaea5266bbbd7efdc --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/exceptions/MessageException.java @@ -0,0 +1,28 @@ +package com.paradogs.framework.core.exceptions; + +import com.paradogs.framework.core.exceptions.base.BaseUncheckedException; + +/** + * @author: yumi + * @date: 2023/11/29 14:17 + * @Description: TODO + */ +public class MessageException extends BaseUncheckedException { + + public MessageException(int code, String message) { + super(code, message); + } + + public MessageException() { + super(-1, "fail"); + } + + public MessageException(String message) { + super(-1, message); + } + + public MessageException(Throwable cause) { + super(cause); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/exceptions/SerializationException.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/exceptions/SerializationException.java new file mode 100644 index 0000000000000000000000000000000000000000..b787cdd1ecd39641bc0372178441d5b7605860ca --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/exceptions/SerializationException.java @@ -0,0 +1,15 @@ +package com.paradogs.framework.core.exceptions; + +import com.paradogs.framework.core.exceptions.base.BaseUncheckedException; + +/** + * @author: yumi + * @date: 2023/8/1 16:28 + * @Description: TODO + */ +public class SerializationException extends BaseUncheckedException { + + public SerializationException() { + super(1, "序列化异常"); + } +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/exceptions/ServiceException.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/exceptions/ServiceException.java new file mode 100644 index 0000000000000000000000000000000000000000..77a5dcda90297311936e651acc4cb63eaf17358d --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/exceptions/ServiceException.java @@ -0,0 +1,19 @@ +package com.paradogs.framework.core.exceptions; + +import com.paradogs.framework.core.exceptions.base.BaseUncheckedException; + +/** + * @author: yumi + * @date: 2023/8/1 16:46 + * @Description: TODO + */ +public class ServiceException extends BaseUncheckedException { + + public ServiceException(int code, String message) { + super(code, message); + } + + public ServiceException() { + super(-1, "fail"); + } +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/exceptions/base/BaseCheckedException.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/exceptions/base/BaseCheckedException.java new file mode 100644 index 0000000000000000000000000000000000000000..2b0251b6c9cbb82f973a90bb1b0cb6e09fd6f524 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/exceptions/base/BaseCheckedException.java @@ -0,0 +1,24 @@ +package com.paradogs.framework.core.exceptions.base; + +import lombok.Data; + +/** + * @author: yumi + * @date: 2023/8/1 16:43 + * @Description: TODO + */ +@Data +public class BaseCheckedException extends Exception { + + /** + * 错误码 + */ + private int code; + + + public BaseCheckedException(int code, String message) { + super(message); + this.code = code; + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/exceptions/base/BaseUncheckedException.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/exceptions/base/BaseUncheckedException.java new file mode 100644 index 0000000000000000000000000000000000000000..81171818b3c4ca8f4c92b673698c9f6741dc0b8b --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/exceptions/base/BaseUncheckedException.java @@ -0,0 +1,27 @@ +package com.paradogs.framework.core.exceptions.base; + +/** + * @author: yumi + * @date: 2023/8/1 16:30 + * @Description: TODO + * ps: 不要重写 toString 方法,否则异常显示不正常不规范了 + * 异常栈显示正常:com.paradogs.common.server.exceptions.base.BaseUncheckedException: uncheck test + */ +public class BaseUncheckedException extends RuntimeException { + + /** + * 错误码 + */ + private int code; + + + public BaseUncheckedException(int code, String message) { + super(message); + this.code = code; + } + + public BaseUncheckedException(Throwable cause) { + super(cause); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/listeners/PREventListener.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/listeners/PREventListener.java new file mode 100644 index 0000000000000000000000000000000000000000..2b31e3b0d15dc2971b52d77e2059afc109d92c0c --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/listeners/PREventListener.java @@ -0,0 +1,51 @@ +package com.paradogs.framework.core.listeners; + +import com.paradogs.framework.core.annoations.tick.PRTick; +import com.paradogs.framework.core.netty.events.MainLoopEvent; +import com.paradogs.framework.core.utils.SpringUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @author: yumi + * @date: 2023/7/26 16:30 + * @Description: TODO + */ +@Slf4j +@Component +public class PREventListener { + + @EventListener(MainLoopEvent.class) + public void onMainLoopEvent(MainLoopEvent event) { + for (Method method : SpringUtils.getMethodsWithAnnotation(PRTick.class)) { + /** + * 待优化:方法参数注入,其他地方也有,可以提取成一个方法 + */ + try { + if (method.getParameterCount() == 0) { + method.invoke( + SpringUtils.getBean(method.getDeclaringClass()) + ); + } else { + method.invoke( + SpringUtils.getBean(method.getDeclaringClass()), + Stream.of(method.getParameterTypes()).map(aClass -> new Object()).collect(Collectors.toList()) + ); + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/BaseMsg_CmdVersion.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/BaseMsg_CmdVersion.java new file mode 100644 index 0000000000000000000000000000000000000000..817de9f708a5648e9363dff79066f72b0f86df00 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/BaseMsg_CmdVersion.java @@ -0,0 +1,63 @@ +package com.paradogs.framework.core.msg; + +import com.baidu.bjf.remoting.protobuf.FieldType; +import com.baidu.bjf.remoting.protobuf.annotation.Protobuf; +import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass; +import com.paradogs.framework.core.utils.BeanUtils; +import com.paradogs.framework.core.utils.ProtoUtils; +import io.netty.buffer.ByteBuf; +import lombok.Data; + +import java.io.IOException; + +/** + * @author: yumi + * @date: 2023/2/15 21:12 + * @Description: 基础消息类,通过约定类名实现反射自动调用, + * this 在子类使用时会指向子类对象,从而实现子类不需要实现接口就能自动转换 + */ +@Data +@ProtobufClass +@Deprecated +public class BaseMsg_CmdVersion implements IMsgSerializable { + + + @Protobuf(fieldType = FieldType.OBJECT, order = 1) + private MsgHeader msgHeader; + + + /** + * 序列化(编码 + * ps: BaseMsg 的 JProtobuf 序列化时,this 指向 BaseMsg(实际运行会指向子类),无法通过编译,需要额外处理 (ProtoUtils), + * 不指定 Codec<> 的泛型虽然可以通过编译但是无法正确的编解码 + * @param out + */ + @Override + public void serialization(ByteBuf out) { + + byte[] bytes = ProtoUtils.encode(this); + // 写入消息体 + out.writeBytes(bytes); + + } + + /** + * 反序列化(解码) + * @param in + */ + @Override + public void deserialization(ByteBuf in) throws IOException { + // 读取消息体 byte 数组 + byte[] bytes = new byte[in.readableBytes()]; + in.readBytes(bytes); + this.deserialization(bytes); + } + + @Override + public void deserialization(byte[] bytes) throws IOException { + BaseMsg_CmdVersion msg = ProtoUtils.decode(bytes, this.getClass()); + // 将属性设置到类上 + BeanUtils.copyProperties(msg, this); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/ByteData.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/ByteData.java new file mode 100644 index 0000000000000000000000000000000000000000..038706a83dd14e706e20041cf035f43c9c745d5b --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/ByteData.java @@ -0,0 +1,42 @@ +package com.paradogs.framework.core.msg; + +import com.baidu.bjf.remoting.protobuf.FieldType; +import com.baidu.bjf.remoting.protobuf.annotation.Protobuf; +import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass; +import io.netty.buffer.ByteBuf; +import lombok.Data; + +import java.io.IOException; +import java.util.Arrays; + +/** + * @author: yumi + * @date: 2023/8/7 9:52 + * @Description: TODO + */ +@Data +public class ByteData implements IMsgSerializable { + + @Protobuf(fieldType = FieldType.OBJECT, order = 1) + private MsgHeader msgHeader; + + @Protobuf(fieldType = FieldType.BYTES, order = 2) + private byte[] dataBytes; + + @Override + public void serialization(ByteBuf out) { + out.writeBytes(this.dataBytes); + } + + @Override + public void deserialization(ByteBuf in) throws IOException { + this.dataBytes = new byte[in.readableBytes()]; + in.readBytes(this.dataBytes); + } + + @Override + public void deserialization(byte[] bytes) throws IOException { + this.dataBytes = bytes; + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/CommonController.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/CommonController.java new file mode 100644 index 0000000000000000000000000000000000000000..19f62c1a731fff7476ba83b7093f67ef8da4dfc6 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/CommonController.java @@ -0,0 +1,38 @@ +package com.paradogs.framework.core.msg; + +import com.paradogs.framework.core.annoations.request.PRController; +import com.paradogs.framework.core.annoations.request.PRMsgMapping; +import com.paradogs.framework.core.events.RPCRespEvent; +import com.paradogs.framework.core.utils.EventUtils; +import lombok.extern.slf4j.Slf4j; + +/** + * @author: yumi + * @date: 2023/8/7 16:04 + * @Description: TODO + */ +@Slf4j +@PRController +@PRMsgMapping("_paradogs") +public class CommonController { + + @PRMsgMapping("dist") + public void dist() { + log.info("dist test success ..."); + } + + /** + * 回调处理,通知回调事件 + * GC 消息统一走这里,保证也按队列顺序处理 + * @param msg + */ + @PRMsgMapping("callback") + public void callback(ByteData msg) { + if (msg.getMsgHeader().getReplyMsgId() == null) { + log.error("Not found Callback header.replyMsgId: {}", msg); + return; + } + EventUtils.publishEvent(new RPCRespEvent(msg)); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/Connection.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/Connection.java new file mode 100644 index 0000000000000000000000000000000000000000..45ea5043279758ebd7ea593d06d5b397990c934e --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/Connection.java @@ -0,0 +1,87 @@ +package com.paradogs.framework.core.msg; + +import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass; +import com.paradogs.framework.core.msg.PRMsg; +import io.netty.channel.Channel; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.net.InetSocketAddress; + + +/** + * @author: yumi + * @date: 2023/8/15 15:28 + * @Description: TODO + */ +@Slf4j +@Data +@ProtobufClass +public class Connection { + + /** + * 通道 + */ + private Channel channel; + + /** + * 连接状态 + */ + private State state = State.WAIT_INIT; + + /** + * 目标服务类型 + */ + private String targetServer; + + /** + * 目标服务名称 + */ + private String targetName; + + + public Connection(Channel channel) { + this.channel = channel; + } + + /** + * 初始化连接服务器信息 + * @param targetServer + * @param targetName + */ + public void init(String targetServer, String targetName) { + if (state != State.WAIT_INIT) { + log.warn("masterClient already init: [server: {}, name: {}]", targetServer, targetName); + return; + } + this.targetServer = targetServer; + this.targetName = targetName; + this.state = State.RUNNING; + log.info("Init masterClient: {}", targetServer); + } + + public String getHost() { + return ((InetSocketAddress) this.channel.remoteAddress()).getHostString(); + } + + public int getPort() { + return ((InetSocketAddress) this.channel.remoteAddress()).getPort(); + } + + + public enum State { + /** + * 等待初始化数据 + */ + WAIT_INIT, + /** + * 正常运行中 + */ + RUNNING, + /** + * 停止 + */ + STOP + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/DBTask.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/DBTask.java new file mode 100644 index 0000000000000000000000000000000000000000..f0a699a9a10134b3e086041790bd211bdf113c71 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/DBTask.java @@ -0,0 +1,41 @@ +package com.paradogs.framework.core.msg; + +import lombok.Data; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.time.LocalDateTime; + +/** + * @author: yumi + * @date: 2023/7/28 22:50 + * @Description: DB 线程异步数据更新任务 + */ +@Data +public class DBTask { + + /** + * 操作类 + */ + private Object operateObj; + + /** + * 调用方法 + */ + private Method callMethod; + + /** + * 调用参数 + */ + private Object[] params; + + /** + * 任务发起时间 + */ + private LocalDateTime startTime; + + public void call() throws InvocationTargetException, IllegalAccessException { + callMethod.invoke(operateObj, params); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/GCAck.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/GCAck.java new file mode 100644 index 0000000000000000000000000000000000000000..4768a041d88a72c998d8180fdf20a67e8decb3ee --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/GCAck.java @@ -0,0 +1,33 @@ +package com.paradogs.framework.core.msg; + +import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass; +import com.paradogs.framework.core.exceptions.ServiceException; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author: yumi + * @date: 2023/11/16 13:47 + * @Description: 通用返回 + * protobuf 无法解析泛型参数 + */ +@Data +@NoArgsConstructor // 必须要有无参构造,JProtobuf 才能编码 +@ProtobufClass +public class GCAck { + + public static GCAck success() { + return new GCAck(); + } + + public static GCAck fail() { + throw new ServiceException(); + } + +} + +class R_CONST { // 不能放 R 里,因为 JProtobuf 我设置了自动编解码,静态变量也会自动加上编解码的注解,@slf4j 日志也不能加 + public static final int SUCCESS_CODE = 200; + + public static final int FAIL_CODE = -1; +} diff --git a/mini-common/src/main/java/com/mini/common/message/IMsgSerializable.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/IMsgSerializable.java similarity index 38% rename from mini-common/src/main/java/com/mini/common/message/IMsgSerializable.java rename to paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/IMsgSerializable.java index da17347acffa87226ce86408b3b63ec17574e195..9d72af2656aeacb74a0d24dcd1f735efca6b7e01 100644 --- a/mini-common/src/main/java/com/mini/common/message/IMsgSerializable.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/IMsgSerializable.java @@ -1,8 +1,9 @@ -package com.mini.common.message; +package com.paradogs.framework.core.msg; -import com.google.protobuf.InvalidProtocolBufferException; import io.netty.buffer.ByteBuf; +import java.io.IOException; + /** * @author: yumi @@ -11,8 +12,10 @@ import io.netty.buffer.ByteBuf; */ public interface IMsgSerializable { - void serialization(ByteBuf out); + void serialization(ByteBuf out) throws IOException; + + void deserialization(ByteBuf in) throws IOException; - void deserialization(ByteBuf in) throws InvalidProtocolBufferException; + void deserialization(byte[] bytes) throws IOException; } diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/MsgHeader.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/MsgHeader.java new file mode 100644 index 0000000000000000000000000000000000000000..f215ee773e453e3720f7dbbb79cec1f182f83290 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/MsgHeader.java @@ -0,0 +1,113 @@ +package com.paradogs.framework.core.msg; + +import com.baidu.bjf.remoting.protobuf.Codec; +import com.baidu.bjf.remoting.protobuf.FieldType; +import com.baidu.bjf.remoting.protobuf.ProtobufProxy; +import com.baidu.bjf.remoting.protobuf.annotation.Protobuf; +import com.google.protobuf.InvalidProtocolBufferException; +import com.paradogs.framework.core.utils.BeanUtils; +import com.paradogs.framework.core.utils.ProtoUtils; +import com.paradogs.framework.core.utils.RandomUtils; +import com.paradogs.framework.core.utils.RouteUtils; +import io.netty.buffer.ByteBuf; +import lombok.Data; +import lombok.ToString; + +import java.io.IOException; +import java.time.LocalDateTime; + + +/** + * @author: yumi + * @date: 2023-02-08 13:41 + * @Description: 消息头 + */ +@Data +public class MsgHeader implements IMsgSerializable { + + /** + * 消息唯一 ID,用于请求 - 响应 + */ + @Protobuf(fieldType = FieldType.INT64, order = 1, required = false) + private Long id = RandomUtils.spawnSnowId(); + + /** + * 消息类型,替代路由地址(java 使用类型对应,nodejs 可以使用字符串对应方法) + * 待优化,路由转 cmd api + */ +// @Protobuf(fieldType = FieldType.INT32, order = 2, required = false) +// private int cmd; + + /** + * 消息路由,可通过字典转换为 cmd + */ + @Protobuf(fieldType = FieldType.STRING, order = 2, required = false) + private String route; + + /** + * 回复的消息 ID + */ + @Protobuf(fieldType = FieldType.STRING, order = 3, required = false) + private String sendServer; + + /** + * 回复的消息 ID + */ + @Protobuf(fieldType = FieldType.INT64, order = 4, required = false) + private Long replyMsgId; + +// /** +// * 消息生成的时间戳 +// */ +// @Protobuf(fieldType = FieldType.INT64, order = 3, required = false) +// private Long timestamp; + + /** + * >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 额外 Props + */ + + /** + * 玩家 ID + */ + private Long pId; + + /** + * 创建时间 + */ + private LocalDateTime createTime = LocalDateTime.now(); + + /** + * 序列化(编码) + * ps: netty 的 codec 最终会捕获异常转换成 EncoderException + * @param out + */ + @Override + public void serialization(ByteBuf out) throws IOException { + byte[] bytes = ProtoUtils.encode(this); + out.writeShort(bytes.length); + out.writeBytes(bytes); + } + + /** + * 反序列化(解码) + * @param in + * @throws InvalidProtocolBufferException + */ + @Override + public void deserialization(ByteBuf in) throws IOException { + byte[] bytes = new byte[in.readShort()]; + in.readBytes(bytes); + this.deserialization(bytes); + } + + @Override + public void deserialization(byte[] bytes) throws IOException { + MsgHeader msgHeader = ProtoUtils.decode(bytes, this.getClass()); + BeanUtils.copyProperties(msgHeader, this); + } + + public String getServer() { + return this.route.substring(0, this.route.indexOf(RouteUtils.SERVER_SEPARATOR)); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/PRMsg.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/PRMsg.java new file mode 100644 index 0000000000000000000000000000000000000000..d7de248019cab66b3dbdb838218e15a21f505bfa --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/PRMsg.java @@ -0,0 +1,92 @@ +package com.paradogs.framework.core.msg; + +import com.baidu.bjf.remoting.protobuf.FieldType; +import com.baidu.bjf.remoting.protobuf.annotation.Protobuf; +import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass; +import com.baomidou.mybatisplus.annotation.TableField; +import com.paradogs.framework.common.pojo.cg.CGPrepareLogin; +import com.paradogs.framework.common.pojo.gc.GCAllocGateway; +import com.paradogs.framework.core.utils.BeanUtils; +import com.paradogs.framework.core.utils.ProtoUtils; +import io.netty.buffer.ByteBuf; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.IOException; +import java.util.Arrays; + +/** + * @author: yumi + * @date: 2023/2/15 21:12 + * @Description: 基础消息类,通过约定类名实现反射自动调用, + * this 在子类使用时会指向子类对象,从而实现子类不需要实现接口就能自动转换 + */ +//@Slf4j 不能加,jprotobuf 会自动解析所有属性 +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PRMsg { + + /** + * 消息头 + */ + @TableField(exist = false) + @Protobuf(fieldType = FieldType.OBJECT, order = 1) + private MsgHeader msgHeader; + + /** + * 消息数据 + */ + @Protobuf(fieldType = FieldType.OBJECT, order = 2) + private Object msgData; + + public PRMsg(T data) { + this.msgHeader = new MsgHeader(); + this.msgData = data; + } + public PRMsg(String route, T data) { + this.msgHeader = new MsgHeader(); + this.msgHeader.setRoute(route); + this.msgData = data; + } + + /** + * 序列化(编码) + * @param out + */ + public void serialization(ByteBuf out) { + + // 字节消息特殊处理 + if (this.msgData instanceof byte[]) { + out.writeBytes((byte[]) this.msgData); + return; + } + // 待优化:基本数据类型特殊处理 + + // 写入消息体 + byte[] bytes = ProtoUtils.encode(this.msgData); + + out.writeBytes(bytes); + + } + + /** + * 反序列化(解码) + * @param in + */ + public void deserialization(ByteBuf in, Class clz) throws IOException { + // 读取消息体 byte 数组 + byte[] bytes = new byte[in.readableBytes()]; + in.readBytes(bytes); + this.deserialization(bytes, clz); + } + + public void deserialization(byte[] bytes, Class clz) { + this.msgData = ProtoUtils.decode(bytes, clz); + } + + public void setMsgHeader(MsgHeader msgHeader) { + this.msgHeader = msgHeader; + } +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/PRMsgContextHolder.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/PRMsgContextHolder.java new file mode 100644 index 0000000000000000000000000000000000000000..59900358f6033db98caba1895b1c0c5e9c3d6dd3 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/PRMsgContextHolder.java @@ -0,0 +1,61 @@ +package com.paradogs.framework.core.msg; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import lombok.*; + +/** + * @author: yumi + * @date: 2023/8/13 13:56 + * @Description: 消息上下文 + */ +@Data +public class PRMsgContextHolder { + + @Getter + private static ChannelHandlerContext ctx; + + @Getter + private static Long playerId; + + @Getter + private static Channel channel; + + + public static void setContext(ChannelHandlerContext ctx, Long playerId) { + PRMsgContextHolder.ctx = ctx; + PRMsgContextHolder.playerId = playerId; + } + + public static void setContext(Snapshot snapshot) { + PRMsgContextHolder.ctx = snapshot.ctx; + PRMsgContextHolder.playerId = snapshot.playId; + } + + + /** + * 返回当前上下文快照 + */ + public static PRMsgContextHolder.Snapshot getSnapshot() { + return new PRMsgContextHolder.Snapshot(PRMsgContextHolder.ctx, playerId); + } + + public static Channel getChannel() { + if (PRMsgContextHolder.getCtx() != null) { + return PRMsgContextHolder.getCtx().channel(); + } + return null; + } + + /** + * 快照,与 MsgContextHolder 属性相同 + */ + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class Snapshot { + private ChannelHandlerContext ctx; + private Long playId; + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/route/MsgMapping.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/route/MsgMapping.java new file mode 100644 index 0000000000000000000000000000000000000000..a344a84e5f0c8d15777d4b3bd3ea6b029370b276 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/msg/route/MsgMapping.java @@ -0,0 +1,35 @@ +package com.paradogs.framework.core.msg.route; + +import com.paradogs.framework.core.msg.PRMsg; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.lang.reflect.Method; + +/** + * @author: yumi + * @date: 2023/8/1 15:47 + * @Description: cmd 消息映射 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class MsgMapping { + + /** + * 参数消息类型 + */ + private Class msgClass; + + /** + * 对应方法 + */ + private Method method; + + /** + * 是否异步 + */ + private boolean async; + +} diff --git a/mini-game/src/main/java/com/mini/game/server/GameMainChannelInitializer.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/PRAbChannelInitializer.java similarity index 31% rename from mini-game/src/main/java/com/mini/game/server/GameMainChannelInitializer.java rename to paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/PRAbChannelInitializer.java index aabde82f9ef25a2e08462f419d933fc77e403cfe..e2fdd002cbc346e21ec2c3a997f0075fcd95fbe4 100644 --- a/mini-game/src/main/java/com/mini/game/server/GameMainChannelInitializer.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/PRAbChannelInitializer.java @@ -1,48 +1,67 @@ -package com.mini.game.server; +package com.paradogs.framework.core.netty; -import com.mini.common.netty.Codec; -import com.mini.game.handler.base.GameMessageHandler; -import com.mini.game.misc.GameRepository; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInitializer; +import com.paradogs.framework.core.utils.SpringUtils; +import io.netty.channel.*; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.codec.LengthFieldBasedFrameDecoder; import io.netty.handler.codec.LengthFieldPrepender; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; /** * @author: yumi - * @date: 2023-03-13 16:11 + * @date: 2023/2/18 13:14 * @Description: TODO */ @Slf4j -@Component -public class GameMainChannelInitializer extends ChannelInitializer { +public abstract class PRAbChannelInitializer extends ChannelInitializer { @Autowired - private GameMessageHandler gameMessageHandler; + private ProtocolProperties protocolProperties; - @Autowired - private GameRepository repository; + private PRAbMsgHandler msgHandler; - @Autowired - private Codec codec; + public PRAbChannelInitializer(PRAbMsgHandler msgHandler) { + this.msgHandler = msgHandler; + } + /** + * 建立连接,初始化通道(还不能传输消息) + * @param channel + * @throws Exception + */ @Override protected void initChannel(NioSocketChannel channel) throws Exception { - // 判断 addList() 是否是无状态的,可以改为单例,提高效率、减少内存消耗 - channel.pipeline().addLast(new LengthFieldBasedFrameDecoder(65534, 0, 2, 0, 2)); - channel.pipeline().addLast(new LengthFieldPrepender(2)); - channel.pipeline().addLast(new Codec()); - channel.pipeline().addLast(gameMessageHandler); - repository.setGateChannel(channel); -// log.info("[{}] 建立连接", name); + + channel.pipeline().addLast(new LengthFieldBasedFrameDecoder( + protocolProperties.getMaxFrameLength(), + protocolProperties.getLengthFieldOffset(), + protocolProperties.getLengthFieldLength(), + protocolProperties.getLengthAdjustment(), + protocolProperties.getInitialBytesToStrip())); + + channel.pipeline().addLast(new LengthFieldPrepender(protocolProperties.getLengthFieldLength())); + + channel.pipeline().addLast(SpringUtils.getBean(PRCodec.class)); + + channel.pipeline().addLast(msgHandler); + } + /** + * ChannelInitializer 的 ChannelActive 和 ChannelInboundHandlerAdapter 的不一样,一般用 ChannelInboundHandlerAdapter + * ChannelInitializer.ChannelActive 会不触发 + */ + + /** + * ChannelInitializer 的异常处理 + * @param ctx + * @throws Exception + */ @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + cause.printStackTrace(); log.error("{}", cause.getMessage()); } + } diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/PRAbMsgHandler.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/PRAbMsgHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..65712163451c7dc33c0b9476c70ed348015be97e --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/PRAbMsgHandler.java @@ -0,0 +1,89 @@ +package com.paradogs.framework.core.netty; + +import com.paradogs.framework.core.events.ServerClientActiveEvent; +import com.paradogs.framework.core.events.ServerClientInactiveEvent; +import com.paradogs.framework.core.exceptions.GlobalExceptionDispatch; +import com.paradogs.framework.core.msg.ByteData; +import com.paradogs.framework.core.msg.PRMsgContextHolder; +import com.paradogs.framework.core.utils.EventUtils; +import com.paradogs.framework.core.utils.SpringUtils; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import lombok.extern.slf4j.Slf4j; + +/** + * @author: yumi + * @date: 2023/7/27 9:32 + * @Description: 消息加入到 MAIN 处理队列 + */ +@Slf4j +public abstract class PRAbMsgHandler extends SimpleChannelInboundHandler { + + /** + * 消息处理 + */ + protected abstract void processMsg(ByteData msg) throws Exception; + + /** + * 设置自定义参数 + */ + protected void setProps(ChannelHandlerContext ctx, ByteData msg) {} + + /** + * 设置消息上下文 + * @param ctx + * @param msg + */ + protected void setContext(ChannelHandlerContext ctx, ByteData msg) { + PRMsgContextHolder.setContext(ctx, msg.getMsgHeader().getPId()); + } + + /** + * 消息处理 + * @param ctx + * @param msg + */ + protected final void channelRead0(ChannelHandlerContext ctx, ByteData msg) { + + setProps(ctx, msg); + + setContext(ctx, msg); + + log.debug("{} <<<<< [{}], {}", msg.getMsgHeader().getRoute(), msg.getMsgHeader().getSendServer(), msg); + + try { + // 消息处理 + processMsg(msg); + + } catch (Exception e) { + // 全局异常处理 + SpringUtils.getBean(GlobalExceptionDispatch.class).forward(e); + + } + } + + /** + * 连接建立事件 + * @param ctx + * @throws Exception + */ + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + EventUtils.publishEvent(new ServerClientActiveEvent(ctx)); + } + + /** + * 连接断开事件 + * @param ctx + * @throws Exception + */ + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + EventUtils.publishEvent(new ServerClientInactiveEvent(ctx)); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + log.info("{}", cause.getMessage(), cause); + } +} diff --git a/mini-common/src/main/java/com/mini/common/netty/Codec.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/PRCodec.java similarity index 38% rename from mini-common/src/main/java/com/mini/common/netty/Codec.java rename to paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/PRCodec.java index 33b385f69be3563a6dde98250e577701d235783c..5b7e717cd65a34017d78d1ee452f5aabaf22497c 100644 --- a/mini-common/src/main/java/com/mini/common/netty/Codec.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/PRCodec.java @@ -1,12 +1,15 @@ -package com.mini.common.netty; +package com.paradogs.framework.core.netty; -import com.mini.common.message.BaseMessage; -import com.mini.common.message.MsgHeader; +import com.paradogs.framework.common.pojo.gc.GCAllocGateway; +import com.paradogs.framework.core.msg.PRMsg; +import com.paradogs.framework.core.msg.ByteData; +import com.paradogs.framework.core.msg.MsgHeader; +import com.paradogs.framework.core.utils.ProtoUtils; import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageCodec; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import java.util.List; @@ -15,39 +18,37 @@ import java.util.List; * @author: yumi * @date: 2023-02-08 11:43 * @Description: TODO + * Not allowed to be shared !! + * ps: 继承 BaseMsg 的实体类不能加 @slf4j,会被 JProtobuf 解析导致编码失败 */ @Slf4j @Component -public class Codec extends ByteToMessageCodec { +@Scope("prototype") +public class PRCodec extends ByteToMessageCodec { @Override - protected void encode(ChannelHandlerContext ctx, BaseMessage msg, ByteBuf out) throws Exception { + protected void encode(ChannelHandlerContext ctx, PRMsg msg, ByteBuf out) throws Exception { msg.getMsgHeader().serialization(out); msg.serialization(out); + } @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { - // 读取请求头 - MsgHeader msgHeader = MsgHeader.builder().build(); - msgHeader.deserialization(in); - - // 以后 Class.forName 可以改成类似 Spring 的组件形式,扫描包并注册到工厂 - Class aClass = Class.forName(msgHeader.getMsgType()); - BaseMessage baseMessage = (BaseMessage) aClass.newInstance(); + MsgHeader header = new MsgHeader(); + header.deserialization(in); - baseMessage.deserialization(in); - // 这里注意需要设置参数 - baseMessage.setMsgHeader(msgHeader); - - out.add(baseMessage); + // 消息体暂时不解析,放 MsgHandler 中解析 + ByteData byteDataMsg = new ByteData(); + byteDataMsg.setMsgHeader(header); + byteDataMsg.deserialization(in); + out.add(byteDataMsg); } - } diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/PRConnHolder.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/PRConnHolder.java new file mode 100644 index 0000000000000000000000000000000000000000..8b079f66ecb1c3a332fc00d8247db0e1eed74431 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/PRConnHolder.java @@ -0,0 +1,70 @@ +package com.paradogs.framework.core.netty; + +import com.paradogs.framework.core.netty.server.PRConnection; +import com.paradogs.framework.core.netty.server.ServerProperties; +import io.netty.channel.Channel; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @author: yumi + * @date: 2023/11/27 13:40 + * @Description: TODO + */ +public class PRConnHolder { + + private static Map> typeConnMap = new ConcurrentHashMap<>(); + private static Map channelConnMap = new ConcurrentHashMap<>(); + + public static void addConn(String type, PRConnection conn) { + if (!typeConnMap.containsKey(type)) { + typeConnMap.put(type, new ArrayList<>()); + } + typeConnMap.get(type).add(conn); + channelConnMap.put(conn.getChannel(), conn); + } + + public static void initConn(Channel channel, ServerProperties properties) { + addConn(properties.getType(), new PRConnection(channel, properties)); + } + + public static List getConns(String type) { + if (!typeConnMap.containsKey(type)) { + return new ArrayList<>(); + } + return typeConnMap.get(type); + } + + public static PRConnection getConn(String type) { + if (!typeConnMap.containsKey(type)) { + return null; + } + return typeConnMap.get(type).get(0); + } + + public static PRConnection getConn(Channel channel) { + return channelConnMap.get(channel); + } + + public static void removeConn(String type) { + for (PRConnection conn : typeConnMap.remove(type)) { + channelConnMap.remove(conn.getChannel()); + } + } + + public static PRConnection removeConn(Channel channel) { + PRConnection conn = channelConnMap.remove(channel); + if (conn != null) { + List list = typeConnMap.get(conn.getType()); + if (list != null) { + Iterator iterator = list.iterator(); + while (iterator.hasNext()) { + PRConnection next = iterator.next(); + if (next == conn) {iterator.remove();} + } + } + } + return conn; + } +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/ProtocolProperties.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/ProtocolProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..23e02e483ef2ab82a7ce32a4a7f3f8ca7f27d315 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/ProtocolProperties.java @@ -0,0 +1,28 @@ +package com.paradogs.framework.core.netty; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @author: yumi + * @date: 2023/8/1 9:15 + * @Description: TODO + * 待优化:加上注释和用法 + */ +@Data +@Component +@ConfigurationProperties("paradogs.protocoal") +public class ProtocolProperties { + + private int maxFrameLength = 65534; + + private int lengthFieldOffset = 0; + + private int lengthFieldLength = 2; + + private int lengthAdjustment = 0; + + private int initialBytesToStrip = 2; + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/PRAbClientMsgHandler.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/PRAbClientMsgHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..8516a94af6dd6b95f82662d74b4d42627fbf578f --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/PRAbClientMsgHandler.java @@ -0,0 +1,45 @@ +package com.paradogs.framework.core.netty.clients; + +import com.paradogs.framework.core.netty.PRAbMsgHandler; +import com.paradogs.framework.core.netty.PRConnHolder; +import com.paradogs.framework.core.netty.server.PRConnection; +import io.netty.channel.ChannelHandlerContext; + +/** + * @author: yumi + * @date: 2023/11/3 11:18 + * @Description: TODO + */ +public abstract class PRAbClientMsgHandler extends PRAbMsgHandler { + + private String type; + + public PRAbClientMsgHandler(String type) { + this.type = type; + } + + /** + * 连接建立事件 + * @param ctx + * @throws Exception + */ + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + super.channelActive(ctx); + PRConnection conn = new PRConnection(); + conn.setChannel(ctx.channel()); + PRConnHolder.addConn(type, conn); + } + + /** + * 连接断开事件 + * @param ctx + * @throws Exception + */ + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + super.channelInactive(ctx); + PRConnHolder.removeConn(type); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/PRClientChannelInitializer.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/PRClientChannelInitializer.java new file mode 100644 index 0000000000000000000000000000000000000000..aed2724a912db7dae377f924e5eb68766a31956e --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/PRClientChannelInitializer.java @@ -0,0 +1,17 @@ +package com.paradogs.framework.core.netty.clients; + +import com.paradogs.framework.core.netty.PRAbChannelInitializer; +import com.paradogs.framework.core.netty.PRAbMsgHandler; + +/** + * @author: yumi + * @date: 2023/11/3 11:18 + * @Description: TODO + */ +public abstract class PRClientChannelInitializer extends PRAbChannelInitializer { + + public PRClientChannelInitializer(PRAbMsgHandler msgHandler) { + super(msgHandler); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/common/ClientsProperties.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/common/ClientsProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..470068b807406dc05454cedf038d358f6b0e28f1 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/common/ClientsProperties.java @@ -0,0 +1,43 @@ +package com.paradogs.framework.core.netty.clients.common; + +import com.paradogs.framework.core.utils.StringUtils; +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author: yumi + * @date: 2023/7/31 22:39 + * @Description: TODO + */ +@Data +@Component +@ConfigurationProperties("paradogs") +public class ClientsProperties { + + List clients = new ArrayList<>(); + + @Data + public static class Client { + /** + * 主机 ip + */ + private String host; + + /** + * 端口号 + */ + private int port; + + /** + * 服务器类型 + */ + private String type; + + } + +} diff --git a/mini-gate/src/main/java/com/mini/gate/server/ServerRunner.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/common/PRClientLaunch.java similarity index 35% rename from mini-gate/src/main/java/com/mini/gate/server/ServerRunner.java rename to paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/common/PRClientLaunch.java index 75cd1338864d743bb4e311f6ba0108e6d2ea05ef..721e373312727e3b7199357380aa0cc1dad0bcdc 100644 --- a/mini-gate/src/main/java/com/mini/gate/server/ServerRunner.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/common/PRClientLaunch.java @@ -1,8 +1,8 @@ -package com.mini.gate.server; +package com.paradogs.framework.core.netty.clients.common; -import com.mini.gate.client.ClientCfg; -import com.mini.gate.client.ClientManager; -import com.mini.gate.config.ClientConfig; +import com.paradogs.framework.core.netty.clients.master.MasterProperties; +import com.paradogs.framework.core.netty.clients.master.PRMasterClient; +import com.paradogs.framework.core.netty.server.ServerProperties; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; @@ -11,32 +11,33 @@ import org.springframework.stereotype.Component; /** * @author: yumi - * @date: 2023-02-24 14:29 + * @date: 2023/11/27 15:25 * @Description: TODO */ @Slf4j @Component -public class ServerRunner implements ApplicationRunner { +public class PRClientLaunch implements ApplicationRunner { @Autowired - private GateServer gateServer; + private ServerProperties serverProperties; @Autowired - private ClientManager clientManager; - - @Autowired - private ClientConfig clientConfig; + private ClientsProperties clientsProperties; @Override public void run(ApplicationArguments args) throws Exception { - gateServer.start(); - - for (ClientCfg client : clientConfig.getClients()) { - clientManager.start(client); + // master + if (!serverProperties.isMaster()) { + PRMasterClient master = new PRMasterClient(); + master.start(); } - + // common + for (ClientsProperties.Client clientProperties : clientsProperties.clients) { + PRServerClient client = new PRServerClient(clientProperties); + client.start(); + } } } diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/common/PRServerClient.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/common/PRServerClient.java new file mode 100644 index 0000000000000000000000000000000000000000..b12b59c6ba7c746e60ce088f40527c3340ca38f4 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/common/PRServerClient.java @@ -0,0 +1,62 @@ +package com.paradogs.framework.core.netty.clients.common; + +import com.paradogs.framework.core.events.ServerClientStartEvent; +import com.paradogs.framework.core.netty.clients.PRClientChannelInitializer; +import com.paradogs.framework.core.utils.EventUtils; +import com.paradogs.framework.core.utils.SpringUtils; +import com.paradogs.framework.core.utils.StringUtils; +import io.netty.bootstrap.Bootstrap; +import io.netty.channel.Channel; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioSocketChannel; +import lombok.extern.slf4j.Slf4j; + +/** + * @author: yumi + * @date: 2023/7/31 22:36 + * @Description: 用于连接 master 服务器 + */ +@Slf4j +public class PRServerClient { + + private ClientsProperties.Client properties; + + private PRClientChannelInitializer clientChannelInitializer; + + private Bootstrap client; + + private NioEventLoopGroup worker; + + private Channel channel; + + public PRServerClient(ClientsProperties.Client properties) { + this.properties = properties; + this.clientChannelInitializer = SpringUtils.getBean(PRServerClientChannelInitializer.class, new PRServerClientMsgHandler(properties)); + } + + /** + * 连服服务器 + */ + public void start() { + + try { + // eventLoop + worker = new NioEventLoopGroup(); + + // init + this.client = new Bootstrap() + .group(worker) + .channel(NioSocketChannel.class) + .handler(clientChannelInitializer); + + // connect + channel = client.connect(properties.getHost(), properties.getPort()).sync().channel(); + EventUtils.publishEvent(new ServerClientStartEvent()); + + } catch (Exception e) { + log.error("Client connect error:{}", e.getMessage(), e); + } + + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/common/PRServerClientChannelInitializer.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/common/PRServerClientChannelInitializer.java new file mode 100644 index 0000000000000000000000000000000000000000..e0a1a312e187da484e47a56b505b682bbe5c1302 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/common/PRServerClientChannelInitializer.java @@ -0,0 +1,21 @@ +package com.paradogs.framework.core.netty.clients.common; + +import com.paradogs.framework.core.netty.clients.PRClientChannelInitializer; +import io.netty.channel.ChannelHandler; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +/** + * @author: yumi + * @date: 2023/11/4 14:33 + * @Description: 这个没有注册到 Spring,无法注入注意 + */ +@Scope("prototype") +@Component +public class PRServerClientChannelInitializer extends PRClientChannelInitializer { + + public PRServerClientChannelInitializer(PRServerClientMsgHandler msgHandler) { + super(msgHandler); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/common/PRServerClientMsgHandler.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/common/PRServerClientMsgHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..dfa25881e8f683d060c45220a75b8eb285771e1a --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/common/PRServerClientMsgHandler.java @@ -0,0 +1,57 @@ +package com.paradogs.framework.core.netty.clients.common; + +import com.paradogs.framework.core.msg.ByteData; +import com.paradogs.framework.core.netty.PRConnHolder; +import com.paradogs.framework.core.netty.clients.PRAbClientMsgHandler; +import com.paradogs.framework.core.netty.server.PRConnection; +import com.paradogs.framework.core.utils.MsgUtils; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author: yumi + * @date: 2023/11/4 15:52 + * @Description: TODO + */ +@Slf4j +@Component +@ChannelHandler.Sharable +public class PRServerClientMsgHandler extends PRAbClientMsgHandler { + + private ClientsProperties.Client properties; + + public PRServerClientMsgHandler(ClientsProperties.Client properties) { + super(properties.getType()); + this.properties = properties; + } + + @Override + protected void processMsg(ByteData msg) throws Exception { + MsgUtils.adapterHandle(msg); + } + + /** + * 连接建立事件 + * @param ctx + * @throws Exception + */ + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + super.channelActive(ctx); + log.info("ServerClient connect success: {}", properties); + } + + /** + * 连接断开事件 + * @param ctx + * @throws Exception + */ + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + super.channelInactive(ctx); + log.info("ServerClient disconnect: {}", properties); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/master/MasterProperties.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/master/MasterProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..d186782add1768d3c87a30a6cfe96468ac482a84 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/master/MasterProperties.java @@ -0,0 +1,25 @@ +package com.paradogs.framework.core.netty.clients.master; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * @author: yumi + * @date: 2023/11/27 16:02 + * @Description: TODO + */ +@Data +@ConfigurationProperties("paradogs.master") +public class MasterProperties { + + /** + * 主机 ip + */ + private String host; + + /** + * 端口号 + */ + private int port; + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/master/PRMasterClient.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/master/PRMasterClient.java new file mode 100644 index 0000000000000000000000000000000000000000..f0b863736b50df22433ee0e4677f8ff9fdca215f --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/master/PRMasterClient.java @@ -0,0 +1,63 @@ +package com.paradogs.framework.core.netty.clients.master; + +import com.paradogs.framework.core.events.ServerClientStartEvent; +import com.paradogs.framework.core.netty.clients.common.PRServerClientChannelInitializer; +import com.paradogs.framework.core.utils.EventUtils; +import com.paradogs.framework.core.utils.SpringUtils; +import io.netty.bootstrap.Bootstrap; +import io.netty.channel.Channel; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioSocketChannel; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @author: yumi + * @date: 2023/11/27 16:00 + * @Description: TODO + */ +@Slf4j +public class PRMasterClient { + + private MasterProperties properties; + + private PRMasterClientChannelInitializer clientChannelInitializer; + + private Bootstrap client; + + private NioEventLoopGroup worker; + + private Channel channel; + + public PRMasterClient() { + this.properties = SpringUtils.getBean(MasterProperties.class); + this.clientChannelInitializer = SpringUtils.getBean(PRMasterClientChannelInitializer.class); + } + + /** + * 连服服务器 + */ + public void start() { + + try { + // eventLoop + worker = new NioEventLoopGroup(); + + // init + this.client = new Bootstrap() + .group(worker) + .channel(NioSocketChannel.class) + .handler(clientChannelInitializer); + + // connect + channel = client.connect(properties.getHost(), properties.getPort()).sync().channel(); + EventUtils.publishEvent(new ServerClientStartEvent()); + + } catch (Exception e) { + log.error("Client connect error:{}", e.getMessage(), e); + } + + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/master/PRMasterClientChannelInitializer.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/master/PRMasterClientChannelInitializer.java new file mode 100644 index 0000000000000000000000000000000000000000..51dc6926d6534660316d8ada3aaac1c61e63f2f7 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/master/PRMasterClientChannelInitializer.java @@ -0,0 +1,20 @@ +package com.paradogs.framework.core.netty.clients.master; + +import com.paradogs.framework.core.netty.PRAbMsgHandler; +import com.paradogs.framework.core.netty.clients.PRClientChannelInitializer; +import io.netty.channel.ChannelHandler; +import org.springframework.stereotype.Component; + +/** + * @author: yumi + * @date: 2023/11/4 14:33 + * @Description: TODO + */ +@Component +@ChannelHandler.Sharable +public class PRMasterClientChannelInitializer extends PRClientChannelInitializer { + + public PRMasterClientChannelInitializer(PRAbMsgHandler msgHandler) { + super(msgHandler); + } +} diff --git a/mini-game/src/main/java/com/mini/game/handler/base/GameMessageHandler.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/master/PRMasterClientMsgHandler.java similarity index 30% rename from mini-game/src/main/java/com/mini/game/handler/base/GameMessageHandler.java rename to paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/master/PRMasterClientMsgHandler.java index 81befb51224364ba81938cb28a51ffdcda4e5003..eb7fb5ebe2ca6c23fb5a5bf7e753c15236abd60f 100644 --- a/mini-game/src/main/java/com/mini/game/handler/base/GameMessageHandler.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/clients/master/PRMasterClientMsgHandler.java @@ -1,39 +1,47 @@ -package com.mini.game.handler.base; +package com.paradogs.framework.core.netty.clients.master; -import com.mini.common.message.BaseMessage; -import com.mini.game.misc.GameRepository; +import com.paradogs.framework.core.msg.ByteData; +import com.paradogs.framework.core.netty.clients.PRAbClientMsgHandler; +import com.paradogs.framework.core.netty.server.ServerProperties; +import com.paradogs.framework.core.utils.MsgUtils; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.SimpleChannelInboundHandler; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * @author: yumi - * @date: 2023-03-13 16:08 + * @date: 2023/11/4 15:52 * @Description: TODO */ -@Component @Slf4j +@Component @ChannelHandler.Sharable -public class GameMessageHandler extends SimpleChannelInboundHandler { +public class PRMasterClientMsgHandler extends PRAbClientMsgHandler { @Autowired - private GameRepository repository; + private ServerProperties serverProperties; + + public PRMasterClientMsgHandler() { + super("master"); + } + + @Override + protected void processMsg(ByteData msg) throws Exception { + MsgUtils.adapterHandle(msg); + } /** - * 处理消息 + * 连接建立事件 * @param ctx + * @throws Exception */ @Override - protected void channelRead0(ChannelHandlerContext ctx, BaseMessage msg) throws InterruptedException { - - /** - * 加入处理队列 - */ - repository.pushCGMessage(msg); - + public void channelActive(ChannelHandlerContext ctx) throws Exception { + super.channelActive(ctx); + // 向中心注册自身信息 + MsgUtils.send("master|_master.init", serverProperties, ctx.channel()); } } diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/events/MainLoopEvent.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/events/MainLoopEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..3114e16fdec74b014438b8b697e17167d317554b --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/events/MainLoopEvent.java @@ -0,0 +1,15 @@ +package com.paradogs.framework.core.netty.events; + +import org.springframework.context.ApplicationEvent; + +/** + * @author: yumi + * @date: 2023/8/4 9:46 + * @Description: TODO + */ +public class MainLoopEvent extends ApplicationEvent { + + public MainLoopEvent() { + super(new Object()); + } +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/events/ServerEvent.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/events/ServerEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..255cd941d24f902358a76198f3b9216fc70755b4 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/events/ServerEvent.java @@ -0,0 +1,22 @@ +package com.paradogs.framework.core.netty.events; + +import com.paradogs.framework.common.events.base.BaseEvent; +import lombok.extern.slf4j.Slf4j; + +/** + * @author: yumi + * @date: 2023/8/7 14:58 + * @Description: TODO + */ +@Slf4j +public class ServerEvent { + + public static class START extends BaseEvent { + + public START(Object source) { + super(source); + } + } + + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/PRAbServerMsgHandler.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/PRAbServerMsgHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..c2256fff388cadd1d8e54ce14ca32f86aedf0b12 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/PRAbServerMsgHandler.java @@ -0,0 +1,11 @@ +package com.paradogs.framework.core.netty.server; + +import com.paradogs.framework.core.netty.PRAbMsgHandler; + +/** + * @author: yumi + * @date: 2023/11/3 11:18 + * @Description: TODO + */ +public abstract class PRAbServerMsgHandler extends PRAbMsgHandler { +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/PRConnection.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/PRConnection.java new file mode 100644 index 0000000000000000000000000000000000000000..804f96b5bea802ad4e775d73a5bc62524416080e --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/PRConnection.java @@ -0,0 +1,39 @@ +package com.paradogs.framework.core.netty.server; + +import io.netty.channel.Channel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * @author: yumi + * @date: 2023/11/6 0:02 + * @Description: TODO + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PRConnection { + + public PRConnection(Channel channel, ServerProperties properties) { + this.channel = channel; + this.type = properties.getType(); + this.properties = properties; + } + + /** + * player、gate、master、login、... + */ + private String type; + + private Channel channel; + + private ServerProperties properties; + + public boolean isInit() { + return properties != null; + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/PRServerChannelInitializer.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/PRServerChannelInitializer.java new file mode 100644 index 0000000000000000000000000000000000000000..3269471fcb91f912480aa463254ad2b2abe49bec --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/PRServerChannelInitializer.java @@ -0,0 +1,17 @@ +package com.paradogs.framework.core.netty.server; + +import com.paradogs.framework.core.netty.PRAbChannelInitializer; +import com.paradogs.framework.core.netty.PRAbMsgHandler; + +/** + * @author: yumi + * @date: 2023/11/3 11:10 + * @Description: TODO + */ +public class PRServerChannelInitializer extends PRAbChannelInitializer { + + public PRServerChannelInitializer(PRAbMsgHandler msgHandler) { + super(msgHandler); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/PRServerLaunch.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/PRServerLaunch.java new file mode 100644 index 0000000000000000000000000000000000000000..ca7a8ac03d2d545e337158e93113112432bdbad8 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/PRServerLaunch.java @@ -0,0 +1,95 @@ +package com.paradogs.framework.core.netty.server; + +import com.paradogs.framework.core.events.ServerStartEvent; +import com.paradogs.framework.core.utils.EventUtils; +import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.Channel; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +/** + * @author: yumi + * @date: 2023/8/26 17:19 + * @Description: TODO + */ +@Slf4j +@Component +public class PRServerLaunch implements ApplicationRunner { + + private ServerBootstrap server; + + private NioEventLoopGroup boss; + + private NioEventLoopGroup worker; + + private Channel channel; + + @Autowired + private ServerProperties properties; + + @Autowired + private PRServerChannelInitializer channelInitializer; + + /** + * 启动 netty 服务器 + */ + public void start() { + + // eventLoop + boss = new NioEventLoopGroup(); + worker = new NioEventLoopGroup(); + + try { + // sever + server = new ServerBootstrap() + .group(boss, worker) + .channel(NioServerSocketChannel.class) + .childHandler(channelInitializer); + + // connect + channel = server.bind(properties.getPort()).sync().channel(); + channel.closeFuture().addListener(future -> { log.info("Server stop: [{}]", this.properties.getKey()); }); + + // start success + EventUtils.publishEvent(new ServerStartEvent()); + log.info("Server start success: [{} localhost:{}]", properties.getKey(), properties.getPort()); + + } catch (InterruptedException e) { + log.error("Server error:[{}]", e.getMessage(), e); + this.closeSync(); + } + + } + + /** + * 同步关闭连接 + * ***ps: 关闭后进度未结束是因为消息处理队列还开着未关闭 + * @return + */ + public boolean closeSync() { + try { + if (this.channel.isOpen()) { + channel.close().sync(); + } + if (!worker.isShutdown()) { + worker.shutdownGracefully(); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + + } + + @Override + public void run(ApplicationArguments args) throws Exception { + this.start(); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/ServerProperties.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/ServerProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..4214b4e83b2a677d95c83910c1de2cedaede1007 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/netty/server/ServerProperties.java @@ -0,0 +1,61 @@ +package com.paradogs.framework.core.netty.server; + +import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.util.UUID; + +/** + * @author: yumi + * @date: 2023/7/27 10:02 + * @Description: TODO + */ +@Data +@Component +@Scope("prototype") +@AllArgsConstructor +@NoArgsConstructor +@ToString(callSuper = true) +@ProtobufClass +@ConfigurationProperties("paradogs.server") +public class ServerProperties { + + /** + * 端口 + */ + @Value("${paradogs.server.port:80}") + private int port; + + /** + * 服务类型,相同服务类型相同 + * @value 用于未配置时报错 + */ + @Value("${paradogs.server.type}") + private String type; + + /** + * 服务名称 + */ + private String key; + + /** + * 是否为 master,用于判断 master 不连接自身 + */ + private boolean master = false; + + public String getKey() { + if (StringUtils.isNotBlank(this.key)) { + return this.key; + } + return this.key = UUID.randomUUID().toString().replace("-", ""); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/AbstractMsgConsumer.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/AbstractMsgConsumer.java new file mode 100644 index 0000000000000000000000000000000000000000..a826c376b5e829fe4c6671b72502cfecdf0c4e4a --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/AbstractMsgConsumer.java @@ -0,0 +1,21 @@ +package com.paradogs.framework.core.queue; + +import com.paradogs.framework.core.msg.ByteData; +import com.paradogs.framework.core.netty.events.MainLoopEvent; +import com.paradogs.framework.core.utils.EventUtils; + +/** + * @author: yumi + * @date: 2023/11/6 17:35 + * @Description: TODO + */ +public abstract class AbstractMsgConsumer extends QueueConsumerThread { + + private MainLoopEvent mainLoopEvent = new MainLoopEvent(); + + @Override + public void loop() { + EventUtils.publishEvent(mainLoopEvent); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/MsgDefaultConsumer.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/MsgDefaultConsumer.java new file mode 100644 index 0000000000000000000000000000000000000000..c02f50d701b06f7b9ec8ddb90972463ac734310c --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/MsgDefaultConsumer.java @@ -0,0 +1,26 @@ +package com.paradogs.framework.core.queue; + +import com.paradogs.framework.core.msg.ByteData; +import com.paradogs.framework.core.utils.MsgUtils; +import lombok.extern.slf4j.Slf4j; + +import java.lang.reflect.InvocationTargetException; + +/** + * @author: yumi + * @date: 2023/7/28 9:27 + * @Description: 消息处理线程 + */ +@Slf4j +public class MsgDefaultConsumer extends AbstractMsgConsumer { + + /** + * 消息处理 + * @param msg + */ + @Override + public void handle(ByteData msg) throws InvocationTargetException, IllegalAccessException { + MsgUtils.adapterHandle(msg); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/PRQueueHolder.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/PRQueueHolder.java new file mode 100644 index 0000000000000000000000000000000000000000..bf36baa30c31e63b78bbf6e2283fb40cfc289f77 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/PRQueueHolder.java @@ -0,0 +1,104 @@ +package com.paradogs.framework.core.queue; + +import com.paradogs.framework.core.msg.ByteData; +import com.paradogs.framework.core.msg.PRMsg; +import com.paradogs.framework.core.utils.RandomUtils; +import com.paradogs.framework.core.utils.SpringUtils; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @author: yumi + * @date: 2023/7/27 14:22 + * @Description: 队列管理器 + */ +@Slf4j +public class PRQueueHolder implements ApplicationRunner { + + @Getter + @Setter + @Autowired + private QueueProperties queueProperties; + + /** + * 队列集合 + * 待优化:有一些业务不需要保证顺序性,可以创建一个队列由多个消费者消费,不需要一对一,提高效率 + */ + private static Map> consumerMap = new ConcurrentHashMap<>(); + + /** + * 初始化相关队列 + * ps: 这里要用自定义方法不能用构造器,因为构造器 properties 还未注入完成(空指针) + */ + public void init() { + initQueue(QueueType.MAIN, queueProperties.getMainSize()); + } + + public void initQueue(QueueType type, int size) { + if (size == 0) {return;} + for (int i = 0; i < size; i++) { + // 原型模式 getBean + QueueConsumerThread queueConsumer = SpringUtils.getBean(type.queueConsumerThreadClass); + if (i == 0) { // 第一个线程额外负责处理循环检测 + queueConsumer.setLoop(true); + } + queueConsumer.setKey(type.key + "-" + (i + 1)); + queueConsumer.start(); + if (!consumerMap.containsKey(type)) { + consumerMap.put(type, new ArrayList<>()); + } + consumerMap.get(type).add(queueConsumer); + } + } + + @Override + public void run(ApplicationArguments args) throws Exception { + this.init(); + } + + public enum QueueType { + + /** + * 消息逻辑处理 + */ + MAIN(AbstractMsgConsumer.class, "MainMsgConsumer"); + + /** + * 消费对象类型 + */ + private Class queueConsumerThreadClass; + /** + * 线程描述标识符 + */ + private String key; + + QueueType(Class queueConsumerThreadClass, String key) { + this.queueConsumerThreadClass = queueConsumerThreadClass; + this.key = key; + } + } + + public static void putMsg(QueueType queueType, ByteData msg) throws InterruptedException { + balance(consumerMap.get(queueType), msg).produce(msg); + } + + /** + * 待优化,负载均衡规则,可以换成一个接口 + * @return + */ + private static QueueConsumerThread balance(List list, ByteData msg) { + if (msg.getMsgHeader().getPId() == null) { + return list.get(0); + } + return list.get((int) (msg.getMsgHeader().getPId() % list.size())); + } + + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/QueueConsumerThread.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/QueueConsumerThread.java new file mode 100644 index 0000000000000000000000000000000000000000..09ca20fd688afbe53e73ae079346d6b7f9b8df7a --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/QueueConsumerThread.java @@ -0,0 +1,127 @@ +package com.paradogs.framework.core.queue; + +import com.paradogs.framework.core.exceptions.GlobalExceptionDispatch; +import com.paradogs.framework.core.utils.SpringUtils; +import com.paradogs.framework.core.utils.StringUtils; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; + +import java.lang.reflect.InvocationTargetException; +import java.time.LocalDateTime; +import java.util.UUID; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; + +/** + * @author: yumi + * @date: 2023/7/27 13:38 + * @Description: TODO + */ +@Slf4j +public abstract class QueueConsumerThread extends Thread { + + /** + * 处理的队列,一个消费者对应一个队列 + */ + @Setter + @Getter + private BlockingQueue queue; + + /** + * 启动时间 + */ + @Getter + private LocalDateTime startTime; + + /** + * 处理的消息总数 + */ + @Getter + private Long handleCount; + + /** + * 唯一标识 + */ + @Setter + private String key; + + /** + * 是否执行 Tick 循环,相同类型线程只要一个循环即可 + */ + @Getter + @Setter + private boolean isLoop = false; + + /** + * 全局异常处理转发器 + */ + private GlobalExceptionDispatch globalExceptionDispatch = SpringUtils.getBean(GlobalExceptionDispatch.class); + + + public QueueConsumerThread() { + this.startTime = LocalDateTime.now(); + this.handleCount = 0L; + this.queue = new LinkedBlockingQueue<>(); + } + + /** + * 处理消息 + */ + public abstract void handle(T msg) throws InvocationTargetException, IllegalAccessException; + + /** + * 循环检测 + */ + public abstract void loop(); + + @Override + public final void run() { + + log.info("[{}] queueConsumerThread start success", getKey()); + + while (true) { + + if (isLoop) { + // 循环检测事件 + loop(); + } + + T msg = queue.poll(); + + // 消息队列为空时,等待一段时间再处理,如果有消息则处理完直接找下一个 + if (msg == null) { + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } finally { + continue; + } + + } + + this.handleCount++; + try { + handle(msg); + } catch (Exception e) { + // 转发到全局异常处理 + globalExceptionDispatch.forward(e); + } + + } + + } + + public String getKey() { + if (StringUtils.isBlank(this.key)) { + this.key = this.getClass().getSimpleName() + "-" + UUID.randomUUID().toString().replace("-", ""); + } + return this.key; + } + + public Boolean produce(T data) { + return this.queue.add(data); + } + +} diff --git a/mini-gate/src/main/java/com/mini/gate/config/ClientConfig.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/QueueProperties.java similarity index 44% rename from mini-gate/src/main/java/com/mini/gate/config/ClientConfig.java rename to paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/QueueProperties.java index ebc657bf66c482147993e238a4ff891227a1a855..798e84c96e96aca1d0d6ad974af59528632982d4 100644 --- a/mini-gate/src/main/java/com/mini/gate/config/ClientConfig.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/queue/QueueProperties.java @@ -1,21 +1,24 @@ -package com.mini.gate.config; +package com.paradogs.framework.core.queue; -import com.mini.gate.client.ClientCfg; import lombok.Data; +import lombok.extern.slf4j.Slf4j; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; -import java.util.List; - /** * @author: yumi - * @date: 2023/2/25 10:00 + * @date: 2023/7/27 19:16 * @Description: TODO */ -@Component -@ConfigurationProperties(prefix = "netty") @Data -public class ClientConfig { +@Slf4j +@Component +@ConfigurationProperties("paradogs.queue") +public class QueueProperties { + + /** + * 消息逻辑处理队列 + */ + private int mainSize = 1; - private List clients; } diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/strategy/GateLoadBalancerStrategy.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/strategy/GateLoadBalancerStrategy.java new file mode 100644 index 0000000000000000000000000000000000000000..66dd328d726aa3685d6398fad14679a4e6a4dcb3 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/strategy/GateLoadBalancerStrategy.java @@ -0,0 +1,16 @@ +package com.paradogs.framework.core.strategy; + +import com.paradogs.framework.core.netty.server.PRConnection; + +import java.util.List; + +/** + * @author: yumi + * @date: 2023/11/13 13:47 + * @Description: 负载均衡策略 + */ +public interface GateLoadBalancerStrategy { + + PRConnection choose(List nodes); + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/strategy/GateRandomLoadBalancerStrategy.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/strategy/GateRandomLoadBalancerStrategy.java new file mode 100644 index 0000000000000000000000000000000000000000..b8f7f274abf201b048aa161024b344fa1fafd3b2 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/strategy/GateRandomLoadBalancerStrategy.java @@ -0,0 +1,22 @@ +package com.paradogs.framework.core.strategy; + +import com.paradogs.framework.core.netty.server.PRConnection; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Random; + +/** + * @author: yumi + * @date: 2023/11/13 13:50 + * @Description: TODO + */ +@Component("gatewayRandomLoadBalancerStrategy") +public class GateRandomLoadBalancerStrategy implements GateLoadBalancerStrategy { + @Override + public PRConnection choose(List nodes) { + if (nodes.size() == 0) {return null;} + Random random = new Random(); + return nodes.get(random.nextInt(nodes.size())); + } +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/BeanUtils.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/BeanUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..17af28b4a0aa69eeb50356f3cf1b7b13906df0f8 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/BeanUtils.java @@ -0,0 +1,48 @@ +package com.paradogs.framework.core.utils; + + +import lombok.extern.slf4j.Slf4j; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author: yumi + * @date: 2023/2/16 21:17 + * @Description: TODO + */ +@Slf4j +public class BeanUtils extends org.springframework.beans.BeanUtils { + + + /** + * 包装类和基本数据类型映射 + */ + private static Map, Class> primitiveAndWrap; + + private static Map, Class> wrapAndPrimitive; + + static { + primitiveAndWrap = new HashMap<>(); + wrapAndPrimitive = new HashMap<>(); + + primitiveAndWrap.put(byte.class, Byte.class); + primitiveAndWrap.put(short.class, Short.class); + primitiveAndWrap.put(int.class, Integer.class); + primitiveAndWrap.put(long.class, Long.class); + primitiveAndWrap.put(float.class, Float.class); + primitiveAndWrap.put(double.class, Double.class); + primitiveAndWrap.put(char.class, Character.class); + primitiveAndWrap.put(boolean.class, Boolean.class); + + primitiveAndWrap.entrySet().forEach(entry -> wrapAndPrimitive.put(entry.getValue(), entry.getKey())); + + + } + + public static V copy(T source, V target) { + copyProperties(source, target); + return target; + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/EventUtils.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/EventUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..48035a13d81696b17027b3cbf9522ab8afb28ce7 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/EventUtils.java @@ -0,0 +1,54 @@ +package com.paradogs.framework.core.utils; + +import com.paradogs.framework.core.annoations.rpc.PRRPCResponseResolver; +import com.paradogs.framework.core.msg.PRMsg; +import org.springframework.context.ApplicationEvent; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.ApplicationEventPublisherAware; +import org.springframework.stereotype.Component; + +import java.util.concurrent.CompletableFuture; + +/** + * @author: yumi + * @date: 2023/7/26 17:34 + * @Description: TODO + */ +@Component +public class EventUtils implements ApplicationEventPublisherAware { + + + + /** + * Spring 事件发布机制 + */ + private static ApplicationEventPublisher applicationEventPublisher; + + /** + * 发布事件 + * ps: 订阅事件由 Spring 的 @EventListener 注册 + * @param event + */ + public static void publishEvent(ApplicationEvent event) { + applicationEventPublisher.publishEvent(event); + } + + /** + * 监听一次 + * @param route + * @param cgMsgId + * @param returnClass + * @param promise + * @param + */ + public static void on4Once(String route, Long cgMsgId, Class returnClass, CompletableFuture promise) { + SpringUtils.getBean(PRRPCResponseResolver.class).on4Once(route, cgMsgId, returnClass, promise); + } + + + @Override + public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) { + EventUtils.applicationEventPublisher = applicationEventPublisher; + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/IPUtils.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/IPUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..145d60e5fb82755a9692f1c86db36edafb232a10 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/IPUtils.java @@ -0,0 +1,31 @@ +package com.paradogs.framework.core.utils; + +import io.netty.channel.Channel; + +import java.net.InetAddress; +import java.net.InetSocketAddress; + +/** + * @author: yumi + * @date: 2023/11/24 16:28 + * @Description: TODO + */ +public class IPUtils { + + public static InetSocketAddress getAddr(Channel channel) { + return (InetSocketAddress) channel.remoteAddress(); + } + + public static String getHost(Channel channel) { + InetSocketAddress addr = getAddr(channel); + if (addr == null) {return null;} + return addr.getHostString(); + } + + public static Integer getPort(Channel channel) { + InetSocketAddress addr = getAddr(channel); + if (addr == null) {return null;} + return addr.getPort(); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/MsgUtils.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/MsgUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..f23cf76833322f8495e4e575c85cdace2c30155c --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/MsgUtils.java @@ -0,0 +1,224 @@ +package com.paradogs.framework.core.utils; + +import com.paradogs.framework.core.annoations.request.PRMsgMappingHolder; +import com.paradogs.framework.core.events.RPCRequestEvent; +import com.paradogs.framework.core.exceptions.MessageException; +import com.paradogs.framework.core.msg.PRMsgContextHolder; +import com.paradogs.framework.core.msg.route.MsgMapping; +import com.paradogs.framework.core.netty.PRConnHolder; +import com.paradogs.framework.core.netty.server.PRConnection; +import com.paradogs.framework.core.netty.server.ServerProperties; +import com.paradogs.framework.core.msg.PRMsg; +import com.paradogs.framework.core.msg.ByteData; +import com.paradogs.framework.core.msg.MsgHeader; +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; +import sun.misc.GC; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Stream; + + +/** + * @author: yumi + * @date: 2023/7/27 10:33 + * @Description: TODO + */ +@Slf4j +@Component +public class MsgUtils { + + private static ServerProperties serverProperties; + + @Autowired + public void setServerProperties(ServerProperties serverProperties) { + MsgUtils.serverProperties = serverProperties; + } + + /** + * 发起 rpc 请求 + * @param event + */ + @EventListener(RPCRequestEvent.class) + public void onRPCRequestEvent(RPCRequestEvent event) { + // 发起请求 + PRMsg msg = send(event.getRoute(), event.getData()); + // 开启响应监听 + EventUtils.on4Once(event.getRoute(), msg.getMsgHeader().getId(), event.getReturnClass(), event.getPromise()); + } + + /** + * 根据 route 适配执行对应的 Handler + * @param msg + * @throws InvocationTargetException + * @throws IllegalAccessException + */ + public static void adapterHandle(ByteData msg) throws InvocationTargetException, IllegalAccessException { + + MsgHeader header = msg.getMsgHeader(); + + // 获取映射 + MsgMapping mapping = PRMsgMappingHolder.getMsgMapping(RouteUtils.getPath(header.getRoute())); + if (mapping == null) { + log.warn("Not found Mapping Method, route: {}", RouteUtils.getPath(header.getRoute())); + return; + } + Class msgClass = PRMsgMappingHolder.getMsgMappingClass(RouteUtils.getPath(header.getRoute())); + + /** + * 执行对应 Handler 方法 + */ + Method method = mapping.getMethod(); + Object pdgController = SpringUtils.getBean(method.getDeclaringClass()); + + if (pdgController == null) { + log.error("Class not managed by Spring: {}", method.getDeclaringClass()); + return; + } + + /** + * 待优化:这里可以像 SpringMVC 一样,根据方法参数注入相关变量 + */ + if (mapping.isAsync()) { + /** + * 异步执行 + */ + PRAsync.run(() -> { + try { + Object result = method.invoke( + pdgController, + Stream.of(method.getParameterTypes()) + .map(type -> { + // 转换为参数类型传参 + if (type.isAssignableFrom(msgClass)) { + if (msgClass.isAssignableFrom(ByteData.class)) { + return msg; + } else { + // 传入 data 参数 + return ProtoUtils.decode(msg.getDataBytes(), msgClass); + } + } + return null; + }) + .toArray() + ); + /** + * 有返回结果时,自动将返回结果作为 GC 消息发送 + */ + if (method.getReturnType().equals(Void.TYPE)) { + return; + } + reply(header.getSendServer(), result, msg.getMsgHeader().getId(), PRMsgContextHolder.getChannel()); + } catch (Exception e) { + throw new MessageException(e); + } + }); + } else { + /** + * 同步执行(正常执行) + */ + Object result = method.invoke( + pdgController, + Stream.of(method.getParameterTypes()) + .map(type -> { + // 转换为参数类型传参 + if (type.isAssignableFrom(msgClass)) { + if (msgClass.isAssignableFrom(ByteData.class)) { + return msg; + } else { + // 传入 data 参数 + return ProtoUtils.decode(msg.getDataBytes(), msgClass); + } + } + return null; + }) + .toArray() + ); + /** + * 有返回结果时,自动将返回结果作为 GC 消息发送 + */ + if (method.getReturnType().equals(Void.TYPE)) { + return; + } + reply(header.getSendServer(), result, msg.getMsgHeader().getId(), PRMsgContextHolder.getChannel()); + } + + } + + /** + * 服务器之间发送消息 + * @param route 路由 + * @param data 数据 + * @return + */ + public static PRMsg send(String route, T data, Channel channel) { + PRMsg msg = new PRMsg(route, data); + channel.writeAndFlush(msg); + log.debug(">>>>> {}, {}", route, data); + return msg; + } + protected static PRMsg send(String route, T data) { + Channel channel = getChannel(RouteUtils.getServer(route)); + return send(route, data, channel); + } + + /** + * 服务器之间回复消息 + * @param server 目标服务器类型 + * @param data 数据 + * @param replyId 回复的消息 ID + */ + protected static void reply(String server, T data, Long replyId, Channel channel) { + // 返回消息 + MsgHeader header = new MsgHeader(); + header.setRoute(server + RouteUtils.SERVER_SEPARATOR + "_paradogs.callback"); + header.setReplyMsgId(replyId); + PRMsg gcMsg = new PRMsg(header, data); + // 发送 GC +// Channel channel = getChannel(server); + channel.writeAndFlush(gcMsg); + log.debug("[reply] >>>>> {}, {}", server, data); + } + + /** + * 转发消息: 发送到 Master 服,通过 Master 服转发 + * Gate 服不走这个方法 + * @param byteData 请求头 + byte 数据 + */ + public static void forward(ByteData byteData) { + PRMsg msg = new PRMsg(byteData.getMsgHeader(), byteData.getDataBytes()); + Channel channel = getChannel(byteData.getMsgHeader().getServer()); + channel.writeAndFlush(msg); + log.debug("[forward] >>>>> {}, {}", byteData.getMsgHeader().getRoute(), msg.getMsgData()); + } + + /** + * Gate 服转发消息: 特殊处理,直接发送到对应服 + */ + public static void gateRequest(String route, T data, Class returnClass, CompletableFuture promise) { + PRMsg msg = new PRMsg(route, data); + String server = RouteUtils.getServer(route); + PRConnection conn = PRConnHolder.getConn(server); + if (conn == null) { + throw new MessageException("Not Found Connection, server: " + server); + } + // 开启响应监听 + EventUtils.on4Once(route, msg.getMsgHeader().getId(), returnClass, promise); + conn.getChannel().writeAndFlush(msg); + log.debug("[request] >>>>> {}, {}", route, msg); + } + + protected static Channel getChannel(String server) { + PRConnection conn = PRConnHolder.getConn(serverProperties.isMaster() ? server : "master"); + if (conn == null) { + throw new MessageException("Not Found Connection, server: " + (serverProperties.isMaster() ? server : "master")); + } + return conn.getChannel(); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/PRAsync.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/PRAsync.java new file mode 100644 index 0000000000000000000000000000000000000000..849a5d4cceb64f11c8b6d31f06c7bf29ccf5db69 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/PRAsync.java @@ -0,0 +1,38 @@ +package com.paradogs.framework.core.utils; + +import com.paradogs.framework.core.exceptions.GlobalExceptionDispatch; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.task.AsyncTaskExecutor; + +import java.util.concurrent.CompletableFuture; +import java.util.function.Supplier; + +/** + * @author: yumi + * @date: 2023/11/16 13:32 + * @Description: TODO + */ +@Slf4j +public class PRAsync { + + private static AsyncTaskExecutor taskExecutor; + + @Autowired + public void setServerProperties(AsyncTaskExecutor taskExecutor) { + PRAsync.taskExecutor = taskExecutor; + } + + + public static CompletableFuture supply(Supplier supplier) { + return CompletableFuture.supplyAsync(supplier, taskExecutor).exceptionally(e -> { + SpringUtils.getBean(GlobalExceptionDispatch.class).forward(e); // 转发到全局异常 + throw new RuntimeException(e); // 中断回调 + }); + } + + public static CompletableFuture run(Runnable runnable) { + return CompletableFuture.runAsync(runnable, taskExecutor); + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/ProtoUtils.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/ProtoUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..29f0700405f2f1b21b83ab5964e4d21824a96d2a --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/ProtoUtils.java @@ -0,0 +1,73 @@ +package com.paradogs.framework.core.utils; + +import com.baidu.bjf.remoting.protobuf.Codec; +import com.baidu.bjf.remoting.protobuf.ProtobufProxy; + +import java.io.IOException; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @author: yumi + * @date: 2023/8/1 13:48 + * @Description: TODO + */ +public class ProtoUtils { + + /** + * 优化效率,避免每次都创建一个编解码器,享元模式? + * !! jprotobuf encode() 源码内部自带了缓存,所以其实不需要自己缓存了, + * 可以直接 ProtobufProxy.create(clz).encode() + */ + public static Map, Codec> codecMap = new ConcurrentHashMap<>(); + + /** + * jprotobuf 编码 + * @param obj + * @param + * @return + */ + public static byte[] encode(T obj) { + + if (obj == null) { + return new byte[0]; + } + + if (!codecMap.containsKey(obj.getClass())) { + codecMap.put(obj.getClass(), ProtobufProxy.create(obj.getClass())); + } + + try { + Codec codec = codecMap.get(obj.getClass()); + return codec.encode(obj); + } catch (IOException e) { + e.printStackTrace(); + } + return new byte[0]; + } + + /** + * jprotobuf 解码 + * @param bytes + * @param clz + * @param + * @return + */ + public static T decode(byte[] bytes, Class clz) { + + if (byte[].class.isAssignableFrom(clz)) { + return (T) bytes; + } + + if (!codecMap.containsKey(clz)) { + codecMap.put(clz, ProtobufProxy.create(clz)); + } + try { + return (T) codecMap.get(clz).decode(bytes); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/RandomUtils.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/RandomUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..896a9ae433bdcc3edd40b0f4fcff9341dc34f684 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/RandomUtils.java @@ -0,0 +1,15 @@ +package com.paradogs.framework.core.utils; + +import com.baomidou.mybatisplus.core.toolkit.IdWorker; + +/** + * @author: yumi + * @date: 2023/11/5 19:19 + * @Description: TODO + */ +public class RandomUtils { + + public static Long spawnSnowId() { + return IdWorker.getId(); + } +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/ReflectUtils.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/ReflectUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..c2190e77740715fdc28f69ca97ddaf8743913dfd --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/ReflectUtils.java @@ -0,0 +1,35 @@ +package com.paradogs.framework.core.utils; + +import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; + +/** + * @author: yumi + * @date: 2023/9/23 9:57 + * @Description: 反射工具类 + */ +public class ReflectUtils { + + /** + * 获取返回类中的泛型类型 + * @param method + * @return + */ + public static Class getGenericReturnType(Method method) { + // 获取方法的返回类型信息 + Type type = method.getGenericReturnType(); + // 判断返回类型是否为参数化类型(即带有泛型参数) + if (type instanceof ParameterizedType) { + // 获取泛型参数的实际类型 + Type typeArg = ((ParameterizedType) type).getActualTypeArguments()[0]; + // 判断实际类型是否为 Class 对象 + if (typeArg instanceof Class) { + // 将实际类型转换为 Class 对象 + return (Class) typeArg; + } + } + return null; + } + +} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/RouteUtils.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/RouteUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..ec6f1599e4b0d4a0ea1fb9f1fd928c60c95b8a24 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/RouteUtils.java @@ -0,0 +1,23 @@ +package com.paradogs.framework.core.utils; + +/** + * @author: yumi + * @date: 2023/8/15 16:07 + * @Description: 路由解析工具 + */ +public class RouteUtils { + + /** + * 服务名分隔符 + */ + public static final String SERVER_SEPARATOR = "|"; + + public static String getServer(String route) { + return route.substring(0, route.indexOf(RouteUtils.SERVER_SEPARATOR)); + } + + public static String getPath(String route) { + return route.substring(route.indexOf(RouteUtils.SERVER_SEPARATOR) + 1); + } + +} diff --git a/mini-common/src/main/java/com/mini/common/utils/SpringUtils.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/SpringUtils.java similarity index 61% rename from mini-common/src/main/java/com/mini/common/utils/SpringUtils.java rename to paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/SpringUtils.java index 66a4a0a22d639eddcc61b51e4589b9b7367a5d5f..3c5a93f9faaab37b84ce03b95895dce07b11df71 100644 --- a/mini-common/src/main/java/com/mini/common/utils/SpringUtils.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/SpringUtils.java @@ -1,29 +1,49 @@ -package com.mini.common.utils; +package com.paradogs.framework.core.utils; +import lombok.Getter; import org.springframework.aop.framework.AopContext; +import org.springframework.aop.support.AopUtils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.context.*; +import org.springframework.core.annotation.AnnotationUtils; import org.springframework.stereotype.Component; +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + /** * spring工具类 方便在非spring管理环境中获取bean * * @author ruoyi */ @Component -public final class SpringUtils implements BeanFactoryPostProcessor +public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware { /** Spring应用上下文环境 */ + @Getter private static ConfigurableListableBeanFactory beanFactory; + @Getter + private static ApplicationContext applicationContext; + + @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { SpringUtils.beanFactory = beanFactory; } + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringUtils.applicationContext = applicationContext; + } + /** * 获取对象 * @@ -52,6 +72,43 @@ public final class SpringUtils implements BeanFactoryPostProcessor return result; } + public static T getBean(Class clz, Object... args) throws BeansException + { + T result = (T) beanFactory.getBean(clz, args); + return result; + } + + public static Map getBeans(Class clz) throws BeansException + { + return SpringUtils.beanFactory.getBeansOfType(clz); + } + + public static Map getBeansWithAnnotation(Class clz) { + return SpringUtils.beanFactory.getBeansWithAnnotation(clz); + } + + /** + * 待优化:缓存 + */ + public static List getMethodsWithAnnotation(Class clz) { + List loopMethod = new ArrayList<>(); + for (Object bean : SpringUtils.getAllBeans().values()) { + for (Method method : AopUtils.getTargetClass(bean).getDeclaredMethods()) { + if (AnnotationUtils.findAnnotation(method, clz) != null) { + loopMethod.add(method); + } + } + } + return loopMethod; + } + + public static Map getAllBeans() throws BeansException + { + return beanFactory.getBeansOfType(Object.class); + } + + + /** * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true * @@ -107,8 +164,8 @@ public final class SpringUtils implements BeanFactoryPostProcessor * @return */ @SuppressWarnings("unchecked") - public static T getAopProxy(T invoker) - { + public static T getAopProxy(T invoker) { return (T) AopContext.currentProxy(); } + } diff --git a/mini-common/src/main/java/com/mini/common/utils/StringUtils.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/StringUtils.java similarity index 60% rename from mini-common/src/main/java/com/mini/common/utils/StringUtils.java rename to paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/StringUtils.java index 35beb041f19148a98d1ffea80fce70302d7f6882..76cac2e5beb5cfb9914cd2d6697de0a67f671554 100644 --- a/mini-common/src/main/java/com/mini/common/utils/StringUtils.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/StringUtils.java @@ -1,13 +1,12 @@ -package com.mini.common.utils; +package com.paradogs.framework.core.utils; -import static org.apache.logging.log4j.util.Strings.isBlank; /** * @author: yumi * @date: 2023/2/17 0:25 * @Description: TODO */ -public class StringUtils extends org.springframework.util.StringUtils { +public class StringUtils extends org.apache.commons.lang.StringUtils { public static String firstChar2UpperCase(String str) { if (isBlank(str)) {return "";} diff --git a/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/TimeUtils.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/TimeUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..1f0358cb171b3ad36d46a65c1c76c446b987b661 --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/TimeUtils.java @@ -0,0 +1,22 @@ +package com.paradogs.framework.core.utils; + +import lombok.extern.slf4j.Slf4j; + +import java.util.concurrent.TimeUnit; + +/** + * @author: yumi + * @date: 2023/8/26 9:55 + * @Description: TODO + */ +@Slf4j +public class TimeUtils { + + public static long calcDuration(long startTime, TimeUnit timeUnit) { + return TimeUnit.MILLISECONDS.convert(System.currentTimeMillis() - startTime, timeUnit); + } + public static long calcDuration(long startTime) { + return calcDuration(startTime, TimeUnit.MILLISECONDS); + } + +} diff --git a/mini-common/src/main/java/com/mini/common/utils/Wrap.java b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/Wrap.java similarity index 50% rename from mini-common/src/main/java/com/mini/common/utils/Wrap.java rename to paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/Wrap.java index 4cbe785982c801428a07091cbae780696ef66349..26e38a7fa2c75de210172e6f6d3a5dd4b275f9c3 100644 --- a/mini-common/src/main/java/com/mini/common/utils/Wrap.java +++ b/paradogs-framework/paradogs-framework-core/src/main/java/com/paradogs/framework/core/utils/Wrap.java @@ -1,11 +1,10 @@ -package com.mini.common.utils; +package com.paradogs.framework.core.utils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; /** * @author: yumi - * @date: 2023/2/18 15:20 + * @date: 2023/11/16 11:06 * @Description: TODO */ public class Wrap { @@ -13,9 +12,4 @@ public class Wrap { public static LambdaQueryWrapper lbq() { return new LambdaQueryWrapper<>(); } - - public static LambdaUpdateWrapper lbu() { - return new LambdaUpdateWrapper<>(); - } - } diff --git a/paradogs-framework/paradogs-framework-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/paradogs-framework/paradogs-framework-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000000000000000000000000000000000000..b752b005628c8ba9261468c549f6e5a7ca99139c --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,10 @@ +com.paradogs.framework.core.CoreStarter + +com.paradogs.framework.core.strategy.GateRandomLoadBalancerStrategy + +com.paradogs.framework.core.config.UtilsConfiguration + + + + + diff --git a/paradogs-framework/paradogs-framework-core/src/main/resources/config/application.yml b/paradogs-framework/paradogs-framework-core/src/main/resources/config/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/paradogs-framework/paradogs-framework-core/src/main/resources/mapper/PlayerMapper.xml b/paradogs-framework/paradogs-framework-core/src/main/resources/mapper/PlayerMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..2b716d7d05466b40df05a79a75f9c84794fb484b --- /dev/null +++ b/paradogs-framework/paradogs-framework-core/src/main/resources/mapper/PlayerMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/paradogs-framework/paradogs-framework-gate-starter/pom.xml b/paradogs-framework/paradogs-framework-gate-starter/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..f2fa10b1d8d88a534477f231e605a9f966513300 --- /dev/null +++ b/paradogs-framework/paradogs-framework-gate-starter/pom.xml @@ -0,0 +1,26 @@ + + + + paradogs-framework + com.paradogs + 0.0.1 + + 4.0.0 + + paradogs-framework-gate-starter + + + 8 + 8 + + + + + com.paradogs + paradogs-framework-core + + + + \ No newline at end of file diff --git a/paradogs-framework/paradogs-framework-gate-starter/src/main/java/com/paradogs/framework/gate/PRGateServerMsgHandler.java b/paradogs-framework/paradogs-framework-gate-starter/src/main/java/com/paradogs/framework/gate/PRGateServerMsgHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..cc2b042660ebd582e461b2d80f1bf245fd470f44 --- /dev/null +++ b/paradogs-framework/paradogs-framework-gate-starter/src/main/java/com/paradogs/framework/gate/PRGateServerMsgHandler.java @@ -0,0 +1,88 @@ +package com.paradogs.framework.gate; + +import com.paradogs.framework.core.events.PlayerClientActiveEvent; +import com.paradogs.framework.core.events.PlayerClientInactiveEvent; +import com.paradogs.framework.core.msg.ByteData; +import com.paradogs.framework.core.msg.PRMsgContextHolder; +import com.paradogs.framework.core.netty.PRConnHolder; +import com.paradogs.framework.core.netty.server.PRAbServerMsgHandler; +import com.paradogs.framework.core.netty.server.PRConnection; +import com.paradogs.framework.core.netty.server.ServerProperties; +import com.paradogs.framework.core.utils.EventUtils; +import com.paradogs.framework.core.utils.IPUtils; +import com.paradogs.framework.core.utils.MsgUtils; +import com.paradogs.framework.core.utils.StringUtils; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.concurrent.CompletableFuture; + +/** + * @author: yumi + * @date: 2023/8/8 8:56 + * @Description: TODO + */ +@Slf4j +@Component +@ChannelHandler.Sharable +public class PRGateServerMsgHandler extends PRAbServerMsgHandler { + + @Autowired + private ServerProperties serverProperties; + + @Override + protected void setProps(ChannelHandlerContext ctx, ByteData msg) { + super.setProps(ctx, msg); + if (StringUtils.isBlank(msg.getMsgHeader().getSendServer())) { + msg.getMsgHeader().setSendServer("gate"); + } + } + + /** + * 转发玩家消息 + * @param msg + * @throws Exception + */ + @Override + protected void processMsg(ByteData msg) throws Exception { + if (msg.getMsgHeader().getServer().equals(serverProperties.getType())) { + MsgUtils.adapterHandle(msg); + return; + } + // 收到回复消息后返回给玩家 + // 待优化:如果 logic 方法没有返回值,这里会无限等待,内存溢出 + CompletableFuture promise = new CompletableFuture<>(); + promise.thenAccept(data -> { + MsgUtils.send("player", data, PRMsgContextHolder.getChannel()); + }); + MsgUtils.gateRequest(msg.getMsgHeader().getRoute(), msg.getDataBytes(), byte[].class, promise); + } + + /** + * 连接建立事件 + * @param ctx + * @throws Exception + */ + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + super.channelActive(ctx); + EventUtils.publishEvent(new PlayerClientActiveEvent(ctx)); + log.info("PlayerClient connect: {}", IPUtils.getAddr(ctx.channel())); + } + + /** + * 连接断开事件 + * @param ctx + * @throws Exception + */ + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + super.channelInactive(ctx); + EventUtils.publishEvent(new PlayerClientInactiveEvent(ctx)); + log.info("PlayerClient disconnect: {}", IPUtils.getAddr(ctx.channel())); + } + +} diff --git a/paradogs-framework/paradogs-framework-gate-starter/src/main/java/com/paradogs/framework/gate/PRGateStarter.java b/paradogs-framework/paradogs-framework-gate-starter/src/main/java/com/paradogs/framework/gate/PRGateStarter.java new file mode 100644 index 0000000000000000000000000000000000000000..18179a2210e00fd4f2732e189c245a630bba288f --- /dev/null +++ b/paradogs-framework/paradogs-framework-gate-starter/src/main/java/com/paradogs/framework/gate/PRGateStarter.java @@ -0,0 +1,19 @@ +package com.paradogs.framework.gate; + +import com.paradogs.framework.core.annoations.request.PRRequestInterfaceSelector; +import com.paradogs.framework.core.annoations.rpc.PRRPCProxyBeanImportSelector; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +/** + * @author: yumi + * @date: 2023/8/28 17:53 + * @Description: TODO + */ +@Import({ + PRRPCProxyBeanImportSelector.class, + PRRequestInterfaceSelector.class +}) +@Configuration +public class PRGateStarter { +} diff --git a/paradogs-framework/paradogs-framework-gate-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/paradogs-framework/paradogs-framework-gate-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000000000000000000000000000000000000..b2b15e76983114abbcff2222df08cbbe70f058b4 --- /dev/null +++ b/paradogs-framework/paradogs-framework-gate-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.paradogs.framework.gate.PRGateServerMsgHandler \ No newline at end of file diff --git a/paradogs-framework/paradogs-framework-gate-starter/src/main/resources/config/application.yml b/paradogs-framework/paradogs-framework-gate-starter/src/main/resources/config/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..cfc460e9f4b289a18f0b81ab212f825eff7bac38 --- /dev/null +++ b/paradogs-framework/paradogs-framework-gate-starter/src/main/resources/config/application.yml @@ -0,0 +1,6 @@ +paradogs: + queue: + enable: false + main-size: 1 + db-size: 1 + diff --git a/paradogs-framework/paradogs-framework-master-starter/pom.xml b/paradogs-framework/paradogs-framework-master-starter/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..4683623531ff8d53c7440e53dcabb00edf265c45 --- /dev/null +++ b/paradogs-framework/paradogs-framework-master-starter/pom.xml @@ -0,0 +1,26 @@ + + + + paradogs-framework + com.paradogs + 0.0.1 + + 4.0.0 + + paradogs-framework-master-starter + + + 8 + 8 + + + + + com.paradogs + paradogs-framework-core + + + + \ No newline at end of file diff --git a/paradogs-framework/paradogs-framework-master-starter/src/main/java/com/paradogs/framework/master/MasterStarter.java b/paradogs-framework/paradogs-framework-master-starter/src/main/java/com/paradogs/framework/master/MasterStarter.java new file mode 100644 index 0000000000000000000000000000000000000000..d567e9a977ccddb3914734920a23fed7477ef180 --- /dev/null +++ b/paradogs-framework/paradogs-framework-master-starter/src/main/java/com/paradogs/framework/master/MasterStarter.java @@ -0,0 +1,20 @@ +package com.paradogs.framework.master; + +import com.paradogs.framework.core.annoations.request.PRRequestInterfaceSelector; +import com.paradogs.framework.core.annoations.rpc.PRRPCProxyBeanImportSelector; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +/** + * @author: yumi + * @date: 2023/8/26 17:56 + * @Description: TODO + */ +@Import({ + PRRPCProxyBeanImportSelector.class, + PRRequestInterfaceSelector.class +}) +@Configuration +public class MasterStarter { + +} diff --git a/paradogs-framework/paradogs-framework-master-starter/src/main/java/com/paradogs/framework/master/controller/MasterController.java b/paradogs-framework/paradogs-framework-master-starter/src/main/java/com/paradogs/framework/master/controller/MasterController.java new file mode 100644 index 0000000000000000000000000000000000000000..df8f5e05028493922bd3845e5ce92bc7dd7b080c --- /dev/null +++ b/paradogs-framework/paradogs-framework-master-starter/src/main/java/com/paradogs/framework/master/controller/MasterController.java @@ -0,0 +1,60 @@ +package com.paradogs.framework.master.controller; + +import com.paradogs.framework.common.pojo.gc.GCAllocGateway; +import com.paradogs.framework.core.annoations.request.PRController; +import com.paradogs.framework.core.annoations.request.PRMsgMapping; +import com.paradogs.framework.core.msg.GCAck; +import com.paradogs.framework.core.msg.PRMsgContextHolder; +import com.paradogs.framework.core.netty.PRConnHolder; +import com.paradogs.framework.core.netty.server.PRConnection; +import com.paradogs.framework.core.netty.server.ServerProperties; +import com.paradogs.framework.core.strategy.GateLoadBalancerStrategy; +import com.paradogs.framework.core.utils.IPUtils; +import com.paradogs.framework.core.utils.StringUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; + +import java.net.InetSocketAddress; +import java.util.List; + +/** + * @author: yumi + * @date: 2023/8/24 17:45 + * @Description: TODO + */ +@Slf4j +@PRController +@PRMsgMapping("_master") +public class MasterController { + + @Autowired + private GateLoadBalancerStrategy strategy; + + /** + * 服务器注册和初始化 + * @param properties + */ + @PRMsgMapping("init") + public void init(ServerProperties properties) { + // 初始化连接的服务器信息(建立连接后,服务器主动发送自己的信息) + PRConnHolder.initConn(PRMsgContextHolder.getChannel(), properties); + log.info("Server connection init success: {}|{}, {}", properties.getType(), properties.getKey(), IPUtils.getAddr(PRMsgContextHolder.getChannel())); + } + + /** + * 玩家登录成功后,登录服申请一个网关供玩家连接 + * @return + */ + @PRMsgMapping("allocGate") + public GCAllocGateway allocGate() { + List gates = PRConnHolder.getConns("gate"); + PRConnection conn = strategy.choose(gates); + if (conn == null) { + GCAck.fail(); + } + + InetSocketAddress addr = IPUtils.getAddr(conn.getChannel()); + return new GCAllocGateway(addr.getHostString(), conn.getProperties().getPort()); + } + +} diff --git a/paradogs-framework/paradogs-framework-master-starter/src/main/java/com/paradogs/framework/master/netty/MasterMsgConsumer.java b/paradogs-framework/paradogs-framework-master-starter/src/main/java/com/paradogs/framework/master/netty/MasterMsgConsumer.java new file mode 100644 index 0000000000000000000000000000000000000000..834c4e9c47c5bedb2f92d5474505b426e3702c32 --- /dev/null +++ b/paradogs-framework/paradogs-framework-master-starter/src/main/java/com/paradogs/framework/master/netty/MasterMsgConsumer.java @@ -0,0 +1,51 @@ +package com.paradogs.framework.master.netty; + +import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass; +import com.paradogs.framework.common.pojo.cg.CGPrepareLogin; +import com.paradogs.framework.core.msg.ByteData; +import com.paradogs.framework.core.msg.MsgHeader; +import com.paradogs.framework.core.netty.server.ServerProperties; +import com.paradogs.framework.core.queue.AbstractMsgConsumer; +import com.paradogs.framework.core.utils.MsgUtils; +import com.paradogs.framework.core.utils.ProtoUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +import java.lang.reflect.InvocationTargetException; +import java.util.Arrays; + +/** + * @author: yumi + * @date: 2023/11/6 17:27 + * @Description: TODO + */ +@Slf4j +@Primary // 不好控制 bean 注册顺序, @onMissingBean 会失败(@Scope 会导致该注解失效),使用 @Primary 覆盖默认类 +@Component +public class MasterMsgConsumer extends AbstractMsgConsumer { + + + @Autowired + private ServerProperties serverProperties; + + @Override + public void handle(ByteData byteData) throws InvocationTargetException, IllegalAccessException { + + MsgHeader header = byteData.getMsgHeader(); + + /** + * 发给自己的消息直接处理 + */ + if (header.getServer().equals(serverProperties.getType())) { + MsgUtils.adapterHandle(byteData); + return; + } + + /** + * 其他 RPC 消息通过 Master 进行转发 + */ + MsgUtils.forward(byteData); + } +} diff --git a/paradogs-framework/paradogs-framework-master-starter/src/main/java/com/paradogs/framework/master/netty/MasterMsgHandler.java b/paradogs-framework/paradogs-framework-master-starter/src/main/java/com/paradogs/framework/master/netty/MasterMsgHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..034a85705003bde48e59eb7a5b0fc47ebe012981 --- /dev/null +++ b/paradogs-framework/paradogs-framework-master-starter/src/main/java/com/paradogs/framework/master/netty/MasterMsgHandler.java @@ -0,0 +1,67 @@ +package com.paradogs.framework.master.netty; + +import com.paradogs.framework.core.events.ServerClientActiveEvent; +import com.paradogs.framework.core.events.ServerClientInactiveEvent; +import com.paradogs.framework.core.msg.ByteData; +import com.paradogs.framework.core.msg.MsgHeader; +import com.paradogs.framework.core.netty.PRConnHolder; +import com.paradogs.framework.core.netty.server.PRAbServerMsgHandler; +import com.paradogs.framework.core.netty.server.PRConnection; +import com.paradogs.framework.core.queue.PRQueueHolder; +import com.paradogs.framework.core.utils.EventUtils; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +/** + * @author: yumi + * @date: 2023/11/23 17:34 + * @Description: TODO + */ +@Slf4j +@Primary +@Component +@ChannelHandler.Sharable +public class MasterMsgHandler extends PRAbServerMsgHandler { + + @Override + protected void processMsg(ByteData msg) throws Exception { + PRQueueHolder.putMsg(PRQueueHolder.QueueType.MAIN, msg); + } + + @Override + protected void setProps(ChannelHandlerContext ctx, ByteData msg) { + super.setProps(ctx, msg); + MsgHeader header = msg.getMsgHeader(); + PRConnection conn = PRConnHolder.getConn(ctx.channel()); + if (conn != null) { + header.setSendServer(conn.getType()); // 设置发送服标识 + } + } + + /** + * 连接建立事件 + * @param ctx + * @throws Exception + */ + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + super.channelActive(ctx); + EventUtils.publishEvent(new ServerClientActiveEvent(ctx)); + } + + /** + * 连接断开事件 + * @param ctx + * @throws Exception + */ + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + super.channelInactive(ctx); + PRConnection conn = PRConnHolder.removeConn(ctx.channel()); + log.info("Client disconnect: {}", conn); + EventUtils.publishEvent(new ServerClientInactiveEvent(ctx)); + } +} diff --git a/paradogs-framework/paradogs-framework-master-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/paradogs-framework/paradogs-framework-master-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000000000000000000000000000000000000..bcdd9fd343bd7f1ed32aea2f7966def60e20be22 --- /dev/null +++ b/paradogs-framework/paradogs-framework-master-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,13 @@ +com.paradogs.framework.master.controller.MasterController + +com.paradogs.framework.master.netty.MasterMsgHandler + +com.paradogs.framework.master.netty.MasterMsgConsumer + +com.paradogs.framework.master.MasterStarter + + + + + + diff --git a/paradogs-framework/paradogs-framework-master-starter/src/main/resources/config/application.yml b/paradogs-framework/paradogs-framework-master-starter/src/main/resources/config/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/paradogs-framework/paradogs-framework-server-starter/pom.xml b/paradogs-framework/paradogs-framework-server-starter/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..90a9061908dd225cb705ddd1c63e8161cf45102a --- /dev/null +++ b/paradogs-framework/paradogs-framework-server-starter/pom.xml @@ -0,0 +1,26 @@ + + + + paradogs-framework + com.paradogs + 0.0.1 + + 4.0.0 + + paradogs-framework-server-starter + + + 8 + 8 + + + + + com.paradogs + paradogs-framework-core + + + + \ No newline at end of file diff --git a/paradogs-framework/paradogs-framework-server-starter/src/main/java/com/paradogs/framework/server/ServerMsgConsumer.java b/paradogs-framework/paradogs-framework-server-starter/src/main/java/com/paradogs/framework/server/ServerMsgConsumer.java new file mode 100644 index 0000000000000000000000000000000000000000..15f94e1dd9b7ad5d1c200b6d0c541394593a7f2f --- /dev/null +++ b/paradogs-framework/paradogs-framework-server-starter/src/main/java/com/paradogs/framework/server/ServerMsgConsumer.java @@ -0,0 +1,36 @@ +package com.paradogs.framework.server; + +import com.paradogs.framework.core.msg.ByteData; +import com.paradogs.framework.core.netty.server.ServerProperties; +import com.paradogs.framework.core.queue.AbstractMsgConsumer; +import com.paradogs.framework.core.utils.MsgUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +import java.lang.reflect.InvocationTargetException; + +/** + * @author: yumi + * @date: 2023/11/13 10:30 + * @Description: TODO + */ +@Slf4j +@Primary +@Component +public class ServerMsgConsumer extends AbstractMsgConsumer { + + + @Autowired + private ServerProperties serverProperties; + + @Override + public void handle(ByteData byteData) throws InvocationTargetException, IllegalAccessException { + + /** + * 找到对应的 Controller 处理 + */ + MsgUtils.adapterHandle(byteData); + } +} diff --git a/paradogs-framework/paradogs-framework-server-starter/src/main/java/com/paradogs/framework/server/ServerMsgHandler.java b/paradogs-framework/paradogs-framework-server-starter/src/main/java/com/paradogs/framework/server/ServerMsgHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..2ba426ed7b11976c0188938c993637c316a70c19 --- /dev/null +++ b/paradogs-framework/paradogs-framework-server-starter/src/main/java/com/paradogs/framework/server/ServerMsgHandler.java @@ -0,0 +1,22 @@ +package com.paradogs.framework.server; + +import com.paradogs.framework.core.msg.ByteData; +import com.paradogs.framework.core.netty.server.PRAbServerMsgHandler; +import com.paradogs.framework.core.queue.PRQueueHolder; +import io.netty.channel.ChannelHandler; +import org.springframework.stereotype.Component; + +/** + * @author: yumi + * @date: 2023/11/29 10:41 + * @Description: TODO + */ +@Component +@ChannelHandler.Sharable +public class ServerMsgHandler extends PRAbServerMsgHandler { + + @Override + protected void processMsg(ByteData msg) throws Exception { + PRQueueHolder.putMsg(PRQueueHolder.QueueType.MAIN, msg); + } +} diff --git a/paradogs-framework/paradogs-framework-server-starter/src/main/java/com/paradogs/framework/server/ServerStarter.java b/paradogs-framework/paradogs-framework-server-starter/src/main/java/com/paradogs/framework/server/ServerStarter.java new file mode 100644 index 0000000000000000000000000000000000000000..59567199733a1dd4a8b2e8e803ee3bcf7ab82075 --- /dev/null +++ b/paradogs-framework/paradogs-framework-server-starter/src/main/java/com/paradogs/framework/server/ServerStarter.java @@ -0,0 +1,19 @@ +package com.paradogs.framework.server; + +import com.paradogs.framework.core.annoations.request.PRRequestInterfaceSelector; +import com.paradogs.framework.core.annoations.rpc.PRRPCProxyBeanImportSelector; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +/** + * @author: yumi + * @date: 2023/11/13 10:27 + * @Description: TODO + */ +@Import({ + PRRPCProxyBeanImportSelector.class, + PRRequestInterfaceSelector.class +}) +@Configuration +public class ServerStarter { +} diff --git a/paradogs-framework/paradogs-framework-server-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/paradogs-framework/paradogs-framework-server-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000000000000000000000000000000000000..c79e73a566fca44654ed37cff742210296e5ee09 --- /dev/null +++ b/paradogs-framework/paradogs-framework-server-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,8 @@ +com.paradogs.framework.server.ServerStarter + +com.paradogs.framework.server.ServerMsgConsumer + +com.paradogs.framework.server.ServerMsgHandler + + + diff --git a/paradogs-framework/paradogs-framework-server-starter/src/main/resources/config/application.yml b/paradogs-framework/paradogs-framework-server-starter/src/main/resources/config/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/paradogs-framework/pom.xml b/paradogs-framework/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..cefa03056d1c57f83172e79807f9c0abdaa1a1eb --- /dev/null +++ b/paradogs-framework/pom.xml @@ -0,0 +1,21 @@ + + + + paradogs + com.paradogs + 0.0.1 + + 4.0.0 + paradogs-framework + pom + + paradogs-framework-core + paradogs-framework-gate-starter + paradogs-framework-server-starter + paradogs-framework-master-starter + paradogs-framework-common + + + \ No newline at end of file diff --git a/paradogs-generator/pom.xml b/paradogs-generator/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..f363f258e2ed69fe0e992fd49327ea844b3ea9e4 --- /dev/null +++ b/paradogs-generator/pom.xml @@ -0,0 +1,42 @@ + + + + paradogs + com.paradogs + 0.0.1 + + 4.0.0 + + paradogs-generator + + + 8 + 8 + + + + + com.baomidou + mybatis-plus-generator + + + com.baomidou + mybatis-plus-boot-starter + + + mysql + mysql-connector-java + + + org.freemarker + freemarker + + + com.paradogs + paradogs-framework-core + + + + \ No newline at end of file diff --git a/paradogs-generator/src/main/java/com/paradogs/generator/DBEntityGenerator.java b/paradogs-generator/src/main/java/com/paradogs/generator/DBEntityGenerator.java new file mode 100644 index 0000000000000000000000000000000000000000..c1cde167f3a1f02cdd9937ec3daf662f1681a87e --- /dev/null +++ b/paradogs-generator/src/main/java/com/paradogs/generator/DBEntityGenerator.java @@ -0,0 +1,59 @@ +package com.paradogs.generator; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.*; +import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; +import com.paradogs.framework.common.entity.base.BaseEntity; + +import java.util.Collections; + +/** + * @author: yumi + * @date: 2023/11/14 10:00 + * @Description: TODO + */ +public class DBEntityGenerator { + public static void main(String[] args) { + String test = System.getProperty("user.dir") + "/src/main/java"; + FastAutoGenerator.create("jdbc:mysql://120.26.15.12:3306/paradogs_game?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8", + "root", + "ningensama122") + .globalConfig(builder -> { + builder.author("yumi") // 设置作者 + .commentDate("yyyy-MM-dd") + .outputDir(System.getProperty("user.dir") + "/paradogs-framework/paradogs-framework-common/src/main/java") // 设置输出目录为项目的src/main/java目录 + .fileOverride(); // 覆盖已生成文件 + }) + .packageConfig(builder -> { + builder.parent("com.paradogs.framework.common") // 设置父包名 + .entity("entity") + .service("dao") // 输出包路径 + .serviceImpl("dao.impl") + .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/paradogs-framework/paradogs-framework-common/src/main/resources/mapper")); // 设置mapper.xml生成路径 + }) + .strategyConfig(builder -> { + builder +// .addInclude("table_name") // 设置需要生成的表名,如果要生成所有表,可以省略此行 + .addTablePrefix("g_") + .entityBuilder() + .enableLombok() + .superClass(BaseEntity.class) + .enableTableFieldAnnotation() // 增加 @TableField + .idType(IdType.AUTO) + .serviceBuilder() + .formatServiceFileName("%sDao") // 去掉 'I' 前缀,Service 改为 Dao 名称 + .formatServiceImplFileName("%sDaoImpl") + .build(); + }) + .templateConfig(builder -> { + builder +// .disable(TemplateType.SERVICE) // 禁用 Service 生成 +// .disable(TemplateType.SERVICE_IMPL) // 禁用 ServiceImpl 生成 + .disable(TemplateType.CONTROLLER); // 禁用 Controller 生成 + + }) + .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } +} diff --git a/paradogs-generator/src/main/java/com/paradogs/generator/ProtobufIDLGenerator.java b/paradogs-generator/src/main/java/com/paradogs/generator/ProtobufIDLGenerator.java new file mode 100644 index 0000000000000000000000000000000000000000..f0b9243a0194eaf06ce789db20829b1b00b3f669 --- /dev/null +++ b/paradogs-generator/src/main/java/com/paradogs/generator/ProtobufIDLGenerator.java @@ -0,0 +1,22 @@ +package com.paradogs.generator; + +import com.paradogs.generator.utils.GeneratorUtils; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import java.nio.file.Paths; + +/** + * @author: yumi + * @date: 2023/11/18 10:23 + * @Description: 通过 java 实体类生成 .proto 文件 + */ +@SpringBootApplication +public class ProtobufIDLGenerator { + public static void main(String[] args) { + SpringApplication.run(ProtobufIDLGenerator.class, args); + String outDir = Paths.get(System.getProperty("user.dir"), "proto").toString(); + String[] scanPackages = new String[]{"com.paradogs.framework.core"}; + GeneratorUtils.generatorIDL(outDir, scanPackages); + } +} diff --git a/paradogs-generator/src/main/java/com/paradogs/generator/idl/ProtoEntityScanner.java b/paradogs-generator/src/main/java/com/paradogs/generator/idl/ProtoEntityScanner.java new file mode 100644 index 0000000000000000000000000000000000000000..4a7463ad6a16c9420e64eaaa6380fedbe53d51c7 --- /dev/null +++ b/paradogs-generator/src/main/java/com/paradogs/generator/idl/ProtoEntityScanner.java @@ -0,0 +1,56 @@ +package com.paradogs.generator.idl; + +import com.baidu.bjf.remoting.protobuf.annotation.ProtobufClass; +import com.paradogs.framework.core.annoations.base.BaseScanner; +import com.paradogs.framework.core.msg.PRMsg; +import com.paradogs.framework.core.msg.MsgHeader; +import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.core.type.classreading.MetadataReader; + +import java.io.IOException; +import java.util.Arrays; + +/** + * @author: yumi + * @date: 2023/8/25 15:54 + * @Description: TODO + */ +public class ProtoEntityScanner extends BaseScanner { + + public ProtoEntityScanner(BeanDefinitionRegistry registry) { + super(registry); + } + + /** + * 是否为可添加 bean,返回接口类型 + * 可以用 TypeFilter 加,但 TypeFilter 只能指定类,未知的动态类无法处理 + * hasMetaAnnotation() 可以读到注解中的注解信息,hasAnnotation() 只能读取当前 Class 上的注解 + * @param metadataReader + * @return + * @throws IOException + */ + @Override + protected boolean isCandidateComponent(MetadataReader metadataReader) { + Class[] excludeClasses = new Class[]{MsgHeader.class}; // 手动添加指定类 + if (Arrays.stream(excludeClasses).anyMatch(clz -> metadataReader.getClassMetadata().getClassName().equals(clz.getName()))) { + return true; + } + + return metadataReader.getAnnotationMetadata().hasAnnotation(ProtobufClass.class.getName()); + } + + /** + * @param beanDefinition 一个 bean + * @return + */ + @Override + protected boolean isCandidateComponent(AnnotatedBeanDefinition beanDefinition) { + return true; + } + + @Override + public boolean isNeedRegister() { + return true; + } +} diff --git a/paradogs-generator/src/main/java/com/paradogs/generator/idl/ProtoEntitySelector.java b/paradogs-generator/src/main/java/com/paradogs/generator/idl/ProtoEntitySelector.java new file mode 100644 index 0000000000000000000000000000000000000000..8ba2127540db8b61302b6e8555cbc09d49cef9a9 --- /dev/null +++ b/paradogs-generator/src/main/java/com/paradogs/generator/idl/ProtoEntitySelector.java @@ -0,0 +1,76 @@ +package com.paradogs.generator.idl; + + +import com.baidu.bjf.remoting.protobuf.ProtobufIDLGenerator; +import com.paradogs.framework.core.annoations.base.BaseScanner; +import com.paradogs.framework.core.annoations.base.BaseSelector; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.support.DefaultListableBeanFactory; +import org.springframework.stereotype.Component; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.HashSet; +import java.util.Set; + +/** + * @author: yumi + * @date: 2023/11/18 10:55 + * @Description: TODO + */ +@Slf4j +@Component +public class ProtoEntitySelector extends BaseSelector { + + @Setter + private String generatorDir; + + @Setter + private String[] scanPackages; + + private Set> cachedTypes = new HashSet<>(); + + private Set> cachedEnumTypes = new HashSet<>(); + + @Override + public String[] getScanPackages() { + return scanPackages; + } + + @Override + public BaseScanner getScanner(BeanFactory beanFactory) { + return new ProtoEntityScanner((DefaultListableBeanFactory) beanFactory); + } + + /** + * 生成 .proto 文件 + * @param beanDefinition + */ + @Override + public void handle(BeanDefinition beanDefinition) { + try { + Class beanClass = Class.forName(beanDefinition.getBeanClassName()); + String filename = beanClass.getSimpleName() + ".proto"; // 文件名 +// String code = ProtobufIDLGenerator.getIDL(beanClass, cachedTypes, cachedEnumTypes); // 文件内容 + String code = ProtobufIDLGenerator.getIDL(beanClass); + Path targetDirectory = Paths.get(this.generatorDir); + Path filePath = targetDirectory.resolve(filename); + + // 确保目录存在 + Files.createDirectories(targetDirectory); + + // 写入内容到文件 + Files.write(filePath, code.getBytes()); + log.info("生成文件: {}/{}", generatorDir, filename); + + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/paradogs-generator/src/main/java/com/paradogs/generator/utils/GeneratorUtils.java b/paradogs-generator/src/main/java/com/paradogs/generator/utils/GeneratorUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..23f40856da46bfdf56814188dba5eb5aa9dca9a5 --- /dev/null +++ b/paradogs-generator/src/main/java/com/paradogs/generator/utils/GeneratorUtils.java @@ -0,0 +1,28 @@ +package com.paradogs.generator.utils; + +import com.paradogs.framework.core.utils.SpringUtils; +import com.paradogs.generator.idl.ProtoEntitySelector; +import org.springframework.stereotype.Component; + +/** + * @author: yumi + * @date: 2023/11/18 11:21 + * @Description: TODO + */ +public class GeneratorUtils { + + /** + * 生成 .proto 文件 + * @param outDir .proto 文件输出路径 + * @param scanPackages 扫描包路径 + */ + public static void generatorIDL(String outDir, String[] scanPackages) { + // 要从 Spring 中获取,才会注入 beanFactory + ProtoEntitySelector selector = SpringUtils.getBean(ProtoEntitySelector.class); + selector.setGeneratorDir(outDir); + selector.setScanPackages(scanPackages); + selector.scanAndHandle(); + + + } +} diff --git a/paradogs-generator/src/main/resources/application.yml b/paradogs-generator/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..88ad834d0ad00fa9f4d66d6fab87c7bf67afc829 --- /dev/null +++ b/paradogs-generator/src/main/resources/application.yml @@ -0,0 +1,11 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://120.26.15.12:3306/paradogs_game?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8 + username: root + password: ningensama122 + +logging: + level: + # 指定的包路径 + com.paradogs: debug \ No newline at end of file diff --git a/pom.xml b/pom.xml index a98875f6dea48773722392260b5f88d26e858f7a..d870ec376c5716556de032bedc18a8c3eb67dc74 100644 --- a/pom.xml +++ b/pom.xml @@ -4,22 +4,20 @@ 4.0.0 pom - mini-game - mini-common - mini-login - mini-gate - mini-client + paradogs-framework + paradogs-demo + paradogs-generator - - org.springframework.boot - spring-boot-starter-parent - 2.2.5.RELEASE - - - com.mini - mini - 0.0.1-SNAPSHOT - mini + + + + + + + com.paradogs + paradogs + 0.0.1 + paradogs Demo project for Spring Boot 8 @@ -28,6 +26,14 @@ + + + org.springframework.boot + spring-boot-dependencies + 2.7.7 + pom + import + io.netty netty-all @@ -46,13 +52,6 @@ 2.0.22 - - - com.google.protobuf - protobuf-java - 3.12.2 - - org.springframework.boot spring-boot-devtools @@ -67,10 +66,28 @@ 3.5.3.1 + + com.baomidou + mybatis-plus-generator + 3.5.3.1 + + + + com.baomidou + mybatis-plus-annotation + 3.5.3.1 + + + + com.baomidou + mybatis-plus-core + 3.5.3.1 + + mysql mysql-connector-java - 5.1.38 + 8.0.23 @@ -80,21 +97,69 @@ - com.mini - mini-common - 0.0.1-SNAPSHOT + org.freemarker + freemarker + 2.3.31 + + + + com.paradogs + paradogs-framework + 0.0.1 + + + + com.paradogs + paradogs-login + 0.0.1 + + + + com.paradogs + paradogs-game + 0.0.1 + + + + + com.baidu + jprotobuf + 2.4.5 + + + + + + + + + com.paradogs + paradogs-framework-core + 0.0.1 + + + + com.paradogs + paradogs-framework-server-starter + 0.0.1 + + + + com.paradogs + paradogs-framework-gate-starter + 0.0.1 - com.mini - mini-login - 0.0.1-SNAPSHOT + com.paradogs + paradogs-framework-master-starter + 0.0.1 - com.mini - mini-game - 0.0.1-SNAPSHOT + com.paradogs + paradogs-framework-common + 0.0.1 diff --git a/proto/BaseMsg_CmdVersion.proto b/proto/BaseMsg_CmdVersion.proto new file mode 100644 index 0000000000000000000000000000000000000000..3cc42552964871bb90973aef5af51b6ed7b726b6 --- /dev/null +++ b/proto/BaseMsg_CmdVersion.proto @@ -0,0 +1,12 @@ +syntax="proto3"; +package com.paradogs.framework.core.msg; +option java_outer_classname = "BaseMsg_CmdVersion$$ByJProtobuf"; +message BaseMsg_CmdVersion { + MsgHeader msgHeader=1; +} +message MsgHeader { + int64 id=1; + string route=2; + string sendServer=3; + int64 replyMsgId=4; +} diff --git a/proto/Connection.proto b/proto/Connection.proto new file mode 100644 index 0000000000000000000000000000000000000000..eb88e08cd2cbeb68034293be91418b4358afb6b1 --- /dev/null +++ b/proto/Connection.proto @@ -0,0 +1,19 @@ +syntax="proto3"; +package com.paradogs.framework.core.pojo; +option java_outer_classname = "Connection$$ByJProtobuf"; +message Connection { + Logger log=1; + Channel channel=2; + State state=3; + string targetServer=4; + string targetName=5; +} +enum State { +WAIT_INIT=0; +RUNNING=1; +STOP=2; +} + message Logger { +} +message Channel { +} diff --git a/proto/MsgHeader.proto b/proto/MsgHeader.proto new file mode 100644 index 0000000000000000000000000000000000000000..362dbd48e665ea0198bf95feb9ca0d41696f0b62 --- /dev/null +++ b/proto/MsgHeader.proto @@ -0,0 +1,9 @@ +syntax="proto3"; +package com.paradogs.framework.core.msg; +option java_outer_classname = "MsgHeader$$ByJProtobuf"; +message MsgHeader { + int64 id=1; + string route=2; + string sendServer=3; + int64 replyMsgId=4; +} diff --git a/proto/Player.proto b/proto/Player.proto new file mode 100644 index 0000000000000000000000000000000000000000..21466b680a1a1f5b26ab4e8598fb160b5b02bcc0 --- /dev/null +++ b/proto/Player.proto @@ -0,0 +1,9 @@ +syntax="proto3"; +package com.paradogs.framework.core.pojo.entity; +option java_outer_classname = "Player$$ByJProtobuf"; +message Player { + int64 serialVersionUID=1; + int64 uid=2; + string account=3; + string pwd=4; +} diff --git a/proto/R.proto b/proto/R.proto new file mode 100644 index 0000000000000000000000000000000000000000..792e51d27d23b139712cfecb418d8144fc44c53f --- /dev/null +++ b/proto/R.proto @@ -0,0 +1,10 @@ +syntax="proto3"; +package com.paradogs.framework.core.msg; +option java_outer_classname = "R$$ByJProtobuf"; +message R { + int32 code=1; + string msg=2; + Object data=3; +} +message Object { +} diff --git a/proto/ServerProperties.proto b/proto/ServerProperties.proto new file mode 100644 index 0000000000000000000000000000000000000000..81d078d1a15b9e694fd358951de015069ac3925a --- /dev/null +++ b/proto/ServerProperties.proto @@ -0,0 +1,9 @@ +syntax="proto3"; +package com.paradogs.framework.core.netty.server; +option java_outer_classname = "ServerProperties$$ByJProtobuf"; +message ServerProperties { + int32 port=1; + string type=2; + string key=3; + bool master=4; +}