1 Star 0 Fork 0

蒙蒙的男孩 / eosc

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
data.go 1.92 KB
一键复制 编辑 原始数据 按行查看 历史
蒙蒙的男孩 提交于 2024-01-10 13:49 . 重定义项目地址
package dispatcher
import (
"strings"
"sync"
"gitee.com/meng_mengs_boys/eosc"
)
type Data struct {
lock sync.RWMutex
data map[string]map[string][]byte
}
func NewMyData(data map[string]map[string][]byte) *Data {
if data == nil {
data = make(map[string]map[string][]byte)
}
return &Data{
data: data,
}
}
func (d *Data) DoEvent(event IEvent) {
d.lock.Lock()
defer d.lock.Unlock()
switch strings.ToLower(event.Event()) {
case eosc.EventDel:
d.delete(event.Namespace(), event.Key())
case eosc.EventSet:
d.set(event.Namespace(), event.Key(), event.Data())
case eosc.EventInit, eosc.EventReset:
d.reset(event.All())
}
}
func (d *Data) getAll() map[string]map[string][]byte {
m := make(map[string]map[string][]byte)
for n, ns := range d.data {
nsn := make(map[string][]byte)
for k, v := range ns {
nsn[k] = v
}
m[n] = nsn
}
return m
}
func (d *Data) reset(all map[string]map[string][]byte) {
d.data = all
}
func (d *Data) delete(namespace, key string) {
sub, has := d.data[namespace]
if !has {
return
}
delete(sub, key)
}
func (d *Data) set(namespace, key string, data []byte) {
sub, has := d.data[namespace]
if !has {
sub = make(map[string][]byte)
d.data[namespace] = sub
}
sub[key] = data
}
func (d *Data) GetNamespace(namespace string) (map[string][]byte, bool) {
d.lock.RLock()
defer d.lock.RUnlock()
data, has := d.data[namespace]
if has {
tmp := make(map[string][]byte)
for k, v := range data {
tmp[k] = v
}
return tmp, has
}
return nil, false
}
func (d *Data) GET() map[string]map[string][]byte {
d.lock.RLock()
defer d.lock.RUnlock()
return d.getAll()
}
type InitEvent map[string]map[string][]byte
func (r InitEvent) Namespace() string {
return ""
}
func (r InitEvent) Event() string {
return eosc.EventInit
}
func (r InitEvent) Key() string {
return ""
}
func (r InitEvent) Data() []byte {
return nil
}
func (r InitEvent) All() map[string]map[string][]byte {
return r
}
1
https://gitee.com/meng_mengs_boys/eosc.git
git@gitee.com:meng_mengs_boys/eosc.git
meng_mengs_boys
eosc
eosc
v1.15.7

搜索帮助