服务器启动事件
This commit is contained in:
parent
c23dd400ef
commit
2e4a48e0a5
|
@ -7,17 +7,45 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type ServerStartBeforeEventHandle func(srv *Server)
|
||||||
|
type ServerStartFinishEventHandle 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
|
||||||
|
serverStartFinishEventHandles []ServerStartFinishEventHandle
|
||||||
connectionReceivePacketEventHandles []ConnectionReceivePacketEventHandle
|
connectionReceivePacketEventHandles []ConnectionReceivePacketEventHandle
|
||||||
connectionOpenedEventHandles []ConnectionOpenedEventHandle
|
connectionOpenedEventHandles []ConnectionOpenedEventHandle
|
||||||
connectionClosedEventHandles []ConnectionClosedEventHandle
|
connectionClosedEventHandles []ConnectionClosedEventHandle
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RegServerStartBeforeEvent 在服务器初始化完成启动前立刻执行被注册的事件处理函数
|
||||||
|
func (slf *event) RegServerStartBeforeEvent(handle ServerStartBeforeEventHandle) {
|
||||||
|
slf.serverStartBeforeEventHandles = append(slf.serverStartBeforeEventHandles, handle)
|
||||||
|
log.Info("Server", zap.String("RegEvent", runtimes.CurrentRunningFuncName()), zap.String("handle", reflect.TypeOf(handle).String()))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *event) OnServerStartBeforeEvent() {
|
||||||
|
for _, handle := range slf.serverStartBeforeEventHandles {
|
||||||
|
handle(slf.Server)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// RegServerStartFinishEvent 在服务器启动完成时将立刻执行被注册的事件处理函数
|
||||||
|
func (slf *event) RegServerStartFinishEvent(handle ServerStartFinishEventHandle) {
|
||||||
|
slf.serverStartFinishEventHandles = append(slf.serverStartFinishEventHandles, handle)
|
||||||
|
log.Info("Server", zap.String("RegEvent", runtimes.CurrentRunningFuncName()), zap.String("handle", reflect.TypeOf(handle).String()))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *event) OnServerStartFinishEvent() {
|
||||||
|
for _, handle := range slf.serverStartFinishEventHandles {
|
||||||
|
handle(slf.Server)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// RegConnectionClosedEvent 在连接关闭后将立刻执行被注册的事件处理函数
|
// RegConnectionClosedEvent 在连接关闭后将立刻执行被注册的事件处理函数
|
||||||
func (slf *event) RegConnectionClosedEvent(handle ConnectionClosedEventHandle) {
|
func (slf *event) RegConnectionClosedEvent(handle ConnectionClosedEventHandle) {
|
||||||
if slf.network == NetworkHttp {
|
if slf.network == NetworkHttp {
|
||||||
|
|
|
@ -40,7 +40,7 @@ func (slf *MultipleServer) Run() {
|
||||||
}(slf.addresses[i], slf.servers[i])
|
}(slf.addresses[i], slf.servers[i])
|
||||||
}
|
}
|
||||||
|
|
||||||
time.Sleep(time.Second)
|
time.Sleep(500 * time.Millisecond)
|
||||||
|
|
||||||
log.Info("Server", zap.String("Minotaur Multiple Server", "===================================================================="))
|
log.Info("Server", zap.String("Minotaur Multiple Server", "===================================================================="))
|
||||||
for _, server := range slf.servers {
|
for _, server := range slf.servers {
|
||||||
|
|
|
@ -89,12 +89,14 @@ func (slf *Server) Run(addr string) error {
|
||||||
}
|
}
|
||||||
slf.grpcServer = grpc.NewServer()
|
slf.grpcServer = grpc.NewServer()
|
||||||
go func() {
|
go func() {
|
||||||
|
slf.OnServerStartBeforeEvent()
|
||||||
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()
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
@ -105,6 +107,7 @@ func (slf *Server) Run(addr string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
go connectionInitHandle(func() {
|
go connectionInitHandle(func() {
|
||||||
|
slf.OnServerStartBeforeEvent()
|
||||||
for {
|
for {
|
||||||
session, err := listener.AcceptKCP()
|
session, err := listener.AcceptKCP()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -138,6 +141,7 @@ func (slf *Server) Run(addr string) error {
|
||||||
gin.SetMode(gin.ReleaseMode)
|
gin.SetMode(gin.ReleaseMode)
|
||||||
}
|
}
|
||||||
go func() {
|
go func() {
|
||||||
|
slf.OnServerStartBeforeEvent()
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
@ -195,6 +199,7 @@ func (slf *Server) Run(addr string) error {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
go func() {
|
go func() {
|
||||||
|
slf.OnServerStartBeforeEvent()
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
@ -204,19 +209,22 @@ func (slf *Server) Run(addr string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if !slf.multiple {
|
if !slf.multiple {
|
||||||
|
time.Sleep(500 * time.Millisecond)
|
||||||
log.Info("Server", zap.String("Minotaur Server", "===================================================================="))
|
log.Info("Server", zap.String("Minotaur Server", "===================================================================="))
|
||||||
log.Info("Server", zap.String("Minotaur Server", "RunningInfo"),
|
log.Info("Server", zap.String("Minotaur Server", "RunningInfo"),
|
||||||
zap.Any("network", slf.network),
|
zap.Any("network", slf.network),
|
||||||
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()
|
||||||
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 {
|
||||||
case <-systemSignal:
|
case <-systemSignal:
|
||||||
slf.Shutdown(nil)
|
slf.Shutdown(nil)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
slf.OnServerStartFinishEvent()
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
Loading…
Reference in New Issue