From 18f781b94ae0289653c5207aaae85ca36733c064 Mon Sep 17 00:00:00 2001 From: RavenZZ Date: Thu, 8 Feb 2018 16:54:56 +0800 Subject: [PATCH] WatchRemoteConfigOnChannel --- viper.go | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/viper.go b/viper.go index 64f006a..0c1be50 100644 --- a/viper.go +++ b/viper.go @@ -162,7 +162,8 @@ type Viper struct { aliases map[string]string typeByDefValue bool - onConfigChange func(fsnotify.Event) + onConfigChange func(fsnotify.Event) + onRemoteConfigChange func() } // New returns an initialized Viper instance. @@ -237,6 +238,11 @@ func (v *Viper) OnConfigChange(run func(in fsnotify.Event)) { v.onConfigChange = run } +func OnRemoteConfigChange(run func()) { v.OnRemoteConfigChange(run) } +func (v *Viper) OnRemoteConfigChange(run func()) { + v.onRemoteConfigChange = run +} + func WatchConfig() { v.WatchConfig() } func (v *Viper) WatchConfig() { go func() { @@ -1286,6 +1292,7 @@ func (v *Viper) WatchRemoteConfig() error { return v.watchKeyValueConfig() } +func WatchRemoteConfigOnChannel() error { return v.watchKeyValueConfigOnChannel() } func (v *Viper) WatchRemoteConfigOnChannel() error { return v.watchKeyValueConfigOnChannel() } @@ -1338,13 +1345,14 @@ func (v *Viper) watchKeyValueConfigOnChannel() error { for _, rp := range v.remoteProviders { respc, _ := RemoteConfig.WatchChannel(rp) //Todo: Add quit channel - go func(rc <-chan *RemoteResponse) { - for { - b := <-rc - reader := bytes.NewReader(b.Value) - v.unmarshalReader(reader, v.kvstore) - } - }(respc) + + b := <-respc + reader := bytes.NewReader(b.Value) + v.unmarshalReader(reader, v.kvstore) + + if v.onRemoteConfigChange != nil { + v.onRemoteConfigChange() + } return nil } return RemoteConfigError("No Files Found")