1818package main
1919
2020import (
21+ "context"
2122 "encoding/json"
22- "fmt"
23- "log"
2423
25- "github.com/oleksandr/bonjour "
24+ "github.com/brutella/dnssd "
2625)
2726
27+ var service = "_arduino._tcp.local."
28+
2829type syncOutputJSON struct {
2930 EventType string `json:"eventType"`
3031 Port * boardPortJSON `json:"port"`
@@ -43,32 +44,24 @@ func startSync() (chan<- bool, error) {
4344
4445 closeChan := make (chan bool )
4546
46- resolver , err := bonjour .NewResolver (nil )
47- if err != nil {
48- log .Println ("Failed to initialize resolver:" , err .Error ())
49- return nil , err
47+ addFn := func (srv dnssd.Service ) {
48+ outputSyncMessage (& syncOutputJSON {
49+ EventType : "add" ,
50+ Port : newBoardPortJSON (& srv ),
51+ })
5052 }
5153
52- results := make (chan * bonjour.ServiceEntry )
53-
54- go func (results chan * bonjour.ServiceEntry , exitCh chan <- bool ) {
55- for {
56- for e := range results {
57- log .Printf ("%+v" , e )
58- if e .AddrIPv4 != nil {
59- fmt .Println (e )
60- }
61- }
62- }
63- }(results , resolver .Exit )
54+ remFn := func (srv dnssd.Service ) {
55+ outputSyncMessage (& syncOutputJSON {
56+ EventType : "remove" ,
57+ Port : newBoardPortJSON (& srv ),
58+ })
59+ }
6460
65- // Sample output
66- //2018/12/12 18:05:14 &{ServiceRecord:{Instance:Arduino Service:_arduino._tcp Domain:local serviceName: serviceInstanceName: serviceTypeName:} HostName:Arduino.local. Port:65280 Text:[ssh_upload=no tcp_check=no auth_upload=yes board=uno2018] TTL:120 AddrIPv4:10.130.22.247 AddrIPv6:<nil>}
67- //&{{Arduino _arduino._tcp local } Arduino.local. 65280 [ssh_upload=no tcp_check=no auth_upload=yes board=uno2018] 120 10.130.22.247 <nil>}
61+ ctx , cancel := context .WithCancel (context .Background ())
62+ defer cancel ()
6863
69- err = resolver .Browse ("_arduino._tcp" , "" , results )
70- if err != nil {
71- log .Println ("Failed to browse:" , err .Error ())
64+ if err := dnssd .LookupType (ctx , service , addFn , remFn ); err != nil {
7265 return nil , err
7366 }
7467
0 commit comments