Ai
2 Star 3 Fork 0

YashanDB Community/yasrpc

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
gob.go 1.07 KB
一键复制 编辑 原始数据 按行查看 历史
huangsiyuan 提交于 2024-06-24 17:10 +08:00 . feat: add preInterceptor
package yasrpc
import (
"bufio"
"encoding/gob"
"io"
"net"
)
type GobCodec struct {
conn io.ReadWriteCloser
buf *bufio.Writer
dec *gob.Decoder
enc *gob.Encoder
}
var _ Codec = (*GobCodec)(nil)
func NewGobCodec(conn io.ReadWriteCloser) Codec {
buf := bufio.NewWriter(conn)
return &GobCodec{
conn: conn,
buf: buf,
dec: gob.NewDecoder(conn),
enc: gob.NewEncoder(buf),
}
}
func (c *GobCodec) ReadHeader(h *Header) error {
return c.dec.Decode(h)
}
func (c *GobCodec) ReadBody(body interface{}) error {
return c.dec.Decode(body)
}
func (c *GobCodec) Write(h *Header, body interface{}) (err error) {
defer func() {
_ = c.buf.Flush()
if err != nil {
_ = c.Close()
}
}()
if err := c.enc.Encode(h); err != nil {
return err
}
if err := c.enc.Encode(body); err != nil {
return err
}
return nil
}
func (c *GobCodec) Close() error {
return c.conn.Close()
}
func (c *GobCodec) ClientIp() string {
// 从conn中获取,如果出错的话,返回空
netConn, ok := c.conn.(net.Conn)
if !ok {
return ""
}
return netConn.RemoteAddr().String()
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/yashan_tech/yasrpc.git
git@gitee.com:yashan_tech/yasrpc.git
yashan_tech
yasrpc
yasrpc
master

搜索帮助