@@ -19,12 +19,11 @@ package main
19
19
20
20
import (
21
21
"context"
22
- "fmt"
23
22
"os"
24
23
"strconv"
25
24
26
- discovery "github.com/arduino/dummy-discovery"
27
25
properties "github.com/arduino/go-properties-orderedmap"
26
+ discovery "github.com/arduino/pluggable-discovery-protocol-handler"
28
27
"github.com/brutella/dnssd"
29
28
)
30
29
@@ -38,7 +37,7 @@ func main() {
38
37
const mdnsServiceName = "_arduino._tcp.local."
39
38
40
39
type MDNSDiscovery struct {
41
- started bool
40
+ cancelFunc func ()
42
41
}
43
42
44
43
func (d * MDNSDiscovery ) Hello (userAgent string , protocolVersion int ) error {
@@ -50,14 +49,21 @@ func (d *MDNSDiscovery) Start() error {
50
49
}
51
50
52
51
func (d * MDNSDiscovery ) Stop () error {
52
+ if d .cancelFunc != nil {
53
+ d .cancelFunc ()
54
+ d .cancelFunc = nil
55
+ }
53
56
return nil
54
57
}
55
58
59
+ func (d * MDNSDiscovery ) Quit () {
60
+ }
61
+
56
62
func (d * MDNSDiscovery ) List () ([]* discovery.Port , error ) {
57
63
return []* discovery.Port {}, nil
58
64
}
59
65
60
- func (d * MDNSDiscovery ) StartSync (eventCB discovery.EventCallback ) ( chan <- bool , error ) {
66
+ func (d * MDNSDiscovery ) StartSync (eventCB discovery.EventCallback , errorCB discovery. ErrorCallback ) error {
61
67
addFn := func (srv dnssd.Service ) {
62
68
eventCB ("add" , newBoardPortJSON (& srv ))
63
69
}
@@ -68,20 +74,11 @@ func (d *MDNSDiscovery) StartSync(eventCB discovery.EventCallback) (chan<- bool,
68
74
69
75
go func () {
70
76
if err := dnssd .LookupType (ctx , mdnsServiceName , addFn , remFn ); err != nil {
71
- _ = err // TODO: report ERROR
77
+ errorCB ( "mdns lookup error: " + err . Error ())
72
78
}
73
- fmt .Println ("CANCELED!" )
74
79
}()
75
-
76
- closeChan := make (chan bool )
77
- go func () {
78
- for range closeChan {
79
- cancel ()
80
- return
81
- }
82
- }()
83
-
84
- return closeChan , nil
80
+ d .cancelFunc = cancel
81
+ return nil
85
82
}
86
83
87
84
func newBoardPortJSON (port * dnssd.Service ) * discovery.Port {
@@ -91,7 +88,7 @@ func newBoardPortJSON(port *dnssd.Service) *discovery.Port {
91
88
}
92
89
93
90
props := properties .NewMap ()
94
- props .Set ("ttl" , port .TTL .String ( ))
91
+ props .Set ("ttl" , strconv . Itoa ( int ( port .TTL .Seconds ()) ))
95
92
props .Set ("hostname" , port .Hostname ())
96
93
props .Set ("port" , strconv .Itoa (port .Port ))
97
94
for key , value := range port .Text {
0 commit comments