支持 load 加载的服务热更新(需配置hotLoad) 增强唯一id获取(使用新算法,依赖Redis) session支持基于细粒度权限匹配(传入支持的功能列表匹配)
166 lines
4.1 KiB
Go
166 lines
4.1 KiB
Go
package service
|
|
|
|
// type Task struct {
|
|
// spec string
|
|
// file string
|
|
// vm *gojs.Runtime
|
|
// lock sync.RWMutex
|
|
// mtime time.Time
|
|
// // policy string
|
|
// }
|
|
// var tasks []Task
|
|
// var tasksLock = sync.RWMutex{}
|
|
|
|
// var taskData = map[string]map[string]any{}
|
|
// var taskDataLock = sync.RWMutex{}
|
|
|
|
// var taskList = map[string]*list.List{}
|
|
// var taskListLock = sync.RWMutex{}
|
|
|
|
// func DataSet(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
|
// args := gojs.MakeArgs(&argsIn, vm).Check(3)
|
|
// scope := args.Str(0)
|
|
// key := args.Str(1)
|
|
// value := args.Any(2)
|
|
// taskDataLock.Lock()
|
|
// defer taskDataLock.Unlock()
|
|
// if taskData[scope] == nil {
|
|
// taskData[scope] = map[string]any{}
|
|
// }
|
|
// taskData[scope][key] = value
|
|
// return nil
|
|
// }
|
|
|
|
// func DataGet(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
|
// args := gojs.MakeArgs(&argsIn, vm).Check(2)
|
|
// scope := args.Str(0)
|
|
// key := args.Str(1)
|
|
// taskDataLock.RLock()
|
|
// defer taskDataLock.RUnlock()
|
|
// if taskData[scope] != nil {
|
|
// return vm.ToValue(taskData[scope][key])
|
|
// }
|
|
// return nil
|
|
// }
|
|
|
|
// func DataKeys(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
|
// args := gojs.MakeArgs(&argsIn, vm).Check(1)
|
|
// scope := args.Str(0)
|
|
// taskDataLock.RLock()
|
|
// defer taskDataLock.RUnlock()
|
|
// if taskData[scope] != nil {
|
|
// keys := make([]string, len(taskData[scope]))
|
|
// i := 0
|
|
// for key := range taskData[scope] {
|
|
// keys[i] = key
|
|
// i++
|
|
// }
|
|
// return vm.ToValue(keys)
|
|
// }
|
|
// return nil
|
|
// }
|
|
|
|
// func DataCount(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
|
// args := gojs.MakeArgs(&argsIn, vm).Check(1)
|
|
// scope := args.Str(0)
|
|
// taskDataLock.RLock()
|
|
// defer taskDataLock.RUnlock()
|
|
// if taskData[scope] != nil {
|
|
// return vm.ToValue(len(taskData[scope]))
|
|
// }
|
|
// return vm.ToValue(0)
|
|
// }
|
|
|
|
// func DataFetch(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
|
// args := gojs.MakeArgs(&argsIn, vm).Check(1)
|
|
// scope := args.Str(0)
|
|
// taskDataLock.RLock()
|
|
// defer taskDataLock.RUnlock()
|
|
// if taskData[scope] != nil {
|
|
// all := make(map[string]any)
|
|
// for k, v := range taskData[scope] {
|
|
// all[k] = v
|
|
// }
|
|
// return vm.ToValue(all)
|
|
// }
|
|
// return nil
|
|
// }
|
|
|
|
// func DataRemove(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
|
// args := gojs.MakeArgs(&argsIn, vm).Check(1)
|
|
// scope := args.Str(0)
|
|
// key := args.Str(1)
|
|
// taskDataLock.Lock()
|
|
// defer taskDataLock.Unlock()
|
|
// if taskData[scope] != nil {
|
|
// if key != "" {
|
|
// delete(taskData[scope], key)
|
|
// } else {
|
|
// delete(taskData, scope)
|
|
// }
|
|
// }
|
|
// return nil
|
|
// }
|
|
|
|
// func ListPush(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
|
// args := gojs.MakeArgs(&argsIn, vm).Check(2)
|
|
// scope := args.Str(0)
|
|
// value := args.Any(1)
|
|
// fromHead := args.Bool(2)
|
|
// taskListLock.Lock()
|
|
// defer taskListLock.Unlock()
|
|
// list1 := taskList[scope]
|
|
// if list1 == nil {
|
|
// list1 = list.New()
|
|
// taskList[scope] = list1
|
|
// }
|
|
// if fromHead {
|
|
// list1.PushFront(value)
|
|
// } else {
|
|
// list1.PushBack(value)
|
|
// }
|
|
// return nil
|
|
// }
|
|
|
|
// func ListPop(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
|
// args := gojs.MakeArgs(&argsIn, vm).Check(1)
|
|
// scope := args.Str(0)
|
|
// fromEnd := args.Bool(1)
|
|
// taskListLock.Lock()
|
|
// var item *list.Element
|
|
// defer taskListLock.Unlock()
|
|
// list1 := taskList[scope]
|
|
// if list1 != nil {
|
|
// if fromEnd {
|
|
// item = list1.Front()
|
|
// } else {
|
|
// item = list1.Back()
|
|
// }
|
|
// if item != nil {
|
|
// list1.Remove(item)
|
|
// return vm.ToValue(item.Value)
|
|
// }
|
|
// }
|
|
// return nil
|
|
// }
|
|
|
|
// func ListCount(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
|
// args := gojs.MakeArgs(&argsIn, vm).Check(1)
|
|
// scope := args.Str(0)
|
|
// taskListLock.RLock()
|
|
// defer taskListLock.RUnlock()
|
|
// if taskList[scope] != nil {
|
|
// return vm.ToValue(taskList[scope].Len())
|
|
// }
|
|
// return vm.ToValue(0)
|
|
// }
|
|
|
|
// func ListRemove(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
|
// args := gojs.MakeArgs(&argsIn, vm).Check(1)
|
|
// scope := args.Str(0)
|
|
// taskListLock.Lock()
|
|
// defer taskListLock.Unlock()
|
|
// delete(taskList, scope)
|
|
// return nil
|
|
// }
|