github.com/haalcala/mattermost-server-change-repo@v0.0.0-20210713015153-16753fbeee5f/config/emitter.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package config
     5  
     6  import (
     7  	"sync"
     8  
     9  	"github.com/mattermost/mattermost-server/v5/mlog"
    10  	"github.com/mattermost/mattermost-server/v5/model"
    11  )
    12  
    13  // emitter enables threadsafe registration and broadcasting to configuration listeners
    14  type emitter struct {
    15  	listeners sync.Map
    16  }
    17  
    18  // AddListener adds a callback function to invoke when the configuration is modified.
    19  func (e *emitter) AddListener(listener Listener) string {
    20  	id := model.NewId()
    21  
    22  	e.listeners.Store(id, listener)
    23  
    24  	return id
    25  }
    26  
    27  // RemoveListener removes a callback function using an id returned from AddListener.
    28  func (e *emitter) RemoveListener(id string) {
    29  	e.listeners.Delete(id)
    30  }
    31  
    32  // invokeConfigListeners synchronously notifies all listeners about the configuration change.
    33  func (e *emitter) invokeConfigListeners(oldCfg, newCfg *model.Config) {
    34  	e.listeners.Range(func(key, value interface{}) bool {
    35  		listener := value.(Listener)
    36  		listener(oldCfg, newCfg)
    37  
    38  		return true
    39  	})
    40  }
    41  
    42  // srcEmitter enables threadsafe registration and broadcasting to configuration listeners
    43  type logSrcEmitter struct {
    44  	listeners sync.Map
    45  }
    46  
    47  // AddListener adds a callback function to invoke when the configuration is modified.
    48  func (e *logSrcEmitter) AddListener(listener LogSrcListener) string {
    49  	id := model.NewId()
    50  	e.listeners.Store(id, listener)
    51  	return id
    52  }
    53  
    54  // RemoveListener removes a callback function using an id returned from AddListener.
    55  func (e *logSrcEmitter) RemoveListener(id string) {
    56  	e.listeners.Delete(id)
    57  }
    58  
    59  // invokeConfigListeners synchronously notifies all listeners about the configuration change.
    60  func (e *logSrcEmitter) invokeConfigListeners(oldCfg, newCfg mlog.LogTargetCfg) {
    61  	e.listeners.Range(func(key, value interface{}) bool {
    62  		listener := value.(LogSrcListener)
    63  		listener(oldCfg, newCfg)
    64  		return true
    65  	})
    66  }