当前位置: 首页 > news >正文

做联盟 网站 跳转 防止垃圾外链搜狗搜图

做联盟 网站 跳转 防止垃圾外链,搜狗搜图,wordpress 被发文章,作图在线制作导航:从零开始手写mmo游戏从框架到爆炸(零)—— 导航-CSDN博客 上一章我们完成了netty服务启动的相关抽象(https://blog.csdn.net/money9sun/article/details/136025471),这一章我们再新增一个全…

导航:从零开始手写mmo游戏从框架到爆炸(零)—— 导航-CSDN博客          

 上一章我们完成了netty服务启动的相关抽象(https://blog.csdn.net/money9sun/article/details/136025471),这一章我们再新增一个全局的服务启动类,方便后续扩展。

服务启动

新增的两个类如下:

定义一个接口IServer  

public interface IServer {/*** 服务启动* @throws Exception*/void start() throws Exception;/*** 服务关闭* @throws Exception*/void stop() throws Exception;/*** 服务重启* @throws Exception*/void restart() throws Exception;}

定义实现类 BasicServer

import com.loveprogrammer.base.factory.ServerChannelFactory;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFutureListener;/*** @ClassName BasicServer* @Description  网络服务启动实现* @Author admin* @Date 2024/2/4 16:25* @Version 1.0*/
public class BasicServer implements IServer{Channel acceptorChannel;@Overridepublic void start() throws Exception {acceptorChannel = ServerChannelFactory.createAcceptorChannel();acceptorChannel.closeFuture().sync();}@Overridepublic void stop() throws Exception {if(acceptorChannel != null) {acceptorChannel.close().addListener(ChannelFutureListener.CLOSE);}}@Overridepublic void restart() throws Exception {stop();start();}
}

 启动类修改:

        // 启动类启动try {IServer server = new BasicServer();server.start();} catch (Exception e) {LOGGER.error( "服务器启动失败",e);}

网络事件监听器

        创建一个类,用于监听网络的变化,创建一个接口INetworkEventListener,里面包含3个方法,onConnected/onDisconnected/onExceptionCaught。依然创建在core组件中

public interface INetworkEventListener {/*** 连接建立** @param ctx ChannelHandlerContext*/void onConnected(ChannelHandlerContext ctx);/*** 连接断开* * @param ctx ChannelHandlerContext*/void onDisconnected(ChannelHandlerContext ctx);/*** 异常发生* * @param ctx ChannelHandlerContext* * @param throwable 异常*/void onExceptionCaught(ChannelHandlerContext ctx, Throwable throwable);}

  监听器实现类 NetworkListener:

package com.loveprogrammer.base.network.support;import com.loveprogrammer.base.network.listener.INetworkEventListener;
import io.netty.channel.ChannelHandlerContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class NetworkListener implements INetworkEventListener {protected static final Logger logger = LoggerFactory.getLogger(NetworkListener.class);@Overridepublic void onConnected(ChannelHandlerContext ctx) {logger.info("建立连接");}@Overridepublic void onDisconnected(ChannelHandlerContext ctx) {logger.info("建立断开");}@Overridepublic void onExceptionCaught(ChannelHandlerContext ctx, Throwable throwable) {logger.warn("异常发生", throwable);}
}

然后我们要修改TcpServerStringInitializer

public class TcpServerStringInitializer  extends ChannelInitializer<SocketChannel> {@Overrideprotected void initChannel(SocketChannel ch) {ChannelPipeline pipeline = ch.pipeline();pipeline.addLast("framer",new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter()));pipeline.addLast("decoder", new StringDecoder());pipeline.addLast("encoder", new StringEncoder());INetworkEventListener listener = new NetworkListener();pipeline.addLast(new TcpMessageStringHandler(listener));}}

TcpMessageStringHandler.java 修改如下

package com.loveprogrammer.base.network.channel.tcp.str;import com.loveprogrammer.base.network.listener.INetworkEventListener;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** @ClassName TcpMessageStringHandler* @Description tcp消息处理类* @Author admin* @Date 2024/2/4 15:16* @Version 1.0*/
public class TcpMessageStringHandler extends SimpleChannelInboundHandler<String> {private static final Logger logger = LoggerFactory.getLogger(TcpMessageStringHandler.class);private final INetworkEventListener listener;public TcpMessageStringHandler(INetworkEventListener listener) {this.listener = listener;}@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable throwable) {listener.onExceptionCaught(ctx,throwable);}@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {super.channelRead(ctx, msg);}@Overrideprotected void channelRead0(ChannelHandlerContext ctx, String msg) {logger.info("数据内容:data=" + msg);String result = "我是服务器,我收到了你的信息:" + msg;result += "\r\n";ctx.writeAndFlush(result);}@Overridepublic void channelActive(ChannelHandlerContext ctx) throws Exception {listener.onConnected(ctx);}@Overridepublic void channelInactive(ChannelHandlerContext ctx) throws Exception {listener.onDisconnected(ctx);}
}

上一章:

从零开始手写mmo游戏从框架到爆炸(二)— 核心组件抽离与工厂模式创建-CSDN博客

下一章:

从零开始手写mmo游戏从框架到爆炸(四)— session session-CSDN博客

 全部源码详见:

gitee : eternity-online: 多人在线mmo游戏 - Gitee.com

分支:step-03

参考:

java游戏服务器开发: https://blog.csdn.net/cmqwan/category_7690685.html

http://www.zhongyajixie.com/news/61234.html

相关文章:

  • 网络营销软文是什么广州宣布5条优化措施
  • java做网站开发成本高seo首页排名优化
  • 织梦 电影网站 模板网站首页布局设计模板
  • 企业网站的主要功能免费建站平台
  • 建设部职称网站最近的国际新闻大事
  • 宝塔 wordpress 404成都seo推广员
  • 开发公司拿地付出让金还有付拆迁款北京seo专员
  • 如何优化网站导航网站的营销推广
  • 网站页尾版权第三波疫情将全面大爆发
  • asp.net微信网站如何制作一个个人网站
  • 在国外做电商网站有哪些关键词优化网站排名
  • 江苏省建设招标网站网络营销师报考条件
  • 个人工作室的网站线上营销推广渠道
  • 网站开发使用的工具类sem优化策略
  • 做酒招代理的网站广告类的网站
  • 做动画视频的网站有哪些焊工培训内容
  • 系统网站界面设计免费网站友情链接
  • 盐城市住房城乡建设网站长沙seo网站排名优化公司
  • 趣头条自媒体平台老铁seo外链工具
  • 软件开发培训机构课程百度seo怎么样优化
  • 微商手机网站设计公司友情链接怎么弄
  • 网站开发工作分解结构wbs广告网络推广
  • 做网站站长一年能赚多少钱seo和sem
  • iis 默认网站 删除免费网站申请注册
  • 贵阳市做网站的公司aso推广优化
  • 做网站怎么找公司seo案例分析
  • 阿坝网站设计seo包括什么
  • 制作企业网站怎么报价种子搜索神器下载
  • 济南网络平台设计网站优化公司大家好
  • 防城港做网站的线下营销推广方式有哪些