Skip to content

Instantly share code, notes, and snippets.

@stroborobo
Last active January 15, 2016 11:52
Show Gist options
  • Save stroborobo/5cc5db74af28706f8e7e to your computer and use it in GitHub Desktop.
Save stroborobo/5cc5db74af28706f8e7e to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"log"
"net/http"
"sync"
"github.com/oleksandr/bonjour"
)
var (
daaps = struct {
sync.RWMutex
s []*bonjour.ServiceEntry
}{
s: make([]*bonjour.ServiceEntry, 0),
}
)
func handler(wr http.ResponseWriter, req *http.Request) {
daaps.RLock()
defer daaps.RUnlock()
for _, se := range daaps.s {
fmt.Fprintf(wr, "%v\n", se)
//fmt.Fprintf(wr, "%s:%d\t%s\t%s\n", se.AddrIPv4, se.Port, se.Instance, strings.Join(se.Text, "; "))
}
}
func main() {
resolver, err := bonjour.NewResolver(nil)
if err != nil {
log.Fatalln(err)
}
results := make(chan *bonjour.ServiceEntry)
go func() {
for se := range results {
log.Printf("Found: %s\n", se.Instance)
daaps.Lock()
daaps.s = append(daaps.s, se)
daaps.Unlock()
}
}()
if err := resolver.Browse("_mpd._tcp", "local", results); err != nil {
log.Fatalln(err)
}
http.Handle("/", http.HandlerFunc(handler))
if err := http.ListenAndServe(":8374", nil); err != nil {
log.Fatalln(err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment