diff --git a/cli/proxy.go b/cli/proxy.go index 2017e8f..54a0d62 100644 --- a/cli/proxy.go +++ b/cli/proxy.go @@ -65,7 +65,7 @@ func Proxy() error { if err := stats.Init(ctx); err != nil { Fatal(err) } - telegram.MiddleInit() + telegram.Init() proxyListener, err := net.Listen("tcp", config.C.Bind.String()) if err != nil { diff --git a/telegram/base.go b/telegram/base.go index 66ae08c..276b36b 100644 --- a/telegram/base.go +++ b/telegram/base.go @@ -4,15 +4,12 @@ import ( "fmt" "math/rand" "net" - "time" "github.com/9seconds/mtg/conntypes" "github.com/9seconds/mtg/utils" "github.com/9seconds/mtg/wrappers" ) -const telegramDialTimeout = 10 * time.Second - type baseTelegram struct { dialer net.Dialer diff --git a/telegram/direct.go b/telegram/direct.go index b69075e..3810c9a 100644 --- a/telegram/direct.go +++ b/telegram/direct.go @@ -1,10 +1,6 @@ package telegram -import ( - "net" - - "github.com/9seconds/mtg/conntypes" -) +import "github.com/9seconds/mtg/conntypes" const ( directV4DefaultIdx conntypes.DC = 1 @@ -43,13 +39,3 @@ func (d *directTelegram) Dial(dc conntypes.DC, return d.baseTelegram.dial(dc-1, protocol) } - -var Direct = &directTelegram{ - baseTelegram: baseTelegram{ - dialer: net.Dialer{Timeout: telegramDialTimeout}, - v4DefaultDC: directV4DefaultIdx, - V6DefaultDC: directV6DefaultIdx, - v4Addresses: directV4Addresses, - v6Addresses: directV6Addresses, - }, -} diff --git a/telegram/init.go b/telegram/init.go new file mode 100644 index 0000000..b4a0c19 --- /dev/null +++ b/telegram/init.go @@ -0,0 +1,42 @@ +package telegram + +import ( + "net" + "sync" + "time" +) + +const telegramDialTimeout = 10 * time.Second + +var ( + Direct Telegram + Middle Telegram + + initOnce sync.Once +) + +func Init() { + initOnce.Do(func() { + Direct = &directTelegram{ + baseTelegram: baseTelegram{ + dialer: net.Dialer{Timeout: telegramDialTimeout}, + v4DefaultDC: directV4DefaultIdx, + V6DefaultDC: directV6DefaultIdx, + v4Addresses: directV4Addresses, + v6Addresses: directV6Addresses, + }, + } + + tg := &middleTelegram{ + baseTelegram: baseTelegram{ + dialer: net.Dialer{Timeout: telegramDialTimeout}, + }, + } + if err := tg.update(); err != nil { + panic(err) + } + go tg.backgroundUpdate() + + Middle = tg + }) +} diff --git a/telegram/interfaces.go b/telegram/interfaces.go index c780a62..e419b8b 100644 --- a/telegram/interfaces.go +++ b/telegram/interfaces.go @@ -1,6 +1,6 @@ package telegram -import "github.com/9seconds/mtg/conntypes" +import "github.com/9seconds/mtg/conntypes" type Telegram interface { Dial(conntypes.DC, conntypes.ConnectionProtocol) (conntypes.StreamReadWriteCloser, error) diff --git a/telegram/middle.go b/telegram/middle.go index 6dc0279..88278b1 100644 --- a/telegram/middle.go +++ b/telegram/middle.go @@ -2,7 +2,6 @@ package telegram import ( "fmt" - "net" "sync" "time" @@ -14,8 +13,6 @@ import ( const middleTelegramBackgroundUpdateEvery = time.Hour -var Middle Telegram - type middleTelegram struct { baseTelegram @@ -76,17 +73,3 @@ func (m *middleTelegram) Dial(dc conntypes.DC, return m.baseTelegram.dial(dc, protocol) } - -func MiddleInit() { - tg := &middleTelegram{ - baseTelegram: baseTelegram{ - dialer: net.Dialer{Timeout: telegramDialTimeout}, - }, - } - if err := tg.update(); err != nil { - panic(err) - } - go tg.backgroundUpdate() - - Middle = tg -}