-
Notifications
You must be signed in to change notification settings - Fork 1
/
cmd.go
124 lines (103 loc) · 2.47 KB
/
cmd.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package cmd
import (
"errors"
"fmt"
"github.com/go-gourd/gourd/internal/command"
"github.com/go-gourd/gourd/internal/daemon"
"github.com/go-gourd/gourd/log"
"os"
"path"
"runtime"
"strings"
)
type Commend struct {
Name string
Explain string
Handler func(args []string)
}
var cmdList = make(map[string]Commend)
var defaultCmd *Commend
// Add 添加命令行
func Add(cmd Commend) {
cmdList[cmd.Name] = cmd
}
// SetDefault 设置默认执行命令 -无任何参数的清情况下
func SetDefault(cmd Commend) {
defaultCmd = &cmd
}
// Exec 执行命令行(由框架完成此操作)
func Exec(name string, args []string) error {
//首先判断是否内置命令
ok := coreCmdExec(args)
if !ok {
return nil
}
if _, ok := cmdList[name]; !ok {
return errors.New("command `" + name + "` does not exist")
}
//执行匹配到的命令
cmdList[name].Handler(args)
return nil
}
func ConsoleParse() {
// 取出运行参数
args := os.Args
// 获取当前可执行文件名称
filenameWithSuffix := path.Base(strings.Replace(args[0], "\\", "/", -1))
fileName := strings.TrimSuffix(filenameWithSuffix, path.Ext(filenameWithSuffix))
if len(args) == 1 {
if defaultCmd == nil {
fmt.Print(fmt.Sprintf(command.NoCmdHelp, fileName) + getCmdListHelps())
os.Exit(0)
}
//执行默认命令
defaultCmd.Handler(args)
return
}
// 解析执行命令行
err := Exec(args[1], args)
if err != nil {
fmt.Print(fmt.Sprintf(command.UndefinedCmdHelp, args[1], fileName) + getCmdListHelps())
os.Exit(0)
}
}
// 系统内置命令行处理
func coreCmdExec(args []string) bool {
// 内部命令
switch args[1] {
case "restart":
args = []string{args[0], args[1], "-d"}
fallthrough
case "start":
//守护进程
if len(args) >= 3 && args[2] == "-d" {
if runtime.GOOS == "windows" {
//守护进程模式暂不支持windows
fmt.Println("[Warn] The daemon does not support Windows.")
} else {
//守护进程,成功后会终止当前应用
daemon.Run()
log.Info("Daemon Running...")
fmt.Println("[Info] Daemon Running...")
os.Exit(0)
}
}
return false
case "stop":
//停止后台进程
daemon.StopDaemonProcess()
log.Info("Daemon Process Stopped.")
fmt.Println("[Info] Daemon Process Stopped.")
os.Exit(0)
return false
}
return true
}
// 获取所有自定义命令提示
func getCmdListHelps() string {
str := ""
for _, cmd := range cmdList {
str += fmt.Sprintf(" %-7s %s\n", cmd.Name, cmd.Explain)
}
return str
}