-
Notifications
You must be signed in to change notification settings - Fork 0
/
cache.go
72 lines (56 loc) · 1020 Bytes
/
cache.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package gi
import (
"time"
)
// status:
// 0: prepare
// 1: doing
// 2: failed
// 3: done
type CacheDetail struct {
Status int
Msg string
ConnectCount int
}
type Cache struct {
Map map[string]*CacheDetail
Total int
_Chan chan string
}
func NewCache() *Cache {
return &Cache{Map: map[string]*CacheDetail{}, Total: 0}
}
func (c *Cache) Add(url string) {
if _, exists := c.Map[url]; exists {
return
}
c.Map[url] = &CacheDetail{Status: 0, ConnectCount: 0}
c.Total++
}
func (c *Cache) Doing(url string) {
c.Map[url].Status = 1
}
func (c *Cache) Failed(url string, err error) {
c.Map[url].Status = 2
c.Map[url].Msg = err.Error()
}
func (c *Cache) Done(url string) {
if c.Map[url].Status == 0 {
return
}
c.Map[url].Status = 3
}
func (c *Cache) Refresh(url string) {
c.Add(url)
c.Map[url].Status = 0
}
func (c *Cache) Go() {
for u, d := range c.Map {
if d.Status == 0 {
c._Chan <- u
}
}
time.AfterFunc(5*time.Second, c.Go)
}
func (c *Cache) InfoLoop(s int) {
}