167 lines
3.3 KiB
Go
167 lines
3.3 KiB
Go
package imitate
|
|
|
|
import (
|
|
"reflect"
|
|
|
|
"474420502.top/eson/curl2info"
|
|
"474420502.top/eson/requests"
|
|
)
|
|
|
|
var register map[string]reflect.Type
|
|
|
|
// Register 注册 类型 ITask为样本的类型
|
|
func Register(name string, itype interface{}) {
|
|
register[name] = reflect.TypeOf(itype)
|
|
}
|
|
|
|
func makeRegisterType(name string) reflect.Type {
|
|
return reflect.New(register[name]).Type().Elem()
|
|
}
|
|
|
|
// Person 以人为单位
|
|
type Person struct {
|
|
Tasks []ITask
|
|
Conf *Config
|
|
}
|
|
|
|
// NewPerson 创建一个人实例
|
|
func NewPerson() *Person {
|
|
person := &Person{}
|
|
|
|
// person.Conf = NewConfig(conf)
|
|
// person.Tasks = SplitTasks(person.Conf)
|
|
|
|
return person
|
|
}
|
|
|
|
// LoadConfig 加载配置
|
|
func (person *Person) LoadConfig(conf string) {
|
|
person.Conf = NewConfig(conf)
|
|
person.Tasks = splitTasks(person.Conf)
|
|
}
|
|
|
|
// NewPersonWithConfig 创建一个person
|
|
func NewPersonWithConfig(conf string) *Person {
|
|
person := NewPerson()
|
|
person.LoadConfig(conf)
|
|
return person
|
|
}
|
|
|
|
// SplitTasks 拆开出需求的任务
|
|
func splitTasks(conf *Config) []ITask {
|
|
var tasks []ITask
|
|
|
|
for _, scurl := range conf.Curls {
|
|
curl, err := curl2info.ParseRawCURL(scurl)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
task := makeRegisterType(curl.ITask).Elem().(ITask)
|
|
switch conf.Mode {
|
|
case 0:
|
|
copy(task.GetProxies(), conf.Proxies)
|
|
tasks = append(tasks, task)
|
|
case 1:
|
|
for _, proxy := range conf.Proxies {
|
|
ncurl, err := curl2info.ParseRawCURL(scurl)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
ptask := makeRegisterType(ncurl.ITask).Elem().(ITask)
|
|
// for _, exec := range task {
|
|
|
|
// }
|
|
|
|
ptask.AppendProxies(proxy)
|
|
tasks = append(tasks, task)
|
|
}
|
|
}
|
|
}
|
|
return tasks
|
|
}
|
|
|
|
// Execute 人的执行所有任务
|
|
func (person *Person) Execute() {
|
|
// for _, task := range person.Tasks {
|
|
// // ExecuteOnPlan(task)
|
|
// }
|
|
}
|
|
|
|
// ITask 继承这个接口的类
|
|
type ITask interface {
|
|
Execute()
|
|
|
|
SetCurl(Curl *curl2info.CURL)
|
|
GetCurl() *curl2info.CURL
|
|
|
|
GetProxies() []string
|
|
AppendProxies(proxies ...string)
|
|
}
|
|
|
|
// Task 任务
|
|
type Task struct {
|
|
ITask
|
|
|
|
curl *curl2info.CURL
|
|
workflow *requests.Workflow
|
|
proxies []string
|
|
}
|
|
|
|
//
|
|
// func (task *Task) SetCurl(curl *curl2info.CURL) {
|
|
// task.curl = curl
|
|
// }
|
|
|
|
// func (task *Task) GetCurl() *curl2info.CURL {
|
|
// return task.curl
|
|
// }
|
|
|
|
// //
|
|
// func (task *Task) AppendPlans(plans ...IExecute) {
|
|
// if len(plans) != 0 {
|
|
// for _, plan := range plans {
|
|
// task.plans = append(task.plans, plan)
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// func (task *Task) GetPlans() []IExecute {
|
|
// return task.plans
|
|
// }
|
|
|
|
// func (task *Task) AppendProxies(proxies ...string) {
|
|
// for _, proxy := range proxies {
|
|
// task.proxies = append(task.proxies, proxy)
|
|
// }
|
|
// }
|
|
|
|
// func (task *Task) GetProxies() []string {
|
|
// return task.proxies
|
|
// }
|
|
|
|
// // InitTask 生成一个新任务
|
|
// func InitTask(task ITask, Curl *curl2info.CURL, Plans ...IExecute) {
|
|
|
|
// // task.Conf = NewConfig(conf)
|
|
// task.SetCurl(Curl)
|
|
// task.AppendPlans(Plans...)
|
|
// }
|
|
|
|
// // ExecuteOnPlan 按照计划执行任务并返回结果
|
|
// func ExecuteOnPlan(task ITask) {
|
|
// for _, exec := range task.GetPlans() {
|
|
// if exec.TimeTo() >= 0 {
|
|
// task.Execute() // 事件 在这里变化
|
|
// exec.CalculateTrigger()
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// Execute 根据curl信息执行, TODO: 通用方法设置, 多太实现
|
|
// func (task *Task) Execute() {
|
|
// resp, err := task.Curl.CreateWorkflow(nil).Execute()
|
|
// log.Println(resp, err)
|
|
// }
|