1
0
Fork 0
mirror of https://github.com/anyproto/any-sync.git synced 2025-06-10 18:10:54 +09:00
any-sync/net/transport/yamux/conn.go
Sergey Cherepanov ddc900a93c
yamux fixes
2023-06-06 20:45:18 +02:00

55 lines
1 KiB
Go

package yamux
import (
"context"
"github.com/anyproto/any-sync/net/connutil"
"github.com/anyproto/any-sync/net/transport"
"github.com/hashicorp/yamux"
"net"
"time"
)
func NewMultiConn(cctx context.Context, luConn *connutil.LastUsageConn, addr string, sess *yamux.Session) transport.MultiConn {
return &yamuxConn{
ctx: cctx,
luConn: luConn,
addr: addr,
Session: sess,
}
}
type yamuxConn struct {
ctx context.Context
luConn *connutil.LastUsageConn
addr string
*yamux.Session
}
func (y *yamuxConn) Open(ctx context.Context) (conn net.Conn, err error) {
if conn, err = y.Session.Open(); err != nil {
return
}
return
}
func (y *yamuxConn) LastUsage() time.Time {
return y.luConn.LastUsage()
}
func (y *yamuxConn) Context() context.Context {
return y.ctx
}
func (y *yamuxConn) Addr() string {
return y.addr
}
func (y *yamuxConn) Accept() (conn net.Conn, err error) {
if conn, err = y.Session.Accept(); err != nil {
if err == yamux.ErrSessionShutdown {
err = transport.ErrConnClosed
}
return
}
return
}