package task_runner import ( "sync" . "git.andr3h3nriqu3s.com/andr3/fyp/logic/tasks/utils" . "git.andr3h3nriqu3s.com/andr3/fyp/logic/utils" ) type LocalRunner struct { RunnerNum int `json:"id"` Task *Task `json:"task"` } type LocalRunners map[int]*LocalRunner func LockRunners(handler *Handle, t string) *sync.Mutex { req := t + "_runners_mutex" if t == "" { req = "runners_mutex" } mutex := handler.DataMap[req].(*sync.Mutex) mutex.Lock() return mutex } func setupHandle(handler *Handle) { // Setup Remote Runner data handler.DataMap["runners"] = map[string]interface{}{} handler.DataMap["runners_mutex"] = &sync.Mutex{} // Setup Local Runner data handler.DataMap["local_runners"] = &LocalRunners{} handler.DataMap["local_runners_mutex"] = &sync.Mutex{} } func AddLocalRunner(handler *Handle, runner LocalRunner) { mutex := LockRunners(handler, "local") defer mutex.Unlock() runners := handler.DataMap["local_runners"].(*LocalRunners) (*runners)[runner.RunnerNum] = &runner } func AddLocalTask(handler *Handle, runner_id int, task *Task) { mutex := LockRunners(handler, "local") defer mutex.Unlock() runners := handler.DataMap["local_runners"].(*LocalRunners) (*(*runners)[runner_id]).Task = task }