123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package neighbour
- import (
- "log"
- "time"
- "imuslab.com/arozos/mod/network/mdns"
- )
- /*
- This is a module for discovering nearby arozos systems.
- Require MDNS Service
- */
- type Discoverer struct {
- Host *mdns.MDNSHost
- LastScanningTime int64
- NearbyHosts []*mdns.NetworkHost
- d chan bool
- t *time.Ticker
- }
- //NEw Discoverer return a nearby Aroz Discover agent
- func NewDiscoverer(MDNS *mdns.MDNSHost) Discoverer {
- return Discoverer{
- Host: MDNS,
- LastScanningTime: -1,
- NearbyHosts: []*mdns.NetworkHost{},
- }
- }
- //Return a list of NetworkHost with the same domain
- func (d *Discoverer) GetNearbyHosts() []*mdns.NetworkHost {
- nearbyHosts := []*mdns.NetworkHost{}
- for _, host := range d.NearbyHosts {
- nearbyHosts = append(nearbyHosts, host)
- }
- return nearbyHosts
- }
- //Start Scanning, interval and scna Duration in seconds
- func (d *Discoverer) StartScanning(interval int, scanDuration int) {
- log.Println("ArozOS Neighbour Scanning Started")
- if d.ScannerRunning() {
- //Another scanner already running. Terminate it
- d.StopScanning()
- }
- //Create a new ticker with the given interval and duration
- ticker := time.NewTicker(time.Duration(interval) * time.Second)
- done := make(chan bool)
- //Start scanner routine
- go func() {
- for {
- select {
- case <-done:
- return
- case <-ticker.C:
- d.UpdateScan(scanDuration)
- }
- }
- }()
- //Update the Discoverer settings
- d.d = done
- d.t = ticker
- }
- func (d *Discoverer) UpdateScan(scanDuration int) {
- d.LastScanningTime = time.Now().Unix()
- results := d.Host.Scan(scanDuration, d.Host.Host.Domain)
- d.NearbyHosts = results
- }
- func (d *Discoverer) ScannerRunning() bool {
- if d.d != nil {
- return true
- } else {
- return false
- }
- }
- func (d *Discoverer) StopScanning() {
- if d.d != nil {
- //Another ticker already running. Terminate it
- d.d <- true
- //Clear the old ticker
- d.t.Stop()
- d.d = nil
- d.t = nil
- }
- log.Println("ArozOS Neighbour Scanning Stopped")
- }
|