@@ -2,23 +2,13 @@ package run
22
33import (
44 "bytes"
5- "context"
65 "encoding/json"
76 "fmt"
87 "grm/common"
98 "grm/global"
10- "grm/router"
11- "grm/web"
12- "io/ioutil"
13- "log"
14- "net"
15- "net/http"
169 "os"
17- "os/signal"
1810 "strings"
19- "time"
2011
21- "github.com/gin-gonic/gin"
2212 "github.com/spf13/cobra"
2313)
2414
@@ -29,28 +19,40 @@ var CmdRun = &cobra.Command{
2919}
3020
3121var (
32- host string
33- port string
34- confirm string
22+ host string
23+ port string
24+ confirm string
25+ stop bool
26+ start bool
27+ install bool
28+ uninstall bool
29+ daemon bool
3530)
3631
3732func init () {
38- confirm = "n "
33+ confirm = "y "
3934 CmdRun .Flags ().StringVarP (& host , "host" , "H" , global .GlobalConf .Host , "input hostname" )
4035 CmdRun .Flags ().StringVarP (& port , "port" , "p" , global .GlobalConf .Port , "input port" )
36+ CmdRun .PersistentFlags ().BoolVarP (& install , "install" , "i" , false , "install service" )
37+ CmdRun .PersistentFlags ().BoolVarP (& uninstall , "uninstall" , "u" , false , "uninstall service" )
38+ CmdRun .PersistentFlags ().BoolVarP (& start , "start" , "" , false , "start service" )
39+ CmdRun .PersistentFlags ().BoolVarP (& stop , "stop" , "" , false , "stop service" )
40+ CmdRun .PersistentFlags ().BoolVarP (& daemon , "daemon" , "" , false , "daemon service" )
4141}
4242
4343func runFunction (cmd * cobra.Command , args []string ) {
4444
45- fmt .Printf ("%c[%d;%d;%dm%s%c[0m \n " , 0x1B , 0 , 40 , 33 , "================" , 0x1B )
46- fmt .Printf ("%c[%d;%d;%dm Host:%s%c[0m \n " , 0x1B , 0 , 40 , 33 , host , 0x1B )
47- fmt .Printf ("%c[%d;%d;%dm Port:%s%c[0m \n " , 0x1B , 0 , 40 , 33 , port , 0x1B )
48- fmt .Printf ("%c[%d;%d;%dm%s%c[0m \n " , 0x1B , 0 , 40 , 33 , "================" , 0x1B )
49- fmt .Printf ("%c[%d;%d;%dm%s%c[0m \n " , 0x1B , 0 , 40 , 33 , "Do you want to run the app at this address? Y/N" , 0x1B )
50- fmt .Scan (& confirm )
45+ if ! uninstall && ! start && ! stop && ! daemon {
46+ fmt .Printf ("%c[%d;%d;%dm%s%c[0m \n " , 0x1B , 0 , 40 , 33 , "================" , 0x1B )
47+ fmt .Printf ("%c[%d;%d;%dm Host:%s%c[0m \n " , 0x1B , 0 , 40 , 33 , host , 0x1B )
48+ fmt .Printf ("%c[%d;%d;%dm Port:%s%c[0m \n " , 0x1B , 0 , 40 , 33 , port , 0x1B )
49+ fmt .Printf ("%c[%d;%d;%dm%s%c[0m \n " , 0x1B , 0 , 40 , 33 , "================" , 0x1B )
50+ fmt .Printf ("%c[%d;%d;%dm%s%c[0m \n " , 0x1B , 0 , 40 , 33 , "Do you want to run the app at this address? Y/N" , 0x1B )
51+ fmt .Scan (& confirm )
5152
52- if strings .ToUpper (confirm ) == "N" {
53- os .Exit (0 )
53+ if strings .ToUpper (confirm ) == "N" {
54+ os .Exit (0 )
55+ }
5456 }
5557
5658 //保存host和port信息
@@ -60,48 +62,57 @@ func runFunction(cmd *cobra.Command, args []string) {
6062 global .GlobalConf .Port = port
6163 err := encoder .Encode (global .GlobalConf )
6264 if err != nil {
63- fmt .Println (err )
65+ fmt .Printf ("%c[%d;%d;%dm%s%c[0m \n " , 0x1B , 0 , 40 , 31 , err .Error (), 0x1B )
66+ os .Exit (0 )
6467 }
6568 if err = common .WriteData (buffer .Bytes ()); err != nil {
66- fmt .Println (err )
69+ fmt .Printf ("%c[%d;%d;%dm%s%c[0m \n " , 0x1B , 0 , 40 , 31 , err .Error (), 0x1B )
70+ os .Exit (0 )
6771 }
6872
69- gin .SetMode (gin .ReleaseMode )
70- gin .DefaultWriter = ioutil .Discard
71-
72- router := router .Init ()
73+ s := GetSrv ()
7374
74- router .StaticFS ("/static" , web .StaticsFs )
75-
76- srv := & http.Server {
77- Addr : net .JoinHostPort (host , port ),
78- Handler : router ,
79- }
80-
81- go func () {
82- if err := srv .ListenAndServe (); err != nil && err != http .ErrServerClosed {
83- log .Fatalf ("listen: %s\n " , err )
75+ if install || uninstall || start || stop {
76+ if install {
77+ if err := s .Install (); err != nil {
78+ fmt .Printf ("%c[%d;%d;%dm%s%c[0m \n " , 0x1B , 0 , 40 , 31 , err .Error (), 0x1B )
79+ return
80+ }
81+ fmt .Printf ("服务已安装" )
82+ return
8483 }
85- }()
86-
87- quit := make (chan os.Signal )
8884
89- signal . Notify ( quit , os . Interrupt )
90-
91- //输出LOGO
92- common . ShowLogo ( host , port )
93-
94- <- quit
95-
96- log . Println ( "Shutdown Server ..." )
85+ if uninstall {
86+ if err := s . Uninstall (); err != nil {
87+ fmt . Printf ( "%c[%d;%d;%dm%s%c[0m \n " , 0x1B , 0 , 40 , 31 , err . Error (), 0x1B )
88+ return
89+ }
90+ fmt . Printf ( "服务已卸载" )
91+ return
92+ }
9793
98- ctx , cancel := context .WithTimeout (context .Background (), 5 * time .Second )
94+ if start {
95+ if err := s .Start (); err != nil {
96+ fmt .Printf ("%c[%d;%d;%dm%s%c[0m \n " , 0x1B , 0 , 40 , 31 , err .Error (), 0x1B )
97+ return
98+ }
99+ fmt .Printf ("服务已启动" )
100+ return
101+ }
99102
100- defer cancel ()
103+ if stop {
104+ if err := s .Stop (); err != nil {
105+ fmt .Printf ("%c[%d;%d;%dm%s%c[0m \n " , 0x1B , 0 , 40 , 31 , err .Error (), 0x1B )
106+ return
107+ }
108+ fmt .Printf ("服务已关闭" )
109+ return
110+ }
111+ }
101112
102- if err := srv .Shutdown (ctx ); err != nil {
103- log .Fatal ("Server Shutdown:" , err )
113+ err = s .Run ()
114+ if err != nil {
115+ fmt .Printf ("%c[%d;%d;%dm%s%c[0m \n " , 0x1B , 0 , 40 , 31 , err .Error (), 0x1B )
104116 }
105117
106- log .Println ("Server exiting" )
107118}
0 commit comments