discoverymgr : substitute instant discovery to map based polling 97/203697/1
authordamon92 <damon92.lee@samsung.com>
Wed, 17 Apr 2019 05:45:12 +0000 (14:45 +0900)
committerdamon92 <damon92.lee@samsung.com>
Wed, 17 Apr 2019 05:53:01 +0000 (14:53 +0900)
Change-Id: I1e927a6d8a9bda465c637598e0052d47757f4641

src/discoverymgr/discovery_execution.go
src/discoverymgr/discovery_init.go
src/discoverymgr/discoverymgr_test.go
src/discoverymgr/types.go

index b2fbbe4..795dc71 100755 (executable)
@@ -20,20 +20,24 @@ import (
        "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})
@@ -44,13 +48,9 @@ func GetDeviceList() ([]DeviceReturnInfo, error) {
 
 //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)
@@ -61,6 +61,36 @@ func GetDeviceListWithService(target string) ([]string, error) {
        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"
 
index 4e9db30..09b8ebd 100755 (executable)
@@ -42,7 +42,8 @@ func InitDiscovery() (err error) {
                }
        }
 
-       ResetServiceName()
+       go discoveryBGR()
+
        return
 }
 
index 4bae696..1748c6f 100755 (executable)
@@ -36,6 +36,7 @@ func TestGetDeviceListWithService(t *testing.T) {
        doc := new(confdescription.Doc)
        doc.ServiceInfo.ServiceName = "test1"
        err = AddNewServiceName(doc)
+       time.Sleep(7 * time.Second)
        if err != nil {
                closeDiscovery()
                t.Fatal()
@@ -73,6 +74,7 @@ func TestGetDeviceList(t *testing.T) {
        if err != nil {
                t.Fatal()
        }
+       time.Sleep(7 * time.Second)
 
        ret, err := GetDeviceList()
        if err != nil {
index ee425c0..7aa5a0b 100755 (executable)
@@ -19,16 +19,6 @@ package discoverymgr
 
 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"`