FILE / ScuroNeko/mtg

hub/hub.go

Исходный файл и его история в репозитории.
FILE 64859069ed82d1ccf3f941b43698e5532cfdd9b8
Files
mtg/hub/hub.go
T
2022-08-09 17:41:59 +03:00

41 lines
659 B
Go

package hub
import (
"context"
"sync"
"github.com/9seconds/mtg/protocol"
)
type hub struct {
muxes map[int32]*mux
mutex sync.RWMutex
ctx context.Context
}
func (h *hub) Register(req *protocol.TelegramRequest) (*ProxyConn, error) {
return h.getMux(req).Get(req)
}
func (h *hub) getMux(req *protocol.TelegramRequest) *mux {
key := 32767 + int32(req.ClientProtocol.DC()) + 100000*int32(req.ClientProtocol.ConnectionProtocol()) //nolint: gomnd
h.mutex.RLock()
m, ok := h.muxes[key]
h.mutex.RUnlock()
if !ok {
h.mutex.Lock()
m, ok = h.muxes[key]
if !ok {
m = newMux(h.ctx)
h.muxes[key] = m
}
h.mutex.Unlock()
}
return m
}