6 "github.com/grandcat/zeroconf"
10 instanceName = "vapord"
11 serviceName = "lanDiscover"
15 // Protocol decoration ZeroConf,which is a pure Golang library
16 // that employs Multicast DNS-SD.
17 type Protocol struct {
18 entries chan *zeroconf.ServiceEntry
19 server *zeroconf.Server
23 // NewProtocol create a specific Protocol.
24 func NewProtocol() *Protocol {
26 entries: make(chan *zeroconf.ServiceEntry),
27 quite: make(chan struct{}),
31 func (m *Protocol) getLanPeerLoop(event chan LANPeerEvent) {
34 case entry := <-m.entries:
35 event <- LANPeerEvent{IP: entry.AddrIPv4, Port: entry.Port}
42 func (m *Protocol) registerService(port int) error {
44 m.server, err = zeroconf.Register(instanceName, serviceName, domainName, port, nil, nil)
48 func (m *Protocol) registerResolver(event chan LANPeerEvent) error {
49 go m.getLanPeerLoop(event)
50 resolver, err := zeroconf.NewResolver(nil)
55 return resolver.Browse(context.Background(), serviceName, domainName, m.entries)
58 func (m *Protocol) stopResolver() {
62 func (m *Protocol) stopService() {