122 lines
2.4 KiB
Go
122 lines
2.4 KiB
Go
package cmdline
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
"mongo.games.com/goserver/core/module"
|
|
)
|
|
|
|
var cmdpool = make(map[string]cmdExecuter)
|
|
|
|
type cmdGoroutineWapper struct {
|
|
}
|
|
|
|
type CmdArg struct {
|
|
Flag string
|
|
SimplifyFlag string
|
|
Required bool
|
|
}
|
|
|
|
type CmdArgParser struct {
|
|
cmeKV map[string]string
|
|
}
|
|
|
|
type cmdExecuter interface {
|
|
Execute(args []string)
|
|
ShowUsage()
|
|
}
|
|
|
|
func NewCmdArgParser(args []string) *CmdArgParser {
|
|
parser := &CmdArgParser{
|
|
cmeKV: make(map[string]string),
|
|
}
|
|
for _, arg := range args {
|
|
kv := strings.Split(arg, "=")
|
|
if len(kv) == 2 {
|
|
k := kv[0]
|
|
v := kv[1]
|
|
parser.cmeKV[k] = v
|
|
}
|
|
}
|
|
return parser
|
|
}
|
|
|
|
func RegisteCmd(cmdName string, executer cmdExecuter) {
|
|
cmdpool[strings.ToLower(cmdName)] = executer
|
|
}
|
|
|
|
func (cw *cmdGoroutineWapper) Start() {
|
|
if Config.SupportCmdLine {
|
|
go func() {
|
|
var (
|
|
reader = bufio.NewReader(os.Stdin)
|
|
cmdLine []byte
|
|
isPrefix bool
|
|
err error
|
|
)
|
|
|
|
for {
|
|
cmdLine, isPrefix, err = reader.ReadLine()
|
|
if err == nil && isPrefix == false {
|
|
params := strings.Split(string(cmdLine), " ")
|
|
if len(params) >= 1 {
|
|
cmdName := strings.ToLower(params[0])
|
|
if cmdExecute, exist := cmdpool[cmdName]; exist {
|
|
PostCmd(module.AppModule.Object, cmdExecute, params[1:])
|
|
}
|
|
}
|
|
}
|
|
time.Sleep(time.Second)
|
|
}
|
|
}()
|
|
}
|
|
}
|
|
|
|
func (this *CmdArgParser) ExtraIntArg(arg *CmdArg, val *int) {
|
|
if v, exist := this.cmeKV[arg.SimplifyFlag]; !exist {
|
|
if v, exist := this.cmeKV[arg.Flag]; !exist && arg.Required {
|
|
fmt.Println(arg.Flag, "must be give")
|
|
return
|
|
} else {
|
|
*val, _ = strconv.Atoi(v)
|
|
}
|
|
} else {
|
|
*val, _ = strconv.Atoi(v)
|
|
}
|
|
}
|
|
|
|
func (this *CmdArgParser) ExtraInt64Arg(arg *CmdArg, val *int64) {
|
|
if v, exist := this.cmeKV[arg.SimplifyFlag]; !exist {
|
|
if v, exist := this.cmeKV[arg.Flag]; !exist && arg.Required {
|
|
fmt.Println(arg.Flag, "must be give")
|
|
return
|
|
} else {
|
|
*val, _ = strconv.ParseInt(v, 10, 64)
|
|
}
|
|
} else {
|
|
*val, _ = strconv.ParseInt(v, 10, 64)
|
|
}
|
|
}
|
|
|
|
func (this *CmdArgParser) ExtraStringArg(arg *CmdArg, val *string) {
|
|
if v, exist := this.cmeKV[arg.SimplifyFlag]; !exist {
|
|
if v, exist := this.cmeKV[arg.Flag]; !exist && arg.Required {
|
|
fmt.Println(arg.Flag, "must be give")
|
|
return
|
|
} else {
|
|
*val = v
|
|
}
|
|
} else {
|
|
*val = v
|
|
}
|
|
}
|
|
|
|
func init() {
|
|
//module.RegistePreloadModule(&cmdGoroutineWapper{}, 0)
|
|
}
|