Files
4566704 96c63fb153 feat(spmux): 自 go-hua 迁入单端口多路复用并解耦日志依赖
- go-hua/log 已弃用: *log.Logger 参数改为两方法接口 spmux.Logger
  (*logrus.Logger 天然满足), 传 nil 静默(logErrorf/logDebugf 判空)
- 协议识别改用 zogo/httpprobe; 测试与例程同步适配
- 附测试、examples/spmux 例程(含 Logger 适配演示)与包 README
2026-09-20 12:37:10 +08:00

73 lines
1.5 KiB
Go

package spmux
import (
"bufio"
"net"
"time"
)
// PortConn 复用器分发出来的连接,协议识别时窥探的数据保留在缓冲区中
type PortConn struct {
conn net.Conn
reader *bufio.Reader
}
// newPortConn 包装原始连接
func newPortConn(conn net.Conn) *PortConn {
c := &PortConn{
conn: conn,
}
c.reader = bufio.NewReaderSize(conn, 0x1000)
return c
}
// Peek 窥探数据
func (p *PortConn) Peek(n int) ([]byte, error) {
return p.reader.Peek(n)
}
// Buffered 从当前缓冲区读取的字节数
func (p *PortConn) Buffered() int {
return p.reader.Buffered()
}
// Read 读取数据(先读出缓冲区中已窥探的数据)
func (p *PortConn) Read(b []byte) (n int, err error) {
return p.reader.Read(b)
}
// Write 写入数据
func (p *PortConn) Write(b []byte) (n int, err error) {
return p.conn.Write(b)
}
// Close 关闭连接
func (p *PortConn) Close() error {
return p.conn.Close()
}
// LocalAddr 返回本地网络地址
func (p *PortConn) LocalAddr() net.Addr {
return p.conn.LocalAddr()
}
// RemoteAddr 返回对端网络地址
func (p *PortConn) RemoteAddr() net.Addr {
return p.conn.RemoteAddr()
}
// SetDeadline 设置读写超时时间
func (p *PortConn) SetDeadline(t time.Time) error {
return p.conn.SetDeadline(t)
}
// SetReadDeadline 设置读超时时间
func (p *PortConn) SetReadDeadline(t time.Time) error {
return p.conn.SetReadDeadline(t)
}
// SetWriteDeadline 设置写超时时间
func (p *PortConn) SetWriteDeadline(t time.Time) error {
return p.conn.SetWriteDeadline(t)
}