Zinx-V0.2 链接模块和request模块

Zinx-V0.2
链接模块

链接的封装和业务的绑定

属性

原生套接字 net.Conn

链接ID uint32

当前的conn是否是关闭状态isClosed bool

与当前链接绑定的客户端业务

方法
  1. 启动链接:当链接模块进行,读写操作。
   //先进行读业务
   go c.StartReader
   //再进行写业务
   
  1. 处理读业务的Reader方法,调用已经注册好的Handle方法
   func (c *Connection) StartReader() {
   
   
   	defer c.Stop()
   
   	for {
   		buf := make([]byte, 512)
   		cnt, err := c.Conn.Read(buf)
   		if err != nil {
   			fmt.Println("recv fub err ", err)
   			continue
   		}
   		
   		//回显
   		if err := c.handleAPI(c.Conn, buf, cnt); err != nil {
   			fmt.Println("ConnID")
   		}
   	}
   }
  1. 停止链接:关闭套接字/做一些资源回收
  2. 获取链接ID
  3. 获取链接的原生socket套接字
  4. 查看对端客户端的IP和端口
  5. 发送数据的方法Send
Request模块
属性

链接

数据

数据长度

方法

得到数据长度方法

得到当前请求的链接

得到链接的数据

抽象层
package ziface

/*
 抽象 IRequest 一次性请求的数据封装
 */

 type IRequest interface {
 	//得到当前的请求的链接
 	GetConnection() IConnection

 	//得到链接的数据
 	GetData() []byte

 	//得到链接的长度
 	GetDataLen() int
 }
实现层
package net

import "zinx/ziface"

type Request struct {
	//链接信息
	conn ziface.IConnection
	//数据内容
	data []byte
	//数据长度
	len int
}

func NewReqeust(conn ziface.IConnection, data []byte, len int) ziface.IRequest {
	req := &Request{
		conn:conn,
		data:data,
		len:len,
	}

	return req
}
//得到当前的请求的链接
func(r *Request) GetConnection() ziface.IConnection {
	return r.conn
}

//得到链接的数据
func(r *Request) GetData() []byte {
	return r.data
}

//得到链接的长度
func(r *Request)  GetDataLen() int {
	return r.len
}
	//将当前一次性得到的对端客户端请求的数据 封装成一个Request
	req := NewReqeust(c, buf, cnt)

	//将数据 传递给我们 定义好的Handle Callback方法
	if err := c.handleAPI(req); err != nil {
		fmt.Println("ConnID", c.ConnID, "Handle is error", err)
		break
业务层
func CallBackBusi(request ziface.IRequest) error {
	//回显业务
	fmt.Println("【conn Handle】 CallBack..")
	c := request.GetConnection().GetTCPConnection()
	buf := request.GetData()
	cnt := request.GetDataLen()
	if _, err := c.Write(buf[:cnt]);err !=nil {
		fmt.Println("write back err ", err)
		return err
	}

	return nil
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值