"context"
"log"
"net"
+ "sync"
"time"
"github.com/grandcat/zeroconf"
)
+var deviceMap map[string][]string
+var mapMTX sync.Mutex
+
+func init() {
+ deviceMap = make(map[string][]string)
+}
+
//GetDeviceList retune device list
func GetDeviceList() ([]DeviceReturnInfo, error) {
- data, err := discoverDevice(3000)
- if err != nil {
- return nil, err
- }
var ret []DeviceReturnInfo
- for key, value := range data {
+ for key, value := range deviceMap {
ret = append(ret, DeviceReturnInfo{
DeviceIP: key,
ServiceNames: value})
//GetDeviceListWithService retune device list
func GetDeviceListWithService(target string) ([]string, error) {
- data, err := discoverDevice(3000)
- if err != nil {
- return nil, err
- }
var ret []string
- for key, value := range data {
+ for key, value := range deviceMap {
for _, val := range value {
if val == target {
ret = append(ret, key)
return ret, nil
}
+func discoveryBGR() {
+ discoveryPeriod := 30000
+ for {
+ data, err := discoverDevice(5000)
+ if err != nil {
+ log.Println(logPrefix, err)
+ continue
+ }
+
+ mapMTX.Lock()
+ // //Todo check the entity in map but not discovered
+ // for k, v in range deviceMap {
+
+ // }
+ for k, v := range data {
+ log.Println(logPrefix, "[discoveryBGR]", k, v)
+ deviceMap[k] = v
+ }
+ mapMTX.Unlock()
+
+ time.Sleep(time.Duration(discoveryPeriod) * time.Millisecond)
+ if discoveryPeriod > 60*60000 {
+ time.Sleep(60 * 60000 * time.Millisecond)
+ } else {
+ discoveryPeriod *= 2
+ }
+
+ }
+}
+
func discoverDevice(t int) (map[string][]string, error) {
domain := "local"
var logPrefix = "discoverymgr"
-// SimpleResponse structure
-type SimpleResponse struct {
- Return string `json:"Return"`
-}
-
-//DeviceReturnList structure
-type DeviceReturnList struct {
- ListOfDevices []DeviceReturnInfo `json:"ListOfDevices"`
-}
-
// DeviceReturnInfo structure
type DeviceReturnInfo struct {
DeviceIP string `json:"DeviceIP"`