package discoverymgr
const (
- //Watchout about the length of each values mdns constraints
- appName = "OrchestrationAgent"
- serviceType = "_orchestration._tcp"
- domain = "local."
- servicePort = 42425
- localAddrFilter = "127.0.0.1"
- maxTXTSize = (400 / 4)
+ //Service to Discover and Advertise Edge Orchestration Device
+ //any name, no longer than 20 character
+ serviceName = "OrchestrationAgent"
+ //fixed service type, search only fixed servicetype
+ serviceType = "_orchestration._tcp"
+ //mDNS only support local. domain
+ domain = "local."
+ servicePort = 42425
+ //max txt size of mdns service
+ maxTXTSize = 400
)
// ExitChan is orchestration agent exit chan
var ExitChan chan int
-
-// ServiceIdx is for unique service ID
-// var ServiceIdx uint64
-//Package discoverymgr wraps main functions of IoTivity/ocstack with golang to use Discovery functions in go project.
package discoverymgr
import (
var gServer *zeroconf.Server
-func setServiceNames(ServiceNames []string) {
- if len(ServiceNames) > maxTXTSize {
+//SetServiceNames set txt of mdns message
+func SetServiceNames(ServiceNames []string) {
+
+ var TXTSize int
+ for _, str := range ServiceNames {
+ TXTSize += len(str)
+ }
+ if TXTSize > maxTXTSize {
fmt.Println("TXT Size is Too much for mDNS TXT - 400B")
return
}
gServer.SetText(ServiceNames)
}
-//RegisterDevice register orchestration service
-func RegisterDevice(ServiceNames []string, ret chan error) {
- server, err := zeroconf.Register(appName, serviceType, domain, servicePort, ServiceNames, nil)
+func registerDevice(ServiceNames []string, ret chan error) {
+ server, err := zeroconf.Register(serviceName, serviceType, domain, servicePort, ServiceNames, nil)
if err != nil {
ret <- err
return
return nil, err
}
- var data = make(map[string][]string) //data[appname]
+ var data = make(map[string][]string) //data[deviceIP][[]ServiceNames]
entries := make(chan *zeroconf.ServiceEntry)
go func(results <-chan *zeroconf.ServiceEntry) {
for entry := range results {
ServiceNames = entry.Text
- if deviceIP == localAddrFilter {
- fmt.Println("Filtering local Addr 127.0.0.1")
- continue
- }
data[deviceIP] = ServiceNames
}
}(entries)
//@ToDo []sting Will be retrieved from configuremgr
//setServiceNames(ServiceNames)
ServiceNames := []string{"Distributed Web Engine", "Television", "Soundbox"}
- go RegisterDevice(ServiceNames, registerCh)
+ go registerDevice(ServiceNames, registerCh)
if err := <-registerCh; err != nil {
log.Println("[Fail] " + err.Error())
}
+++ /dev/null
-package test
-
-import (
- dm "discoverymgr"
- "testing"
-)
-
-var data = dm.AppReturnInfo{
- AppName: "GreetWorldApp",
- DeviceList: []dm.DeviceReturnInfo{
- {
- DeviceID: 1,
- DeviceName: "hello world#1",
- Status: "started",
- DeviceIP: "10.113.175.144",
- },
- {
- DeviceID: 2,
- DeviceName: "hello world#2",
- Status: "progressing",
- DeviceIP: "10.113.175.144",
- },
- },
-}
-
-func TestDeviceList(t *testing.T) {
- registerCh := make(chan error)
- ServiceNames := []string{"Distributed Web Engine", "Television", "Soundbox"}
- go RegisterDevice(ServiceNames, registerCh)
- if err := <-registerCh; err != nil {
- t.Error("fail")
- }
-
- ret, err := dm.DeviceList()
- if err != nil {
- t.Error("fail")
- return
- }
- t.Log(ret)
- if len(ret) != 1 {
- t.Error("fail")
- }
-
- ExitChan <- 1
-
- ret, err = dm.DeviceList()
- if err != nil {
- t.Error("fail")
- return
- }
- t.Log(ret)
- if len(ret) != 0 {
- t.Error("fail")
- }
-}