|
|
@@ -1,15 +1,76 @@
|
|
|
package main
|
|
|
|
|
|
-import "log"
|
|
|
+import (
|
|
|
+ "flag"
|
|
|
+ "fmt"
|
|
|
+ "os"
|
|
|
+
|
|
|
+ "github.com/kardianos/service"
|
|
|
+)
|
|
|
+
|
|
|
+var (
|
|
|
+ Version = "0.0.0.1"
|
|
|
+ BuildTime = ""
|
|
|
+)
|
|
|
+
|
|
|
+type program struct {
|
|
|
+ webUI *WebUI
|
|
|
+}
|
|
|
+
|
|
|
+// Start should not block. Do the actual work async.
|
|
|
+func (p *program) Start(s service.Service) error {
|
|
|
+ ui, err := NewWebUI(":8080")
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ p.webUI = ui
|
|
|
+
|
|
|
+ go func() {
|
|
|
+ if err := ui.Start(); err != nil {
|
|
|
+ fmt.Printf("webui stopped: %v\n", err)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+// Stop should not block. Return with a few seconds.
|
|
|
+func (p *program) Stop(s service.Service) error {
|
|
|
+ if p.webUI != nil {
|
|
|
+ return p.webUI.Stop()
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
|
|
|
func main() {
|
|
|
- webUI, err := NewWebUI(":8080")
|
|
|
+ svcFlag := flag.String("service", "", "Control the yfkj-webui service.")
|
|
|
+ flag.Parse()
|
|
|
+
|
|
|
+ cfg := &service.Config{
|
|
|
+ Name: "yfkj-webui",
|
|
|
+ DisplayName: "yfkj-webui",
|
|
|
+ Description: "Yunfei Device Web Management UI",
|
|
|
+ Option: map[string]any{
|
|
|
+ "Restart": "always",
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ svc, err := service.New(&program{}, cfg)
|
|
|
if err != nil {
|
|
|
- log.Fatal(err)
|
|
|
+ fmt.Println(err)
|
|
|
+ os.Exit(1)
|
|
|
+ }
|
|
|
+
|
|
|
+ if *svcFlag != "" {
|
|
|
+ if err := service.Control(svc, *svcFlag); err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
+ }
|
|
|
+ return
|
|
|
}
|
|
|
|
|
|
- log.Println("Web UI started on 0.0.0.0:8080")
|
|
|
- if err := webUI.Start(); err != nil {
|
|
|
- log.Fatal(err)
|
|
|
+ if err := svc.Run(); err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
+ os.Exit(1)
|
|
|
}
|
|
|
}
|