12345678910111213141516171819202122232425262728293031323334353637383940 |
- package main
- import (
- "context"
- "goa.design/clue/log"
- "douglasthrift.net/presence"
- )
- type (
- Detect struct {
- Interface string `arg:""`
- HardwareAddrs []string `arg:""`
- }
- )
- func (d *Detect) Run(cli *CLI) error {
- ifs := presence.Interfaces{d.Interface: true}
- hws := make(presence.HardwareAddrStates, len(d.HardwareAddrs))
- for _, hw := range d.HardwareAddrs {
- hws[hw] = presence.NewState()
- }
- ctx := log.Context(context.Background(), log.WithDisableBuffering(func(context.Context) bool { return true }))
- a, err := presence.NewARP(1)
- if err != nil {
- return err
- }
- ok, err := a.Present(ctx, ifs, hws)
- if err != nil {
- return err
- }
- log.Info(ctx, log.KV{K: "present", V: ok})
- for hw, state := range hws {
- log.Info(ctx, log.KV{K: "hw", V: hw}, log.KV{K: "present", V: state.Present()}, log.KV{K: "changed", V: state.Changed()})
- }
- return nil
- }
|