52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
|
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
|
||
|
}
|