package main import "log" import "os" import "time" import "os/user" import "github.com/gookit/config" import "github.com/gobuffalo/packr" import "git.wit.com/wit/gui" var GITCOMMIT string // this is passed in as an ldflag var GOVERSION string // this is passed in as an ldflag // import "github.com/davecgh/go-spew/spew" // reminder to use this for JSON // https://github.com/tidwall/gjson // value := gjson.Get(json, "name.last") // println(value.String()) // value := gjson.Get(json, friends.#[last=="Murphy"].first) // use mergo to merge structs // import "github.com/imdario/mergo" // mergo.Merge(&dest, src) // always sorted slice (new project) // https://github.com/yaa110/sslice // several smart slice functions (new project. April 2019) // https://github.com/elliotchance/pie // Exit and write out the config // (in yaml and json I guess.) // switch to json once it can be made human readable func onExit(err error) { log.Println("Sleep for 1 second") time.Sleep(1 * 1000 * 1000 * 1000) filename := config.String("configfile") log.Println("SAVING CONFIG FILE AS:", filename) f, err := os.Create(filename + ".yaml") if err == nil { config.DumpTo(f, "yaml") } f, err = os.Create(filename) if err == nil { config.DumpTo(f, "json") } if (err != nil) { panic(err) } os.Exit(0) } func main() { // This puts all the files in that directory in the binary // This directory includes the default config file if there is not already one box := packr.NewBox("./resources") defaultConfig, _ := box.FindString("cloud.json") // This will parse the command line and config file parseConfig(defaultConfig) // only test the socket code if no GUI if (config.String("nogui") == "true") { log.Println("Need to re-implement this") onExit(nil) } initChannel() go processEvents() go gorillaDial("v000185.testing.com.customers.wprod.wit.com:9000") go watchGUI() user, err := user.Current() if err != nil { onExit(err) } gui.Data.Width = config.Int("width") gui.Data.Height = config.Int("height") gui.Data.Version = "v0.4" gui.Data.GitCommit = GITCOMMIT gui.Data.GoVersion = GOVERSION gui.Data.ButtonClickNew = buttonClickNew gui.Data.HomeDir = user.HomeDir // Current User log.Println("Hi " + user.Name + " (id: " + user.Uid + ")") log.Println("Username: " + user.Username) log.Println("Home Dir: " + user.HomeDir) // Get "Real" User under sudo. // More Info: https://stackoverflow.com/q/29733575/402585 log.Println("Real User: " + os.Getenv("SUDO_USER")) // make this the main loop in an attempt to figure out the crashes // do not change this until the GUI is stable gui.GoMainWindow() } func buttonClickNew(b *gui.ButtonMap) { log.Println("buttonClickNew() b =", b) log.Println("\tb.Name", b.Name) log.Println("\tb.Note", b.Note) if (b.Note == "BACK") { gui.Data.State = "splash" } if (b.Note == "QUIT") { onExit(nil) } if (b.Note == "ADD") { log.Println("\tSHOULD ADD ACCOUNT HERE") if (gui.Data.AccNick != "") { log.Println("\tADDING ACCOUNT HERE") log.Println("\tADDING ACCOUNT HERE") log.Println("\tADDING ACCOUNT HERE") log.Println("\tData.AccNick = ", gui.Data.AccNick) log.Println("\tData.AccUser = ", gui.Data.AccUser) log.Println("\tData.AccPass = ", gui.Data.AccPass) config.Set("accounts." + gui.Data.AccNick + ".username", gui.Data.AccUser) config.Set("accounts." + gui.Data.AccNick + ".password", gui.Data.AccPass) config.Set("accounts." + gui.Data.AccNick + ".hostname", "v000185.testing.com.customers.wprod.wit.com") } } if (b.Note == "BMATH") { log.Println("\tTRIGGER BMATH HERE") log.Println("\tTRIGGER BMATH HERE") log.Println("\tTRIGGER BMATH HERE") gui.Data.State = "bmath" for { log.Println("Sleep() in buttonClickNew() gui.Data.State =", gui.Data.State) time.Sleep(200 * time.Millisecond) if (gui.Data.State == "bmath done") { count := countVMS(currentMessage) mh := gui.AddVmsTab(count) ReadReceivedData(currentMessage, mh) return } } } if (gui.Data.State == "splash") { gui.ShowAccountQuestionTab() gui.Data.State = "account1" return } else if (gui.Data.State == "account1") { gui.ShowAccountTab() gui.Data.State = "main" } else if (gui.Data.State == "main") { gui.ShowMainTab() gui.Data.State = "done" } } func watchGUI() { log.Println("Sleep(2000)") time.Sleep(2000 * time.Millisecond) for { log.Println("Sleep() in watchGUI() gui.Data.State =", gui.Data.State) time.Sleep(2000 * time.Millisecond) if (gui.Data.State == "bmath") { log.Println("\tTRIGGERING BMATH HERE") log.Println("\tTRIGGERING BMATH HERE") log.Println("\tTRIGGERING BMATH HERE") gorillaSendProtobuf() } if (gui.Data.State == "kill") { log.Println("gui.State = kill") log.Println("gui.State = kill") log.Println("gui.State = kill") os.Exit(0) } } }