117 lines
2.2 KiB
Go
117 lines
2.2 KiB
Go
package hunter
|
|
|
|
import (
|
|
pqueue "github.com/474420502/focus/priority_queue"
|
|
)
|
|
|
|
// IBefore 执行任务前处理
|
|
type IBefore interface {
|
|
Before(cxt *TaskContext)
|
|
}
|
|
|
|
// // IExecute 执行任务
|
|
// type IExecute interface {
|
|
// Execute(ctx *TaskContext)
|
|
// }
|
|
|
|
// IAfter 执行任务后
|
|
type IAfter interface {
|
|
After(cxt *TaskContext)
|
|
}
|
|
|
|
// ITask 任务接口
|
|
type ITask interface {
|
|
Execute(ctx *TaskContext)
|
|
}
|
|
|
|
// IIdentity 身份id接口
|
|
type IIdentity interface {
|
|
GetID() string
|
|
}
|
|
|
|
// ITaskNode 任务节点
|
|
type ITaskNode interface {
|
|
Parent() ITaskNode
|
|
SetParent(task ITaskNode)
|
|
|
|
Children() *pqueue.PriorityQueue // ITaskNode
|
|
SetChildren(children *pqueue.PriorityQueue)
|
|
|
|
Task() ITask // ITaskNode
|
|
SetTask(itask ITask)
|
|
|
|
SetPath(path string)
|
|
Path() string
|
|
|
|
TaskID() string
|
|
|
|
SetID(tid string)
|
|
}
|
|
|
|
// BaseTask 任务,必须包含子任务. 执行了第一个
|
|
type BaseTask struct {
|
|
parent ITaskNode
|
|
children *pqueue.PriorityQueue // ITask类型
|
|
path string // id 联合体, 禁用.命名
|
|
task ITask
|
|
tid string
|
|
}
|
|
|
|
// Parent 父
|
|
func (task *BaseTask) Parent() ITaskNode {
|
|
return task.parent
|
|
}
|
|
|
|
// SetParent 设父
|
|
func (task *BaseTask) SetParent(itask ITaskNode) {
|
|
task.parent = itask
|
|
}
|
|
|
|
// Children 孩子节点
|
|
func (task *BaseTask) Children() *pqueue.PriorityQueue {
|
|
return task.children
|
|
}
|
|
|
|
// SetChildren 孩子节点
|
|
func (task *BaseTask) SetChildren(children *pqueue.PriorityQueue) {
|
|
task.children = children
|
|
}
|
|
|
|
// Task 孩子节点
|
|
func (task *BaseTask) Task() ITask {
|
|
return task.task
|
|
}
|
|
|
|
// SetTask 孩子节点
|
|
func (task *BaseTask) SetTask(itask ITask) {
|
|
task.task = itask
|
|
}
|
|
|
|
// Path 路径 例如: web.subweb.subsubweb
|
|
func (task *BaseTask) Path() string {
|
|
return task.path
|
|
}
|
|
|
|
// SetPath 路径 例如: web.subweb.subsubweb
|
|
func (task *BaseTask) SetPath(path string) {
|
|
task.path = path
|
|
}
|
|
|
|
// TaskID 如果存在任务id就返回任务id, 否则生成自动生成的序列id
|
|
func (task *BaseTask) TaskID() string {
|
|
if itid, ok := task.task.(IIdentity); ok {
|
|
return itid.GetID()
|
|
}
|
|
return task.tid
|
|
}
|
|
|
|
// SetID 设置自动生成的序列id
|
|
func (task *BaseTask) SetID(tid string) {
|
|
task.tid = tid
|
|
}
|
|
|
|
// // Task 孩子节点
|
|
// func (task *BaseTask) Task() ITask {
|
|
// return *task
|
|
// }
|