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 // }