TODO Proxy DeepCopy Test

This commit is contained in:
eson 2018-11-27 03:48:25 +08:00
parent 121cf7c67d
commit 7644cbe1a2
2 changed files with 64 additions and 10 deletions

View File

@ -11,24 +11,57 @@ import (
) )
type Person struct { type Person struct {
Tasks []Task Tasks *CircularLinked
Conf *Config Conf *Config
} }
type Task struct { type Task struct {
Curl *curl2info.CURL Curl *curl2info.CURL
Plan *ExecutePlan Plan *CircularLinked
Proxies *CircularLinked
} }
func NewPerson(conf string, curlinfo string) *Person { func NewPerson(conf string, curlinfo string) *Person {
return nil person := &Person{}
person.Tasks = NewCircularLinked()
person.Conf = NewConfig(conf)
if person.Conf.Mode == 0 {
for _, scurl := range person.Conf.Curls {
curl, err := curl2info.ParseRawCURL(scurl)
if err != nil {
panic(err)
}
at := person.Conf.ExecuteAt
interval := person.Conf.ExecuteInterval
task := NewTask(curl, &at, &interval)
switch person.Conf.Mode {
case 0:
task.Proxies.Append(person.Conf.Proxies)
person.Tasks.Append(task)
case 1:
for _, proxy := range person.Conf.Proxies {
curl := &*task.Curl
curl.Auth = &*task.Curl.Auth
curl.Body = &*task.Curl.Body
curl.ParsedURL = &*task.Curl.ParsedURL
ptask := NewTask(curl)
task.Plan.Clone()
}
}
}
}
return person
} }
func NewTask(curlinfo string, Plan *ExecutePlan) *Task { func NewTask(Curl *curl2info.CURL, Plans ...IExecute) *Task {
task := &Task{} task := &Task{}
// task.Conf = NewConfig(conf) // task.Conf = NewConfig(conf)
task.Curl = curl2info.NewCURL(curlinfo) task.Curl = Curl
task.Plan = Plan task.Plan = NewCircularLinked(Plans)
task.Proxies = NewCircularLinked()
return task return task
} }

View File

@ -1,6 +1,8 @@
package imitate package imitate
import ( import (
"bytes"
"encoding/gob"
"log" "log"
"strings" "strings"
@ -41,13 +43,19 @@ func (list *CircularLinked) Cursor() *Node {
// CursorNext get next Cursor // CursorNext get next Cursor
func (list *CircularLinked) CursorNext() *Node { func (list *CircularLinked) CursorNext() *Node {
list.cursor = list.Cursor().next if list.cursor == nil {
list.cursor = list.head
}
list.cursor = list.cursor.next
return list.cursor return list.cursor
} }
// CursorPrev get prev Cursor // CursorPrev get prev Cursor
func (list *CircularLinked) CursorPrev() *Node { func (list *CircularLinked) CursorPrev() *Node {
list.cursor = list.Cursor().prev if list.cursor == nil {
list.cursor = list.head
}
list.cursor = list.cursor.prev
return list.cursor return list.cursor
} }
@ -195,7 +203,20 @@ func (list *CircularLinked) Size() uint64 {
func (list *CircularLinked) Clone() *CircularLinked { func (list *CircularLinked) Clone() *CircularLinked {
cl := NewCircularLinked() cl := NewCircularLinked()
for i := uint64(0); i < list.size; i++ { for i := uint64(0); i < list.size; i++ {
cl.Append(list.cursor.value) var buf bytes.Buffer // Stand-in for a network connection
enc := gob.NewEncoder(&buf) // Will write to network.
dec := gob.NewDecoder(&buf) // Will read from network.
// Encode (send) the value.
err := enc.Encode(list.cursor.value)
if err != nil {
log.Fatal("encode error:", err)
}
var clonevalue interface{}
err = dec.Decode(clonevalue)
if err != nil {
panic(err)
}
cl.Append(clonevalue)
} }
return cl return cl
} }