package telegram
import (
"context"
"github.com/go-faster/errors"
"github.com/gotd/td/bin"
)
func (c *Client ) ensureRestart (ctx context .Context ) error {
c .log .Debug ("Triggering restart" )
c .resetReady ()
select {
case <- ctx .Done ():
return ctx .Err ()
case c .restart <- struct {}{}:
c .log .Debug ("Restart initialized" )
}
select {
case <- ctx .Done ():
return ctx .Err ()
case <- c .ready .Ready ():
c .log .Info ("Restart ensured" )
return nil
}
}
func (c *Client ) invokeMigrate (ctx context .Context , dcID int , input bin .Encoder , output bin .Decoder ) error {
select {
case c .migration <- struct {}{}:
case <- ctx .Done ():
return ctx .Err ()
}
defer func () {
<-c .migration
}()
s := c .session .Load ()
if s .DC == dcID {
return c .invokeConn (ctx , input , output )
}
mctx , cancel := context .WithTimeout (ctx , c .migrationTimeout )
defer cancel ()
if err := c .migrateToDc (mctx , dcID ); err != nil {
return errors .Wrap (err , "migrate to dc" )
}
return c .invokeConn (ctx , input , output )
}
func (c *Client ) migrateToDc (ctx context .Context , dcID int ) error {
c .session .Migrate (dcID )
return c .ensureRestart (ctx )
}
func (c *Client ) MigrateTo (ctx context .Context , dcID int ) error {
select {
case c .migration <- struct {}{}:
case <- ctx .Done ():
return ctx .Err ()
}
defer func () {
<-c .migration
}()
return c .migrateToDc (ctx , dcID )
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .