main.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package main
  2. import (
  3. "fmt"
  4. "net/http"
  5. "os"
  6. "os/exec"
  7. "time"
  8. )
  9. /*
  10. ArozOS Launcher
  11. For auto update and future extension purpose
  12. Author: tobychui
  13. */
  14. const (
  15. launcherVersion = "1.0"
  16. )
  17. var (
  18. arozosRunning bool = false
  19. )
  20. func main() {
  21. //Print basic information
  22. fmt.Println("[LAUNCHER] ArozOS Launcher ver " + launcherVersion)
  23. binaryName := autoDetectExecutable()
  24. fmt.Println("[LAUNCHER] Choosing binary executable: " + binaryName)
  25. //Check if updates exists. If yes, overwrite it
  26. updateIfExists(binaryName)
  27. //Register the binary start path
  28. cmd := exec.Command(binaryName, os.Args[1:]...)
  29. cmd.Stdout = os.Stdout
  30. cmd.Stderr = os.Stderr
  31. //Register the http server to notify ArozOS there is a launcher will handle the update
  32. go func() {
  33. http.HandleFunc("/chk", func(w http.ResponseWriter, r *http.Request) {
  34. w.Write([]byte("LauncherA v" + launcherVersion))
  35. fmt.Println("[LAUNCHER] CHK RECV - DONE")
  36. })
  37. http.ListenAndServe("127.0.0.1:25576", nil)
  38. }()
  39. //Start the cmd
  40. for {
  41. cmd.Run()
  42. fmt.Println("[LAUNCHER] ArozOS Exited. Restarting in 3 seconds... ")
  43. time.Sleep(3 * time.Second)
  44. updateIfExists(binaryName)
  45. //Rebuild the start paramters
  46. cmd = exec.Command(binaryName, os.Args[1:]...)
  47. cmd.Stdout = os.Stdout
  48. cmd.Stderr = os.Stderr
  49. }
  50. }