From db9bbf24d1a89f0a000aca0892791d026e744d80 Mon Sep 17 00:00:00 2001 From: dencoded <33698537+dencoded@users.noreply.github.com> Date: Thu, 19 Mar 2020 00:08:08 -0400 Subject: [PATCH] new optional param --indi-server added --- main.go | 118 ++++++++++++++++++++++++++++----------------------- solo/mode.go | 5 +-- solo/solo.go | 46 +++++++------------- 3 files changed, 82 insertions(+), 87 deletions(-) diff --git a/main.go b/main.go index d5e7545..7dd6bc6 100644 --- a/main.go +++ b/main.go @@ -34,6 +34,7 @@ const ( var ( flagINDIServerManagerAddr string flagPHD2ServerAddr string + flagINDIServerAddr string flagINDIProfile string flagToken string flagConfFile string @@ -58,6 +59,12 @@ func init() { "raspberrypi.local:8624", "INDI-server Manager address (host:port)", ) + flag.StringVar( + &flagINDIServerAddr, + "indi-server", + "", + "INDI-server address (host:port) to connect without Web Manager", + ) flag.StringVar( &flagMode, "mode", @@ -130,17 +137,65 @@ func main() { indiHubAddr = "localhost:7667" // TODO: change this to optional DEV server } - if flagINDIServerManagerAddr == "" { - log.Fatal("'indi-server-manager' parameter is missing, the 'host:port' format is expected") - } + indiServerAddr := "" + indiDrivers := []*lib.INDIDriver{} + indiProfile := &lib.INDIProfile{} + if flagINDIServerAddr != "" { + // connect to INDI-server directly without Web Manager + if _, _, err := net.SplitHostPort(flagINDIServerAddr); err != nil { + log.Fatal("Bad syntax for 'indi-server' parameter, the 'host:port' format is expected") + } + log.Println("Will try to connect directly to INDI-server (Web Manager is not used)") + indiProfile.Name = flagINDIServerAddr // to let backend know that no Web Manager was used + indiServerAddr = flagINDIServerAddr + } else { + // connect to INDI-server using info from Web Manager + indiHost, _, err := net.SplitHostPort(flagINDIServerManagerAddr) + if err != nil { + log.Fatal("Bad syntax for 'indi-server-manager' parameter, the 'host:port' format is expected") + } + if flagINDIProfile == "" { + log.Fatal("'indi-profile' parameter is required") + } - indiHost, _, err := net.SplitHostPort(flagINDIServerManagerAddr) - if err != nil { - log.Fatal("Bad syntax for 'indi-server-manager' parameter, the 'host:port' format is expected") - } + // connect to INDI-server Manager + log.Printf("Connection to local INDI-Server Manager on %s...\n", flagINDIServerManagerAddr) + managerClient := manager.NewClient(flagINDIServerManagerAddr) + running, currINDIProfile, err := managerClient.GetStatus() + if err != nil { + log.Fatal(err) + } + log.Println("...OK") - if flagINDIProfile == "" { - log.Fatal("'indi-profile' parameter is required") + // start required profile if it is not active and running + if !running || currINDIProfile != flagINDIProfile { + log.Printf("Setting active INDI-profile to '%s'\n", flagINDIProfile) + if err := managerClient.StopServer(); err != nil { + log.Fatal(err) + } + if err := managerClient.StartProfile(flagINDIProfile); err != nil { + log.Fatal(err) + } + } else { + log.Printf("INDI-server is running with active INDI-profile '%s'\n", flagINDIProfile) + } + + // get profile connect data + indiProfile, err = managerClient.GetProfile(flagINDIProfile) + if err != nil { + log.Fatalf("could not get INDI-profile from INDI-server manager: %s", err) + } + indiServerAddr = fmt.Sprintf("%s:%d", indiHost, indiProfile.Port) + + // get profile drivers data + indiDrivers, err = managerClient.GetDrivers() + if err != nil { + log.Fatalf("could not get INDI-drivers info from INDI-server manager: %s", err) + } + log.Println("INDIDrivers:") + for _, d := range indiDrivers { + log.Printf("%+v", *d) + } } // read token from flag or from config file if exists @@ -151,45 +206,6 @@ func main() { } } - // connect to INDI-server Manager - log.Printf("Connection to local INDI-Server Manager on %s...\n", flagINDIServerManagerAddr) - managerClient := manager.NewClient(flagINDIServerManagerAddr) - running, currINDIProfile, err := managerClient.GetStatus() - if err != nil { - log.Fatal(err) - } - log.Println("...OK") - - // start required profile if it is not active and running - if !running || currINDIProfile != flagINDIProfile { - log.Printf("Setting active INDI-profile to '%s'\n", flagINDIProfile) - if err := managerClient.StopServer(); err != nil { - log.Fatal(err) - } - if err := managerClient.StartProfile(flagINDIProfile); err != nil { - log.Fatal(err) - } - } else { - log.Printf("INDI-server is running with active INDI-profile '%s'\n", flagINDIProfile) - } - - // get profile connect data - indiProfile, err := managerClient.GetProfile(flagINDIProfile) - if err != nil { - log.Fatalf("could not get INDI-profile from INDI-server manager: %s", err) - } - indiServerAddr = fmt.Sprintf("%s:%d", indiHost, indiProfile.Port) - - // get profile drivers data - indiDrivers, err := managerClient.GetDrivers() - if err != nil { - log.Fatalf("could not get INDI-drivers info from INDI-server manager: %s", err) - } - log.Println("INDIDrivers:") - for _, d := range indiDrivers { - log.Printf("%+v", *d) - } - // test connect to local INDI-server log.Printf("Test connection to local INDI-Server on %s...\n", indiServerAddr) indiConn, err := net.Dial("tcp", indiServerAddr) @@ -228,11 +244,7 @@ func main() { Os: runtime.GOOS, Arch: runtime.GOARCH, } - ccdDrivers := []string{} for i, driver := range indiDrivers { - if driver.Family == "CCDs" { - ccdDrivers = append(ccdDrivers, driver.Binary) - } indiHubHost.Drivers[i] = &indihub.INDIDriver{ Binary: driver.Binary, Family: driver.Family, @@ -295,7 +307,7 @@ func main() { } // prepare all modes - soloMode := solo.NewMode(indiHubClient, regInfo, indiServerAddr, ccdDrivers) + soloMode := solo.NewMode(indiHubClient, regInfo, indiServerAddr) shareMode := share.NewMode(indiHubClient, regInfo, indiServerAddr, flagPHD2ServerAddr, lib.ModeShare) roboticMode := share.NewMode(indiHubClient, regInfo, indiServerAddr, flagPHD2ServerAddr, lib.ModeRobotic) diff --git a/solo/mode.go b/solo/mode.go index 238864c..11d15f1 100644 --- a/solo/mode.go +++ b/solo/mode.go @@ -11,18 +11,16 @@ type Mode struct { indiServerAddr string indiHubClient indihub.INDIHubClient regInfo *indihub.RegisterInfo - ccdDrivers []string stopCh chan struct{} status string } -func NewMode(indiHubClient indihub.INDIHubClient, regInfo *indihub.RegisterInfo, indiServerAddr string, ccdDrivers []string) *Mode { +func NewMode(indiHubClient indihub.INDIHubClient, regInfo *indihub.RegisterInfo, indiServerAddr string) *Mode { return &Mode{ indiServerAddr: indiServerAddr, indiHubClient: indiHubClient, regInfo: regInfo, - ccdDrivers: ccdDrivers, stopCh: make(chan struct{}, 1), } } @@ -40,7 +38,6 @@ func (s *Mode) Start() { soloAgent := New( s.indiServerAddr, soloClient, - s.ccdDrivers, ) go func() { diff --git a/solo/solo.go b/solo/solo.go index a7da9da..7d79a1c 100644 --- a/solo/solo.go +++ b/solo/solo.go @@ -18,8 +18,8 @@ var ( getProperties = []byte("") enableBLOB = "Also" - setBLOBVector = []byte("