1 Star 0 Fork 0

蒙蒙的男孩/polaris-go

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
model.go 3.61 KB
一键复制 编辑 原始数据 按行查看 历史
蒙蒙的男孩 提交于 2023-10-26 20:52 +08:00 . 添加调用方的实例ip属性
/**
* 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)
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/meng_mengs_boys/polaris-go.git
git@gitee.com:meng_mengs_boys/polaris-go.git
meng_mengs_boys
polaris-go
polaris-go
v1.5.4

搜索帮助