chore(contrib/config): uniformly canceled by CancelFunc (#2111)
* chore: remove sentinel error for compatibility * chore: core use lssentinel error * chore: uniformly canceled by CancelFunc * chore: remove errorpull/2115/head
parent
3aaac45e3d
commit
6fa5700c3c
@ -0,0 +1,65 @@ |
||||
package config |
||||
|
||||
import ( |
||||
"context" |
||||
"path/filepath" |
||||
"strings" |
||||
|
||||
"github.com/go-kratos/kratos/v2/config" |
||||
"github.com/nacos-group/nacos-sdk-go/vo" |
||||
) |
||||
|
||||
type Watcher struct { |
||||
dataID string |
||||
group string |
||||
content chan string |
||||
cancelListenConfig cancelListenConfigFunc |
||||
|
||||
ctx context.Context |
||||
cancel context.CancelFunc |
||||
} |
||||
|
||||
type cancelListenConfigFunc func(params vo.ConfigParam) (err error) |
||||
|
||||
func newWatcher(ctx context.Context, dataID string, group string, cancelListenConfig cancelListenConfigFunc) *Watcher { |
||||
ctx, cancel := context.WithCancel(ctx) |
||||
w := &Watcher{ |
||||
dataID: dataID, |
||||
group: group, |
||||
cancelListenConfig: cancelListenConfig, |
||||
content: make(chan string, 100), |
||||
|
||||
ctx: ctx, |
||||
cancel: cancel, |
||||
} |
||||
return w |
||||
} |
||||
|
||||
func (w *Watcher) Next() ([]*config.KeyValue, error) { |
||||
select { |
||||
case <-w.ctx.Done(): |
||||
return nil, w.ctx.Err() |
||||
case content := <-w.content: |
||||
k := w.dataID |
||||
return []*config.KeyValue{ |
||||
{ |
||||
Key: k, |
||||
Value: []byte(content), |
||||
Format: strings.TrimPrefix(filepath.Ext(k), "."), |
||||
}, |
||||
}, nil |
||||
} |
||||
} |
||||
|
||||
func (w *Watcher) Close() error { |
||||
err := w.cancelListenConfig(vo.ConfigParam{ |
||||
DataId: w.dataID, |
||||
Group: w.group, |
||||
}) |
||||
w.cancel() |
||||
return err |
||||
} |
||||
|
||||
func (w *Watcher) Stop() error { |
||||
return w.Close() |
||||
} |
Loading…
Reference in new issue