You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
718 B
35 lines
718 B
3 years ago
|
package pool
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"github.com/go-faster/errors"
|
||
|
"go.uber.org/atomic"
|
||
|
|
||
|
"github.com/gotd/td/bin"
|
||
|
"github.com/gotd/td/internal/tdsync"
|
||
|
)
|
||
|
|
||
|
// ErrConnDead means that connection is closed and can't be used anymore.
|
||
|
var ErrConnDead = errors.New("connection dead")
|
||
|
|
||
|
// Conn represents Telegram MTProto connection.
|
||
|
type Conn interface {
|
||
|
Run(ctx context.Context) error
|
||
|
Invoke(ctx context.Context, input bin.Encoder, output bin.Decoder) error
|
||
|
Ping(ctx context.Context) error
|
||
|
Ready() <-chan struct{}
|
||
|
}
|
||
|
|
||
|
type poolConn struct {
|
||
|
Conn
|
||
|
id int64 // immutable
|
||
|
dc *DC // immutable
|
||
|
deleted *atomic.Bool
|
||
|
dead *tdsync.Ready
|
||
|
}
|
||
|
|
||
|
func (p *poolConn) Dead() <-chan struct{} {
|
||
|
return p.dead.Ready()
|
||
|
}
|