服务器启动事件

This commit is contained in:
kercylan98 2023-04-24 15:17:10 +08:00
parent 2e4a48e0a5
commit 3a26f3671a
2 changed files with 21 additions and 21 deletions

View File

@ -7,41 +7,41 @@ import (
"reflect" "reflect"
) )
type ServerStartBeforeEventHandle func(srv *Server) type StartBeforeEventHandle func(srv *Server)
type ServerStartFinishEventHandle func(srv *Server) type StartFinishEventHandle func(srv *Server)
type ConnectionReceivePacketEventHandle func(conn *Conn, packet []byte) type ConnectionReceivePacketEventHandle func(conn *Conn, packet []byte)
type ConnectionOpenedEventHandle func(conn *Conn) type ConnectionOpenedEventHandle func(conn *Conn)
type ConnectionClosedEventHandle func(conn *Conn) type ConnectionClosedEventHandle func(conn *Conn)
type event struct { type event struct {
*Server *Server
serverStartBeforeEventHandles []ServerStartBeforeEventHandle startBeforeEventHandles []StartBeforeEventHandle
serverStartFinishEventHandles []ServerStartFinishEventHandle startFinishEventHandles []StartFinishEventHandle
connectionReceivePacketEventHandles []ConnectionReceivePacketEventHandle connectionReceivePacketEventHandles []ConnectionReceivePacketEventHandle
connectionOpenedEventHandles []ConnectionOpenedEventHandle connectionOpenedEventHandles []ConnectionOpenedEventHandle
connectionClosedEventHandles []ConnectionClosedEventHandle connectionClosedEventHandles []ConnectionClosedEventHandle
} }
// RegServerStartBeforeEvent 在服务器初始化完成启动前立刻执行被注册的事件处理函数 // RegStartBeforeEvent 在服务器初始化完成启动前立刻执行被注册的事件处理函数
func (slf *event) RegServerStartBeforeEvent(handle ServerStartBeforeEventHandle) { func (slf *event) RegStartBeforeEvent(handle StartBeforeEventHandle) {
slf.serverStartBeforeEventHandles = append(slf.serverStartBeforeEventHandles, handle) slf.startBeforeEventHandles = append(slf.startBeforeEventHandles, handle)
log.Info("Server", zap.String("RegEvent", runtimes.CurrentRunningFuncName()), zap.String("handle", reflect.TypeOf(handle).String())) log.Info("Server", zap.String("RegEvent", runtimes.CurrentRunningFuncName()), zap.String("handle", reflect.TypeOf(handle).String()))
} }
func (slf *event) OnServerStartBeforeEvent() { func (slf *event) OnStartBeforeEvent() {
for _, handle := range slf.serverStartBeforeEventHandles { for _, handle := range slf.startBeforeEventHandles {
handle(slf.Server) handle(slf.Server)
} }
} }
// RegServerStartFinishEvent 在服务器启动完成时将立刻执行被注册的事件处理函数 // RegStartFinishEvent 在服务器启动完成时将立刻执行被注册的事件处理函数
func (slf *event) RegServerStartFinishEvent(handle ServerStartFinishEventHandle) { func (slf *event) RegStartFinishEvent(handle StartFinishEventHandle) {
slf.serverStartFinishEventHandles = append(slf.serverStartFinishEventHandles, handle) slf.startFinishEventHandles = append(slf.startFinishEventHandles, handle)
log.Info("Server", zap.String("RegEvent", runtimes.CurrentRunningFuncName()), zap.String("handle", reflect.TypeOf(handle).String())) log.Info("Server", zap.String("RegEvent", runtimes.CurrentRunningFuncName()), zap.String("handle", reflect.TypeOf(handle).String()))
} }
func (slf *event) OnServerStartFinishEvent() { func (slf *event) OnStartFinishEvent() {
for _, handle := range slf.serverStartFinishEventHandles { for _, handle := range slf.startFinishEventHandles {
handle(slf.Server) handle(slf.Server)
} }
} }

View File

@ -89,14 +89,14 @@ func (slf *Server) Run(addr string) error {
} }
slf.grpcServer = grpc.NewServer() slf.grpcServer = grpc.NewServer()
go func() { go func() {
slf.OnServerStartBeforeEvent() slf.OnStartBeforeEvent()
if err := slf.grpcServer.Serve(listener); err != nil { if err := slf.grpcServer.Serve(listener); err != nil {
slf.PushMessage(MessageTypeError, err, MessageErrorActionShutdown) slf.PushMessage(MessageTypeError, err, MessageErrorActionShutdown)
} }
}() }()
case NetworkTCP, NetworkTCP4, NetworkTCP6, NetworkUdp, NetworkUdp4, NetworkUdp6, NetworkUnix: case NetworkTCP, NetworkTCP4, NetworkTCP6, NetworkUdp, NetworkUdp4, NetworkUdp6, NetworkUnix:
go connectionInitHandle(func() { go connectionInitHandle(func() {
slf.OnServerStartBeforeEvent() slf.OnStartBeforeEvent()
if err := gnet.Serve(slf.gServer, protoAddr); err != nil { if err := gnet.Serve(slf.gServer, protoAddr); err != nil {
slf.PushMessage(MessageTypeError, err, MessageErrorActionShutdown) slf.PushMessage(MessageTypeError, err, MessageErrorActionShutdown)
} }
@ -107,7 +107,7 @@ func (slf *Server) Run(addr string) error {
return err return err
} }
go connectionInitHandle(func() { go connectionInitHandle(func() {
slf.OnServerStartBeforeEvent() slf.OnStartBeforeEvent()
for { for {
session, err := listener.AcceptKCP() session, err := listener.AcceptKCP()
if err != nil { if err != nil {
@ -141,7 +141,7 @@ func (slf *Server) Run(addr string) error {
gin.SetMode(gin.ReleaseMode) gin.SetMode(gin.ReleaseMode)
} }
go func() { go func() {
slf.OnServerStartBeforeEvent() slf.OnStartBeforeEvent()
if err := slf.httpServer.Run(addr); err != nil { if err := slf.httpServer.Run(addr); err != nil {
slf.PushMessage(MessageTypeError, err, MessageErrorActionShutdown) slf.PushMessage(MessageTypeError, err, MessageErrorActionShutdown)
} }
@ -199,7 +199,7 @@ func (slf *Server) Run(addr string) error {
} }
}) })
go func() { go func() {
slf.OnServerStartBeforeEvent() slf.OnStartBeforeEvent()
if err := http.ListenAndServe(slf.addr, nil); err != nil { if err := http.ListenAndServe(slf.addr, nil); err != nil {
slf.PushMessage(MessageTypeError, err, MessageErrorActionShutdown) slf.PushMessage(MessageTypeError, err, MessageErrorActionShutdown)
} }
@ -216,7 +216,7 @@ func (slf *Server) Run(addr string) error {
zap.String("listen", slf.addr), zap.String("listen", slf.addr),
) )
log.Info("Server", zap.String("Minotaur Server", "====================================================================")) log.Info("Server", zap.String("Minotaur Server", "===================================================================="))
slf.OnServerStartFinishEvent() slf.OnStartFinishEvent()
systemSignal := make(chan os.Signal, 1) systemSignal := make(chan os.Signal, 1)
signal.Notify(systemSignal, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT) signal.Notify(systemSignal, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
select { select {
@ -224,7 +224,7 @@ func (slf *Server) Run(addr string) error {
slf.Shutdown(nil) slf.Shutdown(nil)
} }
} else { } else {
slf.OnServerStartFinishEvent() slf.OnStartFinishEvent()
} }
return nil return nil