Skip to content

Commit

Permalink
Kick any existing provider when registering with a code
Browse files Browse the repository at this point in the history
Helps cleanup dead websocket connections where the provider reconnects
and the relay doesn't notice.
  • Loading branch information
Fizzadar committed Dec 19, 2023
1 parent 30c20f6 commit 6f07f4d
Showing 1 changed file with 14 additions and 7 deletions.
21 changes: 14 additions & 7 deletions internal/provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,27 +23,34 @@ func init() {
codeToProvider = make(map[string]*provider, 0)
}

func GetProvider(key string) (*provider, bool) {
func GetProvider(code string) (*provider, bool) {
codeToProviderLock.Lock()
defer codeToProviderLock.Unlock()
p, exists := codeToProvider[key]
p, exists := codeToProvider[code]
return p, exists
}

func RegisterProvider(key string, provider *provider) (string, error) {
func RegisterProvider(code string, provider *provider) (string, error) {
codeToProviderLock.Lock()
defer codeToProviderLock.Unlock()

if key == "" {
if existing, exists := codeToProvider[code]; exists {
existing.log.Warn().
Str("code", code).
Msg("New provider with same code registering, exiting websocket")
existing.ws.Close()
}

if code == "" {
var err error
key, err = util.GenerateProviderCode()
code, err = util.GenerateProviderCode()
if err != nil {
return "", err
}
}

codeToProvider[key] = provider
return key, nil
codeToProvider[code] = provider
return code, nil
}

func UnregisterProvider(key string) {
Expand Down

0 comments on commit 6f07f4d

Please sign in to comment.