支持控制台命令
This commit is contained in:
parent
aeade860be
commit
c8f4827f6c
|
@ -0,0 +1,17 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/kercylan98/minotaur/server"
|
||||||
|
"github.com/kercylan98/minotaur/utils/log"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
srv := server.New(server.NetworkWebsocket)
|
||||||
|
srv.RegConsoleCommandEvent("test", func(srv *server.Server) {
|
||||||
|
log.Info("Console", zap.String("Info", "Test"))
|
||||||
|
})
|
||||||
|
if err := srv.Run(":9999"); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,10 +1,12 @@
|
||||||
package server
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"github.com/kercylan98/minotaur/utils/log"
|
"github.com/kercylan98/minotaur/utils/log"
|
||||||
"github.com/kercylan98/minotaur/utils/runtimes"
|
"github.com/kercylan98/minotaur/utils/runtimes"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -17,6 +19,7 @@ type ConnectionClosedEventHandle func(srv *Server, conn *Conn)
|
||||||
type ReceiveCrossPacketEventHandle func(srv *Server, senderServerId int64, packet []byte)
|
type ReceiveCrossPacketEventHandle func(srv *Server, senderServerId int64, packet []byte)
|
||||||
type MessageErrorEventHandle func(srv *Server, message *Message, err error)
|
type MessageErrorEventHandle func(srv *Server, message *Message, err error)
|
||||||
type MessageLowExecEventHandle func(srv *Server, message *Message, cost time.Duration)
|
type MessageLowExecEventHandle func(srv *Server, message *Message, cost time.Duration)
|
||||||
|
type ConsoleCommandEventHandle func(srv *Server)
|
||||||
|
|
||||||
type event struct {
|
type event struct {
|
||||||
*Server
|
*Server
|
||||||
|
@ -29,6 +32,46 @@ type event struct {
|
||||||
receiveCrossPacketEventHandles []ReceiveCrossPacketEventHandle
|
receiveCrossPacketEventHandles []ReceiveCrossPacketEventHandle
|
||||||
messageErrorEventHandles []MessageErrorEventHandle
|
messageErrorEventHandles []MessageErrorEventHandle
|
||||||
messageLowExecEventHandles []MessageLowExecEventHandle
|
messageLowExecEventHandles []MessageLowExecEventHandle
|
||||||
|
|
||||||
|
consoleCommandEventHandles map[string][]ConsoleCommandEventHandle
|
||||||
|
|
||||||
|
consoleCommandEventHandleInitOnce sync.Once
|
||||||
|
}
|
||||||
|
|
||||||
|
// RegConsoleCommandEvent 控制台收到指令时将立即执行被注册的事件处理函数
|
||||||
|
func (slf *event) RegConsoleCommandEvent(command string, handle ConsoleCommandEventHandle) {
|
||||||
|
slf.consoleCommandEventHandleInitOnce.Do(func() {
|
||||||
|
slf.consoleCommandEventHandles = map[string][]ConsoleCommandEventHandle{}
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
var input string
|
||||||
|
_, _ = fmt.Scanln(&input)
|
||||||
|
handles, exist := slf.consoleCommandEventHandles[input]
|
||||||
|
if !exist {
|
||||||
|
switch input {
|
||||||
|
case "exit", "quit", "close", "shutdown":
|
||||||
|
log.Info("Console", zap.String("Receive", input), zap.String("Action", "Shutdown"))
|
||||||
|
slf.Server.Shutdown(nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.Error("Server", zap.String("Command", "unregistered"))
|
||||||
|
} else {
|
||||||
|
for _, handle := range handles {
|
||||||
|
handle(slf.Server)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
})
|
||||||
|
slf.consoleCommandEventHandles[command] = append(slf.consoleCommandEventHandles[command], handle)
|
||||||
|
log.Info("Server", zap.String("RegEvent", runtimes.CurrentRunningFuncName()), zap.String("handle", reflect.TypeOf(handle).String()))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *event) OnConsoleCommandEvent(command string) {
|
||||||
|
for _, handle := range slf.consoleCommandEventHandles[command] {
|
||||||
|
handle(slf.Server)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegStartBeforeEvent 在服务器初始化完成启动前立刻执行被注册的事件处理函数
|
// RegStartBeforeEvent 在服务器初始化完成启动前立刻执行被注册的事件处理函数
|
||||||
|
|
Loading…
Reference in New Issue