func (Server) edgeParseServiceEntry(msg *dns.Msg) (*ServiceEntry, error) {
	sections := append(msg.Answer, msg.Ns...)
	sections = append(sections, msg.Extra...)
	entry := newEntryFromAnswer(sections)
	if entry == nil {
		return nil, errors.New("NO TXT && NO SRV")
	}
	appendEntryIP(entry, sections)
	return entry, nil
}
EdgeParseServiceEntry parse ServiceEntry from dns msg
filter messages by serviceType "_orchestration._tcp"
package zeroconf
import (
	"log"
	"net"
	"strings"
	"errors"
	"github.com/miekg/dns"
)
var edgeServiceType string
var EdgeExportedServiceEntry chan *ServiceEntry
func EdgeGetSubscriberChan() (chan *ServiceEntry, error) {
	if EdgeExportedServiceEntry != nil {
		return nil, errors.New("Subscribe Chan is Made Before")
	}
	EdgeExportedServiceEntry = make(chan *ServiceEntry, 32)
	return EdgeExportedServiceEntry, nil
}
func EdgeRegisterProxy(instance, service, domain string, port int,
	host string, ips []string, text []string,
	ifaces []net.Interface) (*Server, *ServiceEntry, error) {
	edgeServiceType = service
	server, err := RegisterProxy(instance, service, domain, port, host, ips, text, ifaces)
	if err != nil {
		return nil, nil, err
	}
	err = server.EdgeAdvertise()
	if err != nil {
		return nil, nil, err
	}
	return server, server.service, err
}
func (s *Server) EdgeGetText() []string {
	return s.service.Text
}
func (s *Server) EdgeResetServer(newipv4s []net.IP) {
	s.service.AddrIPv4 = newipv4s
	select {
	case EdgeExportedServiceEntry <- nil:
	default:
		log.Println("send Chan Full")
	}
	s.EdgeAdvertise()
	return
}
func (s *Server) edgeHandleQuery(msg *dns.Msg, ifIndex int, from net.Addr) error {
	_, err := s.edgeParseIPv4(from)
	if err != nil {
		return err
	}
	entry, err := s.edgeParseServiceEntry(msg)
	if err != nil {
		return err
	}
	select {
	case EdgeExportedServiceEntry <- entry:
	default:
		log.Println("send Chan Full")
	}
	if msg.Question != nil {
		err = s.edgeSendUnicastResponse(msg, ifIndex, from)
	}
	return err
}
func (Server) edgeParseIPv4(from net.Addr) (string, error) {
	deviceIPPORT := strings.Split(from.String(), ":")
	srcIP := deviceIPPORT[0]
	isV4 := net.ParseIP(srcIP)
	if isV4.To4() == nil {
		return "", errors.New("Do Not Handle IPv6")
	}
	return srcIP, nil
}