使用GoLang开发游戏服务器(三)

使用GoLang开发游戏服务器(三)

Request请求消息的封装定义

  • 新增IRequest接口
type IRequest interface {
	GetConnection() IConnection
	GetData() []byte
}
  • 新增Request结构体
type Request struct {
	Conn ziface.IConnection
	Data []byte
}
func (r *Request) GetConnection() ziface.IConnection {
	return r.Conn
}
func (r *Request) GetData() []byte {
	return r.Data
}

Router模块的定义

  • 新增IRouter接口
type IRouter interface {
	PreHandle(request IRequest)
	Handle(request IRequest)
	PostHandle(request IRequest)
}
  • 新增Router结构体(用于被其它类继承使用)
type BaseRouter struct {
}

func (b *BaseRouter) PreHandle(request ziface.IRequest) {

}

func (b *BaseRouter) Handle(request ziface.IRequest) {

}

func (b *BaseRouter) PostHandle(request ziface.IRequest) {

}

框架继承Router模块

  • 在server中新增
    在这里插入图片描述
  • 新增方法,传入Router
  • 将原本写死的回调函数取消,通过Router的抽象类在外部传入
func (s *Server) AddRouter(router ziface.IRouter) {
	s.Router = router
}

在这里插入图片描述

  • 在Connection中修改方法
    在这里插入图片描述

测试

  • 目录结构
    在这里插入图片描述
  • 在新的zinxV0.3中添加新的测试Server和Client(和之前一样不需要改变)
type PingRouter struct {
	znet.BaseRouter
}

func (p *PingRouter) PreHandle(request ziface.IRequest) {
	fmt.Println("Call PreHandle...")
	_, err := request.GetConnection().GetTcpConnection().Write([]byte("before ping..."))
	if err != nil {
		fmt.Println("PreHandle Error:", err)
	}
}
func (p *PingRouter) Handle(request ziface.IRequest) {
	fmt.Println("Call Handle...")
	_, err := request.GetConnection().GetTcpConnection().Write([]byte("ping...ping...ping..."))
	if err != nil {
		fmt.Println("Handle Error:", err)
	}
}
func (p *PingRouter) PostHandle(request ziface.IRequest) {
	fmt.Println("Call PostHandle...")
	_, err := request.GetConnection().GetTcpConnection().Write([]byte("after ping..."))
	if err != nil {
		fmt.Println("PostHandle Error:", err)
	}
}

func main() {
	s := znet.NewServer("[zinxV0.3]")
	s.AddRouter(&PingRouter{})
	s.Serve()
}
  • 测试完成,但是发现又黏包的现象,需要之后重构
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值