代码拉取完成,页面将自动刷新
/**
* Tencent is pleased to support the open source community by making polaris-go available.
*
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
*
* Licensed under the BSD 3-Clause License (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://opensource.org/licenses/BSD-3-Clause
*
* Unless required by applicable law or agreed to in writing, software distributed
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package configuration
import (
"sync"
"gitee.com/meng_mengs_boys/polaris-go/pkg/log"
"gitee.com/meng_mengs_boys/polaris-go/pkg/model"
)
type defaultConfigFile struct {
model.DefaultConfigFileMetadata
fileRepo *ConfigFileRepo
content string
lock sync.RWMutex
changeListeners []func(event model.ConfigFileChangeEvent)
changeListenerChans []chan model.ConfigFileChangeEvent
}
func newDefaultConfigFile(metadata model.ConfigFileMetadata, repo *ConfigFileRepo) *defaultConfigFile {
configFile := &defaultConfigFile{
fileRepo: repo,
content: repo.GetContent(),
}
configFile.Namespace = metadata.GetNamespace()
configFile.FileGroup = metadata.GetFileGroup()
configFile.FileName = metadata.GetFileName()
repo.AddChangeListener(configFile.repoChangeListener)
return configFile
}
// GetContent 获取配置文件内容
func (c *defaultConfigFile) GetContent() string {
if c.content == NotExistedFileContent {
return ""
}
return c.content
}
// HasContent 是否有配置内容
func (c *defaultConfigFile) HasContent() bool {
return c.content != "" && c.content != NotExistedFileContent
}
func (c *defaultConfigFile) repoChangeListener(configFileMetadata model.ConfigFileMetadata, newContent string) error {
oldContent := c.content
log.GetBaseLogger().Infof("[Config] update content. file = %+v, old content = %s, new content = %s",
configFileMetadata, oldContent, newContent)
var changeType model.ChangeType
if oldContent == NotExistedFileContent && newContent != NotExistedFileContent {
changeType = model.Added
} else if oldContent != NotExistedFileContent && newContent == NotExistedFileContent {
changeType = model.Deleted
// NotExistedFileContent 只用于内部删除标记,不应该透露给用户
newContent = ""
} else if oldContent != newContent {
changeType = model.Modified
} else {
changeType = model.NotChanged
}
event := model.ConfigFileChangeEvent{
ConfigFileMetadata: configFileMetadata,
OldValue: c.content,
NewValue: newContent,
ChangeType: changeType,
}
c.content = newContent
c.fireChangeEvent(event)
return nil
}
// AddChangeListenerWithChannel 增加配置文件变更监听器
func (c *defaultConfigFile) AddChangeListenerWithChannel() <-chan model.ConfigFileChangeEvent {
c.lock.Lock()
defer c.lock.Unlock()
changeChan := make(chan model.ConfigFileChangeEvent, 64)
c.changeListenerChans = append(c.changeListenerChans, changeChan)
return changeChan
}
// AddChangeListener 增加配置文件变更监听器
func (c *defaultConfigFile) AddChangeListener(cb model.OnConfigFileChange) {
c.lock.Lock()
defer c.lock.Unlock()
c.changeListeners = append(c.changeListeners, cb)
}
func (c *defaultConfigFile) fireChangeEvent(event model.ConfigFileChangeEvent) {
for _, listenerChan := range c.changeListenerChans {
listenerChan <- event
}
for _, changeListener := range c.changeListeners {
changeListener(event)
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。