main.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. for {
  40. }
  41. //Start the cmd
  42. for {
  43. cmd.Run()
  44. fmt.Println("[LAUNCHER] ArozOS Exited. Restarting in 3 seconds... ")
  45. time.Sleep(3 * time.Second)
  46. updateIfExists(binaryName)
  47. //Rebuild the start paramters
  48. cmd = exec.Command(binaryName, os.Args[1:]...)
  49. cmd.Stdout = os.Stdout
  50. cmd.Stderr = os.Stderr
  51. }
  52. }