mirror of
https://github.com/taigrr/go-fastping
synced 2025-01-18 05:03:15 -08:00
Add OnRecv and OnIdle field to Pinger. AddHandler is deprecated
This commit is contained in:
parent
2ce592c234
commit
bbe9a51966
@ -38,19 +38,11 @@ func main() {
|
|||||||
p.AddIPAddr(ra)
|
p.AddIPAddr(ra)
|
||||||
|
|
||||||
onRecv, onIdle := make(chan *response), make(chan bool)
|
onRecv, onIdle := make(chan *response), make(chan bool)
|
||||||
err = p.AddHandler("receive", func(addr *net.IPAddr, t time.Duration) {
|
p.OnRecv = func(addr *net.IPAddr, t time.Duration) {
|
||||||
onRecv <- &response{addr: addr, rtt: t}
|
onRecv <- &response{addr: addr, rtt: t}
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
err = p.AddHandler("idle", func() {
|
p.OnIdle = func() {
|
||||||
onIdle <- true
|
onIdle <- true
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
p.MaxRTT = time.Second
|
p.MaxRTT = time.Second
|
||||||
|
44
fastping.go
44
fastping.go
@ -14,19 +14,11 @@
|
|||||||
// os.Exit(1)
|
// os.Exit(1)
|
||||||
// }
|
// }
|
||||||
// p.AddIPAddr(ra)
|
// p.AddIPAddr(ra)
|
||||||
// err = p.AddHandler("receive", func(addr *net.IPAddr, rtt time.Duration) {
|
// p.OnRecv = func(addr *net.IPAddr, rtt time.Duration) {
|
||||||
// fmt.Printf("IP Addr: %s receive, RTT: %v\n", addr.String(), rtt)
|
// fmt.Printf("IP Addr: %s receive, RTT: %v\n", addr.String(), rtt)
|
||||||
// })
|
|
||||||
// if err != nil {
|
|
||||||
// fmt.Println(err)
|
|
||||||
// os.Exit(1)
|
|
||||||
// }
|
// }
|
||||||
// err = p.AddHandler("idle", func() {
|
// p.OnIdle = func() {
|
||||||
// fmt.Println("finish")
|
// fmt.Println("finish")
|
||||||
// })
|
|
||||||
// if err != nil {
|
|
||||||
// fmt.Println(err)
|
|
||||||
// os.Exit(1)
|
|
||||||
// }
|
// }
|
||||||
// err = p.Run()
|
// err = p.Run()
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
@ -112,7 +104,11 @@ type Pinger struct {
|
|||||||
// the library calls an idle callback function. It is also used for an
|
// the library calls an idle callback function. It is also used for an
|
||||||
// interval time of RunLoop() method
|
// interval time of RunLoop() method
|
||||||
MaxRTT time.Duration
|
MaxRTT time.Duration
|
||||||
handlers map[string]interface{}
|
// OnRecv is called with a response packet's source address and its
|
||||||
|
// elapsed time when Pinger receives a response packet.
|
||||||
|
OnRecv func(*net.IPAddr, time.Duration)
|
||||||
|
// OnIdle is called when MaxRTT time passed
|
||||||
|
OnIdle func()
|
||||||
// If Debug is true, it prints debug messages to stdout.
|
// If Debug is true, it prints debug messages to stdout.
|
||||||
Debug bool
|
Debug bool
|
||||||
}
|
}
|
||||||
@ -127,7 +123,8 @@ func NewPinger() *Pinger {
|
|||||||
hasIPv4: false,
|
hasIPv4: false,
|
||||||
hasIPv6: false,
|
hasIPv6: false,
|
||||||
MaxRTT: time.Second,
|
MaxRTT: time.Second,
|
||||||
handlers: make(map[string]interface{}),
|
OnRecv: nil,
|
||||||
|
OnIdle: nil,
|
||||||
Debug: false,
|
Debug: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -166,6 +163,9 @@ func (p *Pinger) AddIPAddr(ip *net.IPAddr) {
|
|||||||
// AddHandler adds event handler to Pinger. event arg should be "receive" or
|
// AddHandler adds event handler to Pinger. event arg should be "receive" or
|
||||||
// "idle" string.
|
// "idle" string.
|
||||||
//
|
//
|
||||||
|
// **CAUTION** This function is deprecated. Please use OnRecv and OnIdle field
|
||||||
|
// of Pinger struct to set following handlers.
|
||||||
|
//
|
||||||
// "receive" handler should be
|
// "receive" handler should be
|
||||||
//
|
//
|
||||||
// func(addr *net.IPAddr, rtt time.Duration)
|
// func(addr *net.IPAddr, rtt time.Duration)
|
||||||
@ -184,7 +184,7 @@ func (p *Pinger) AddHandler(event string, handler interface{}) error {
|
|||||||
case "receive":
|
case "receive":
|
||||||
if hdl, ok := handler.(func(*net.IPAddr, time.Duration)); ok {
|
if hdl, ok := handler.(func(*net.IPAddr, time.Duration)); ok {
|
||||||
p.mu.Lock()
|
p.mu.Lock()
|
||||||
p.handlers[event] = hdl
|
p.OnRecv = hdl
|
||||||
p.mu.Unlock()
|
p.mu.Unlock()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -192,7 +192,7 @@ func (p *Pinger) AddHandler(event string, handler interface{}) error {
|
|||||||
case "idle":
|
case "idle":
|
||||||
if hdl, ok := handler.(func()); ok {
|
if hdl, ok := handler.(func()); ok {
|
||||||
p.mu.Lock()
|
p.mu.Lock()
|
||||||
p.handlers[event] = hdl
|
p.OnIdle = hdl
|
||||||
p.mu.Unlock()
|
p.mu.Unlock()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -333,12 +333,10 @@ mainloop:
|
|||||||
break mainloop
|
break mainloop
|
||||||
case <-ticker.C:
|
case <-ticker.C:
|
||||||
p.mu.Lock()
|
p.mu.Lock()
|
||||||
handler, ok := p.handlers["idle"]
|
handler := p.OnIdle
|
||||||
p.mu.Unlock()
|
p.mu.Unlock()
|
||||||
if ok && handler != nil {
|
if handler != nil {
|
||||||
if hdl, ok := handler.(func()); ok {
|
handler()
|
||||||
hdl()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if once || err != nil {
|
if once || err != nil {
|
||||||
break mainloop
|
break mainloop
|
||||||
@ -512,12 +510,10 @@ func (p *Pinger) procRecv(recv *packet, queue map[string]*net.IPAddr) {
|
|||||||
if _, ok := queue[addr]; ok {
|
if _, ok := queue[addr]; ok {
|
||||||
delete(queue, addr)
|
delete(queue, addr)
|
||||||
p.mu.Lock()
|
p.mu.Lock()
|
||||||
handler, ok := p.handlers["receive"]
|
handler := p.OnRecv
|
||||||
p.mu.Unlock()
|
p.mu.Unlock()
|
||||||
if ok && handler != nil {
|
if handler != nil {
|
||||||
if hdl, ok := handler.(func(*net.IPAddr, time.Duration)); ok {
|
handler(recv.addr, rtt)
|
||||||
hdl(recv.addr, rtt)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ func TestRun(t *testing.T) {
|
|||||||
|
|
||||||
found1, found100, foundv6 := false, false, false
|
found1, found100, foundv6 := false, false, false
|
||||||
called, idle := false, false
|
called, idle := false, false
|
||||||
err := p.AddHandler("receive", func(ip *net.IPAddr, d time.Duration) {
|
p.OnRecv = func(ip *net.IPAddr, d time.Duration) {
|
||||||
called = true
|
called = true
|
||||||
if ip.String() == "127.0.0.1" {
|
if ip.String() == "127.0.0.1" {
|
||||||
found1 = true
|
found1 = true
|
||||||
@ -63,19 +63,13 @@ func TestRun(t *testing.T) {
|
|||||||
} else if ip.String() == "::1" {
|
} else if ip.String() == "::1" {
|
||||||
foundv6 = true
|
foundv6 = true
|
||||||
}
|
}
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("Failed to add receive hander: %v", err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
err = p.AddHandler("idle", func() {
|
p.OnIdle = func() {
|
||||||
idle = true
|
idle = true
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("Failed to add idle handler: %v", err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
err = p.Run()
|
err := p.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Pinger returns error: %v", err)
|
t.Fatalf("Pinger returns error: %v", err)
|
||||||
}
|
}
|
||||||
@ -110,23 +104,17 @@ func TestMultiRun(t *testing.T) {
|
|||||||
|
|
||||||
var mu sync.Mutex
|
var mu sync.Mutex
|
||||||
res1 := 0
|
res1 := 0
|
||||||
err := p1.AddHandler("receive", func(*net.IPAddr, time.Duration) {
|
p1.OnRecv = func(*net.IPAddr, time.Duration) {
|
||||||
mu.Lock()
|
mu.Lock()
|
||||||
res1++
|
res1++
|
||||||
mu.Unlock()
|
mu.Unlock()
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("Failed to add receive hander: %v", err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
res2 := 0
|
res2 := 0
|
||||||
err = p2.AddHandler("receive", func(*net.IPAddr, time.Duration) {
|
p2.OnRecv = func(*net.IPAddr, time.Duration) {
|
||||||
mu.Lock()
|
mu.Lock()
|
||||||
res2++
|
res2++
|
||||||
mu.Unlock()
|
mu.Unlock()
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("Failed to add idle handler: %v", err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
p1.MaxRTT, p2.MaxRTT = time.Millisecond*100, time.Millisecond*100
|
p1.MaxRTT, p2.MaxRTT = time.Millisecond*100, time.Millisecond*100
|
||||||
@ -194,20 +182,15 @@ func TestRunLoop(t *testing.T) {
|
|||||||
p.MaxRTT = time.Millisecond * 100
|
p.MaxRTT = time.Millisecond * 100
|
||||||
|
|
||||||
recvCount, idleCount := 0, 0
|
recvCount, idleCount := 0, 0
|
||||||
err := p.AddHandler("receive", func(*net.IPAddr, time.Duration) {
|
p.OnRecv = func(*net.IPAddr, time.Duration) {
|
||||||
recvCount++
|
recvCount++
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("Failed to add receive handler: %v", err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
err = p.AddHandler("idle", func() {
|
p.OnIdle = func() {
|
||||||
idleCount++
|
idleCount++
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("Failed to add idle handler: %v", err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
p.RunLoop()
|
p.RunLoop()
|
||||||
ticker := time.NewTicker(time.Millisecond * 250)
|
ticker := time.NewTicker(time.Millisecond * 250)
|
||||||
select {
|
select {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user