hunter/task.go

122 lines
2.3 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
}
// IClose 关闭
type IClose interface {
Close() error
}
// 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
// }