any-sync/net/peer/peer.go
Sergey Cherepanov 7958b43da6
peer service
2023-05-26 20:06:22 +02:00

48 lines
867 B
Go

package peer
import (
"github.com/anyproto/any-sync/net/transport"
"time"
"github.com/anyproto/any-sync/app/logger"
"go.uber.org/zap"
)
var log = logger.NewNamed("common.net.peer")
func NewPeer(mc transport.MultiConn) (p Peer, err error) {
ctx := mc.Context()
pr := &peer{}
if pr.id, err = CtxPeerId(ctx); err != nil {
return
}
return pr, nil
}
type Peer interface {
Id() string
TryClose(objectTTL time.Duration) (res bool, err error)
transport.MultiConn
}
type peer struct {
id string
transport.MultiConn
}
func (p *peer) Id() string {
return p.id
}
func (p *peer) TryClose(objectTTL time.Duration) (res bool, err error) {
if time.Now().Sub(p.LastUsage()) < objectTTL {
return false, nil
}
return true, p.Close()
}
func (p *peer) Close() (err error) {
log.Debug("peer close", zap.String("peerId", p.id))
return p.MultiConn.Close()
}