上节我们写个server主类,那么发现什么事情都干不了,是的,我们还没有做任何的业务处理。

接着我们开始写处理客户端连接,发送接收数据的类ServerHandler。

public class ServerHandler extends ChannelHandlerAdapter{
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception //当客户端连上服务器的时候会触发此函数
{
System.out.println("clinet:" + ctx.channel().id() + " join server");
}
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception//当客户端断开连接的时候触发函数
{
System.out.println("clinet:" + ctx.channel().id() + " leave server");
//User.onlineUser.remove(LoginDispatch.getInstance().user);
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception//当客户端发送数据到服务器会触发此函数
{
/*SocketModel message = (SocketModel) msg;
switch (message.getType()) {
case TypeProtocol.TYPE_LOGIN:
LoginDispatch.getInstance().dispatch(ctx, message);
break;
case TypeProtocol.TYPE_WIZARD:
WizardDispatch.getInstance().dispatch(ctx, message);
break;
case TypeProtocol.TYPE_USER:
UserDispatch.getInstance().dispatch(ctx, message);
break;
case TypeProtocol.TYPE_BATTLE:
BattleDispatch.getInstance().dispatch(ctx, message);
default:
break;
}
/*
            这里我先把代码注释掉,现在还没讲到
*/
        */
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception
{
//cause.printStackTrace();
}
}

  写完服务器主要的业务处理类,接着我们要把这个类的对象添加到服务器Channel的pipeline中。

在之前我们写的GameServer中,添加

ch.pipeline().addLast(new ServerHandler());
ServerBootstrap b = new ServerBootstrap();//server启动管理配置
b.group(bossGroup, workGroup)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG, 1024)//最大客户端连接数为1024
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new ServerHandler());
}
});

  

Netty游戏服务器二的更多相关文章

  1. Netty游戏服务器之一

    所谓磨刀不误砍柴工,所以在搭建netty游戏服务器之前,我们先要把要准备的东西做好. 首先进入netty的官网下载最新版本的netty的jar包,http://netty.io/downloads.h ...

  2. Netty构建游戏服务器(二)--Hello World

    一,准备工作 1,netty-all-4.1.5.Final.jar(官网下载) 2,eclipse 二,步骤概要 1,服务器开发 (1),创建Server类 该类是程序的主入口,有main方法,服务 ...

  3. Netty游戏服务器之六服务端登录消息处理

    客户端unity3d已经把消息发送到netty服务器上了,那么ServerHandler类的public void channelRead(ChannelHandlerContext ctx, Obj ...

  4. Netty游戏服务器之四protobuf编解码和黏包处理

    我们还没讲客户端怎么向服务器发送消息,服务器怎么接受消息. 在讲这个之前我们先要了解一点就是tcp底层存在粘包和拆包的机制,所以我们在进行消息传递的时候要考虑这个问题. 看了netty权威这里处理的办 ...

  5. Netty游戏服务器之三搭建Unity客户端

    既然已经写完了相关的服务器处理类,那么我们就来搭建客户端测试一下. 打开我们的unity3d,然后新建一个c#脚本,取名为MainClient. public class MainClient : M ...

  6. Netty游戏服务器之五Unity3d登陆消息

    今天我们来讲客户端Unity和服务器收发消息的具体过程. 首先,我们要在unity上搭建登陆界面的UI,这里呢,我用的是NGUI插件. 相信做过unity3d前端的都对这个非常的熟悉,最近官方的UGU ...

  7. Netty构建游戏服务器(一)--基本概念与原理

    一,Netty是什么 1,Netty是由 JBOSS提供的一个 java开源框架. 2,Netty是JAR包,一般使用ALL-IN-ONE的JAR包就可以开发了. 3,Netty不需要运行在Tomca ...

  8. Java游戏服务器搭建

    一.前言 此游戏服务器架构是一个单服的形式,也就是说所有游戏逻辑在一个工程里,没有区分登陆服务器.战斗服务器.世界服务器等.此架构已成功应用在了多款页游服务器 .在此框架中没有实现相关业务逻辑,只有简 ...

  9. FPS游戏服务器设计的问题 【转】

    一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称射击游戏),你是要用TCP呢还是要用UDP,说明理由 . 二.学习 这是两篇网上找到的文章,写非常不错. 当时笔试的时 ...

随机推荐

  1. 【LabVIEW技巧】你可以不懂OOP,却不能不懂封装

    前言 大多数写LabVIEW程序的工程师都不是一个纯软的工程师,很多做硬件的.做机械的.甚至学化学的也会学习LabVIEW. 由于主要重心不在软件,所以LabVIEW程序基本上能用行,也就得到入门容易 ...

  2. 20:django中的安全问题

    本节主要是讲解django中的安全特性,讲述django是如何应对网站一般面临的安全性问题 跨站点脚本(XXS)攻击 跨站点脚本攻击是指一个用户把客户端脚本注入到其他用户的浏览器中.通常是通过在数据库 ...

  3. 【DUBBO】dubbo的Router接口

    Router服务路由, 根据路由规则从多个Invoker中选出一个子集AbstractDirectory是所有目录服务实现的上层抽象, 它在list列举出所有invokers后,会在通过Router服 ...

  4. .net core 2.0学习记录(四):Middleware使用以及模拟构建Middleware(RequestDelegate)管道

    .net Core中没有继续沿用以前asp.net中的管道事件,而是开发了一个新的管道(Middleware): public class MiddlewareDemo { private reado ...

  5. Power BI连接至Mogo Altas Connector For BI

    我需要使用Power BI连接至Connector For BI ,现在Connect For BI存放在Mongo Atlas中,详细的来自于官方文档,https://docs.atlas.mong ...

  6. php 获取指定月份的开始结束时间

    /** * * 获取指定年月的开始和结束时间戳 * * @param int $y 年份 * @param int $m 月份 * @return array(开始时间,结束时间) */ functi ...

  7. 复选框的全选+全不选+ajax传递复选框的value值+后台接受复选框默认值

    1.html代码 <!--全选框/全不选--> <input type="checkbox" name="all" id="all& ...

  8. ubuntu安装wine

    1.安装源 sudo add-apt-repository ppa:wine/wine-builds sudo apt-get update 2.安装wine sudo apt-get install ...

  9. python笔记一:函数的参数

    1.默认参数 def fun(x,y,z=3): sum=x+y+z return sum fun(1,2) 2.可变参数(两种方法定义) def fun(n): sum=0 for i in n: ...

  10. nyoj 1007 GCD(数学题 欧拉函数的应用)

    GCD 描述 The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes written (a,b) ...