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)
|
||||
|
||||
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}
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
err = p.AddHandler("idle", func() {
|
||||
p.OnIdle = func() {
|
||||
onIdle <- true
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
p.MaxRTT = time.Second
|
||||
|
44
fastping.go
44
fastping.go
@ -14,19 +14,11 @@
|
||||
// os.Exit(1)
|
||||
// }
|
||||
// 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)
|
||||
// })
|
||||
// if err != nil {
|
||||
// fmt.Println(err)
|
||||
// os.Exit(1)
|
||||
// }
|
||||
// err = p.AddHandler("idle", func() {
|
||||
// p.OnIdle = func() {
|
||||
// fmt.Println("finish")
|
||||
// })
|
||||
// if err != nil {
|
||||
// fmt.Println(err)
|
||||
// os.Exit(1)
|
||||
// }
|
||||
// err = p.Run()
|
||||
// if err != nil {
|
||||
@ -112,7 +104,11 @@ type Pinger struct {
|
||||
// the library calls an idle callback function. It is also used for an
|
||||
// interval time of RunLoop() method
|
||||
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.
|
||||
Debug bool
|
||||
}
|
||||
@ -127,7 +123,8 @@ func NewPinger() *Pinger {
|
||||
hasIPv4: false,
|
||||
hasIPv6: false,
|
||||
MaxRTT: time.Second,
|
||||
handlers: make(map[string]interface{}),
|
||||
OnRecv: nil,
|
||||
OnIdle: nil,
|
||||
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
|
||||
// "idle" string.
|
||||
//
|
||||
// **CAUTION** This function is deprecated. Please use OnRecv and OnIdle field
|
||||
// of Pinger struct to set following handlers.
|
||||
//
|
||||
// "receive" handler should be
|
||||
//
|
||||
// func(addr *net.IPAddr, rtt time.Duration)
|
||||
@ -184,7 +184,7 @@ func (p *Pinger) AddHandler(event string, handler interface{}) error {
|
||||
case "receive":
|
||||
if hdl, ok := handler.(func(*net.IPAddr, time.Duration)); ok {
|
||||
p.mu.Lock()
|
||||
p.handlers[event] = hdl
|
||||
p.OnRecv = hdl
|
||||
p.mu.Unlock()
|
||||
return nil
|
||||
}
|
||||
@ -192,7 +192,7 @@ func (p *Pinger) AddHandler(event string, handler interface{}) error {
|
||||
case "idle":
|
||||
if hdl, ok := handler.(func()); ok {
|
||||
p.mu.Lock()
|
||||
p.handlers[event] = hdl
|
||||
p.OnIdle = hdl
|
||||
p.mu.Unlock()
|
||||
return nil
|
||||
}
|
||||
@ -333,12 +333,10 @@ mainloop:
|
||||
break mainloop
|
||||
case <-ticker.C:
|
||||
p.mu.Lock()
|
||||
handler, ok := p.handlers["idle"]
|
||||
handler := p.OnIdle
|
||||
p.mu.Unlock()
|
||||
if ok && handler != nil {
|
||||
if hdl, ok := handler.(func()); ok {
|
||||
hdl()
|
||||
}
|
||||
if handler != nil {
|
||||
handler()
|
||||
}
|
||||
if once || err != nil {
|
||||
break mainloop
|
||||
@ -512,12 +510,10 @@ func (p *Pinger) procRecv(recv *packet, queue map[string]*net.IPAddr) {
|
||||
if _, ok := queue[addr]; ok {
|
||||
delete(queue, addr)
|
||||
p.mu.Lock()
|
||||
handler, ok := p.handlers["receive"]
|
||||
handler := p.OnRecv
|
||||
p.mu.Unlock()
|
||||
if ok && handler != nil {
|
||||
if hdl, ok := handler.(func(*net.IPAddr, time.Duration)); ok {
|
||||
hdl(recv.addr, rtt)
|
||||
}
|
||||
if handler != nil {
|
||||
handler(recv.addr, rtt)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ func TestRun(t *testing.T) {
|
||||
|
||||
found1, found100, foundv6 := false, 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
|
||||
if ip.String() == "127.0.0.1" {
|
||||
found1 = true
|
||||
@ -63,19 +63,13 @@ func TestRun(t *testing.T) {
|
||||
} else if ip.String() == "::1" {
|
||||
foundv6 = true
|
||||
}
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to add receive hander: %v", err)
|
||||
}
|
||||
|
||||
err = p.AddHandler("idle", func() {
|
||||
p.OnIdle = func() {
|
||||
idle = true
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to add idle handler: %v", err)
|
||||
}
|
||||
|
||||
err = p.Run()
|
||||
err := p.Run()
|
||||
if err != nil {
|
||||
t.Fatalf("Pinger returns error: %v", err)
|
||||
}
|
||||
@ -110,23 +104,17 @@ func TestMultiRun(t *testing.T) {
|
||||
|
||||
var mu sync.Mutex
|
||||
res1 := 0
|
||||
err := p1.AddHandler("receive", func(*net.IPAddr, time.Duration) {
|
||||
p1.OnRecv = func(*net.IPAddr, time.Duration) {
|
||||
mu.Lock()
|
||||
res1++
|
||||
mu.Unlock()
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to add receive hander: %v", err)
|
||||
}
|
||||
|
||||
res2 := 0
|
||||
err = p2.AddHandler("receive", func(*net.IPAddr, time.Duration) {
|
||||
p2.OnRecv = func(*net.IPAddr, time.Duration) {
|
||||
mu.Lock()
|
||||
res2++
|
||||
mu.Unlock()
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to add idle handler: %v", err)
|
||||
}
|
||||
|
||||
p1.MaxRTT, p2.MaxRTT = time.Millisecond*100, time.Millisecond*100
|
||||
@ -194,20 +182,15 @@ func TestRunLoop(t *testing.T) {
|
||||
p.MaxRTT = time.Millisecond * 100
|
||||
|
||||
recvCount, idleCount := 0, 0
|
||||
err := p.AddHandler("receive", func(*net.IPAddr, time.Duration) {
|
||||
p.OnRecv = func(*net.IPAddr, time.Duration) {
|
||||
recvCount++
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to add receive handler: %v", err)
|
||||
}
|
||||
|
||||
err = p.AddHandler("idle", func() {
|
||||
p.OnIdle = func() {
|
||||
idleCount++
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to add idle handler: %v", err)
|
||||
}
|
||||
|
||||
var err error
|
||||
p.RunLoop()
|
||||
ticker := time.NewTicker(time.Millisecond * 250)
|
||||
select {
|
||||
|
Loading…
x
Reference in New Issue
Block a user