feat: 增强 server.RegConsoleCommandEvent 函数,支持 url 格式输入命令,并将命令解析为指令和参数
This commit is contained in:
parent
ab72920084
commit
d2654cfc95
|
@ -0,0 +1,54 @@
|
|||
package server
|
||||
|
||||
// ConsoleParams 控制台参数
|
||||
type ConsoleParams map[string][]string
|
||||
|
||||
// Get 获取参数值
|
||||
func (slf ConsoleParams) Get(key string) string {
|
||||
if v, exist := slf[key]; exist && len(v) > 0 {
|
||||
return v[0]
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// GetValues 获取参数值
|
||||
func (slf ConsoleParams) GetValues(key string) []string {
|
||||
if v, exist := slf[key]; exist {
|
||||
return v
|
||||
}
|
||||
return []string{}
|
||||
}
|
||||
|
||||
// GetValueNum 获取参数值数量
|
||||
func (slf ConsoleParams) GetValueNum(key string) int {
|
||||
if v, exist := slf[key]; exist {
|
||||
return len(v)
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// Has 是否存在参数
|
||||
func (slf ConsoleParams) Has(key string) bool {
|
||||
_, exist := slf[key]
|
||||
return exist
|
||||
}
|
||||
|
||||
// Add 添加参数
|
||||
func (slf ConsoleParams) Add(key, value string) {
|
||||
if _, exist := slf[key]; !exist {
|
||||
slf[key] = []string{}
|
||||
}
|
||||
slf[key] = append(slf[key], value)
|
||||
}
|
||||
|
||||
// Del 删除参数
|
||||
func (slf ConsoleParams) Del(key string) {
|
||||
delete(slf, key)
|
||||
}
|
||||
|
||||
// Clear 清空参数
|
||||
func (slf ConsoleParams) Clear() {
|
||||
for k := range slf {
|
||||
delete(slf, k)
|
||||
}
|
||||
}
|
|
@ -6,9 +6,11 @@ import (
|
|||
"github.com/kercylan98/minotaur/utils/runtimes"
|
||||
"github.com/kercylan98/minotaur/utils/slice"
|
||||
"golang.org/x/crypto/ssh/terminal"
|
||||
"net/url"
|
||||
"os"
|
||||
"reflect"
|
||||
"runtime/debug"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
@ -21,7 +23,7 @@ type ConnectionOpenedEventHandle func(srv *Server, conn *Conn)
|
|||
type ConnectionClosedEventHandle func(srv *Server, conn *Conn, err any)
|
||||
type MessageErrorEventHandle func(srv *Server, message *Message, err error)
|
||||
type MessageLowExecEventHandle func(srv *Server, message *Message, cost time.Duration)
|
||||
type ConsoleCommandEventHandle func(srv *Server)
|
||||
type ConsoleCommandEventHandle func(srv *Server, command string, params ConsoleParams)
|
||||
type ConnectionOpenedAfterEventHandle func(srv *Server, conn *Conn)
|
||||
type ConnectionWritePacketBeforeEventHandle func(srv *Server, conn *Conn, packet []byte) []byte
|
||||
type ShuntChannelCreatedEventHandle func(srv *Server, guid int64)
|
||||
|
@ -102,7 +104,11 @@ func (slf *event) RegConsoleCommandEvent(command string, handle ConsoleCommandEv
|
|||
for {
|
||||
var input string
|
||||
_, _ = fmt.Scanln(&input)
|
||||
slf.OnConsoleCommandEvent(input)
|
||||
c2p := strings.SplitN(input, "?", 2)
|
||||
if len(c2p) == 1 {
|
||||
c2p = append(c2p, "")
|
||||
}
|
||||
slf.OnConsoleCommandEvent(c2p[0], c2p[1])
|
||||
}
|
||||
}()
|
||||
})
|
||||
|
@ -115,7 +121,7 @@ func (slf *event) RegConsoleCommandEvent(command string, handle ConsoleCommandEv
|
|||
log.Info("Server", log.String("RegEvent", runtimes.CurrentRunningFuncName()), log.String("handle", reflect.TypeOf(handle).String()))
|
||||
}
|
||||
|
||||
func (slf *event) OnConsoleCommandEvent(command string) {
|
||||
func (slf *event) OnConsoleCommandEvent(command string, paramsStr string) {
|
||||
slf.PushSystemMessage(func() {
|
||||
handles, exist := slf.consoleCommandEventHandles[command]
|
||||
if !exist {
|
||||
|
@ -127,8 +133,17 @@ func (slf *event) OnConsoleCommandEvent(command string) {
|
|||
}
|
||||
log.Warn("Server", log.String("Command", "unregistered"))
|
||||
} else {
|
||||
v, err := url.ParseQuery(paramsStr)
|
||||
if err != nil {
|
||||
log.Error("ConsoleCommandEvent", log.String("command", command), log.String("params", paramsStr), log.Err(err))
|
||||
return
|
||||
}
|
||||
var params = make(ConsoleParams)
|
||||
for key, value := range v {
|
||||
params[key] = value
|
||||
}
|
||||
handles.RangeValue(func(index int, value ConsoleCommandEventHandle) bool {
|
||||
value(slf.Server)
|
||||
value(slf.Server, command, params)
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
|
|
@ -444,6 +444,9 @@ func (slf *Server) Shutdown() {
|
|||
|
||||
// shutdown 停止运行服务器
|
||||
func (slf *Server) shutdown(err error) {
|
||||
if err != nil {
|
||||
log.Error("Server", log.String("state", "shutdown"), log.Err(err))
|
||||
}
|
||||
slf.isShutdown.Store(true)
|
||||
for slf.messageCounter.Load() > 0 {
|
||||
log.Info("Server", log.Any("network", slf.network), log.String("listen", slf.addr),
|
||||
|
|
Loading…
Reference in New Issue