123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- // msclient
- package spider
- import (
- "math/rand"
- mu "mfw/util"
- "time"
- )
- //
- type DynamicIPMap struct {
- Code string
- InvalidTime int64
- }
- var Msclient *mu.Client
- var MsclientFile *mu.Client
- var MsclientBid *mu.Client
- var MsclientTest *mu.Client
- var Alldownloader map[string]DynamicIPMap = make(map[string]DynamicIPMap)
- var AlldownloaderBid map[string]DynamicIPMap = make(map[string]DynamicIPMap)
- var AlldownloaderFile map[string]DynamicIPMap = make(map[string]DynamicIPMap)
- var AlldownloaderTest map[string]DynamicIPMap = make(map[string]DynamicIPMap)
- //
- func processevent(p *mu.Packet) {
- defer mu.Catch()
- var data []byte
- switch p.Event {
- case mu.SERVICE_DOWNLOAD_APPEND_NODE:
- data = p.GetBusinessData()
- //log.Println("获取动态地址:", len(data), string(data))
- for i := 0; i < len(data)/8; i++ {
- code := string(data[i*8 : (i+1)*8])
- Alldownloader[code] = DynamicIPMap{
- Code: code,
- InvalidTime: time.Now().Unix() + 60*10,
- }
- }
- case mu.SERVICE_DOWNLOAD_DELETE_NODE:
- data = p.GetBusinessData()
- //log.Println("删除动态地址:", len(data), string(data))
- for i := 0; i < len(data)/8; i++ {
- code := string(data[i*8 : (i+1)*8])
- delete(Alldownloader, code)
- }
- }
- }
- func processeventbid(p *mu.Packet) {
- defer mu.Catch()
- var data []byte
- switch p.Event {
- case mu.SERVICE_DOWNLOAD_APPEND_NODE:
- data = p.GetBusinessData()
- //log.Println("获取动态地址:", len(data), string(data))
- for i := 0; i < len(data)/8; i++ {
- code := string(data[i*8 : (i+1)*8])
- AlldownloaderBid[code] = DynamicIPMap{
- Code: code,
- InvalidTime: time.Now().Unix() + 60*10,
- }
- }
- case mu.SERVICE_DOWNLOAD_DELETE_NODE:
- data = p.GetBusinessData()
- //log.Println("删除动态地址:", len(data), string(data))
- for i := 0; i < len(data)/8; i++ {
- code := string(data[i*8 : (i+1)*8])
- delete(AlldownloaderBid, code)
- }
- }
- }
- func processeventFile(p *mu.Packet) {
- defer mu.Catch()
- var data []byte
- switch p.Event {
- case mu.SERVICE_DOWNLOAD_APPEND_NODE:
- data = p.GetBusinessData()
- //log.Println("获取动态地址:", len(data), string(data))
- for i := 0; i < len(data)/8; i++ {
- code := string(data[i*8 : (i+1)*8])
- AlldownloaderFile[code] = DynamicIPMap{
- Code: code,
- InvalidTime: time.Now().Unix() + 60*10,
- }
- }
- case mu.SERVICE_DOWNLOAD_DELETE_NODE:
- data = p.GetBusinessData()
- //log.Println("删除动态地址:", len(data), string(data))
- for i := 0; i < len(data)/8; i++ {
- code := string(data[i*8 : (i+1)*8])
- delete(AlldownloaderFile, code)
- }
- }
- }
- func processeventTest(p *mu.Packet) {
- defer mu.Catch()
- var data []byte
- switch p.Event {
- case mu.SERVICE_DOWNLOAD_APPEND_NODE:
- data = p.GetBusinessData()
- //log.Println("获取动态地址:", len(data), string(data))
- for i := 0; i < len(data)/8; i++ {
- code := string(data[i*8 : (i+1)*8])
- AlldownloaderTest[code] = DynamicIPMap{
- Code: code,
- InvalidTime: time.Now().Unix() + 60*10,
- }
- }
- case mu.SERVICE_DOWNLOAD_DELETE_NODE:
- data = p.GetBusinessData()
- //log.Println("删除动态地址:", len(data), string(data))
- for i := 0; i < len(data)/8; i++ {
- code := string(data[i*8 : (i+1)*8])
- delete(AlldownloaderTest, code)
- }
- }
- }
- //
- func gc4Alldownloader() {
- n := time.Now().Unix()
- for _, v := range Alldownloader {
- if v.InvalidTime < n {
- delete(Alldownloader, v.Code)
- }
- }
- time.AfterFunc(1*time.Minute, gc4Alldownloader)
- }
- func gc4AlldownloaderBid() {
- n := time.Now().Unix()
- for _, v := range AlldownloaderBid {
- if v.InvalidTime < n {
- delete(AlldownloaderBid, v.Code)
- }
- }
- time.AfterFunc(1*time.Minute, gc4AlldownloaderBid)
- }
- func gc4AlldownloaderFile() {
- n := time.Now().Unix()
- for _, v := range AlldownloaderFile {
- if v.InvalidTime < n {
- delete(AlldownloaderFile, v.Code)
- }
- }
- time.AfterFunc(1*time.Minute, gc4AlldownloaderFile)
- }
- func gc4AlldownloaderTest() {
- n := time.Now().Unix()
- for _, v := range AlldownloaderTest {
- if v.InvalidTime < n {
- delete(AlldownloaderTest, v.Code)
- }
- }
- time.AfterFunc(1*time.Minute, gc4AlldownloaderTest)
- }
- //
- func GetOneDownloader() string {
- if len(AlldownloaderTest) < 1 {
- return ""
- }
- r := rand.New(rand.NewSource(time.Now().UnixNano()))
- pos := r.Intn(len(AlldownloaderTest))
- index := 0
- retcode := ""
- for k, _ := range AlldownloaderTest {
- if index == pos {
- retcode = k
- break
- }
- index++
- }
- return retcode
- }
- //初始化,启动消息客户端
- func InitMsgClient(serveraddr, serveraddrbid, serveraddrtest, name, namebid, nametest string) {
- Msclient, _ = mu.NewClient(&mu.ClientConfig{ClientName: name,
- MsgServerAddr: serveraddr,
- EventHandler: processevent,
- CanHandleEvents: []int{mu.SERVICE_DOWNLOAD_APPEND_NODE, mu.SERVICE_DOWNLOAD_DELETE_NODE},
- ReadBufferSize: 10,
- WriteBufferSize: 10,
- })
- go gc4Alldownloader()
- MsclientBid, _ = mu.NewClient(&mu.ClientConfig{ClientName: namebid,
- MsgServerAddr: serveraddrbid,
- EventHandler: processeventbid,
- CanHandleEvents: []int{mu.SERVICE_DOWNLOAD_APPEND_NODE, mu.SERVICE_DOWNLOAD_DELETE_NODE},
- ReadBufferSize: 10,
- WriteBufferSize: 10,
- })
- go gc4AlldownloaderBid()
- MsclientTest, _ = mu.NewClient(&mu.ClientConfig{ClientName: nametest,
- MsgServerAddr: serveraddrtest,
- EventHandler: processeventTest,
- CanHandleEvents: []int{mu.SERVICE_DOWNLOAD_APPEND_NODE, mu.SERVICE_DOWNLOAD_DELETE_NODE},
- ReadBufferSize: 10,
- WriteBufferSize: 10,
- })
- go gc4AlldownloaderTest()
- }
- func InitMsgClientFile(serveraddr, name string) {
- MsclientFile, _ = mu.NewClient(&mu.ClientConfig{ClientName: name,
- MsgServerAddr: serveraddr,
- EventHandler: processeventFile,
- CanHandleEvents: []int{mu.SERVICE_DOWNLOAD_APPEND_NODE, mu.SERVICE_DOWNLOAD_DELETE_NODE},
- ReadBufferSize: 200,
- WriteBufferSize: 200,
- })
- go gc4AlldownloaderFile()
- }
|