From 6281e50f3e3eccd66abdb505b799e589700a38b4 Mon Sep 17 00:00:00 2001 From: mic <562710164> Date: Fri, 17 Feb 2023 17:40:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=9A=E4=B9=89=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- define/define.go | 9 +++++++++ tcp/gnetserver.go | 36 ++++++++++++++++++++++++++++++++++++ ws/gnetserver.go | 35 +++++++++++++++++++++++++++++++++-- 3 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 define/define.go diff --git a/define/define.go b/define/define.go new file mode 100644 index 0000000..f93213b --- /dev/null +++ b/define/define.go @@ -0,0 +1,9 @@ +package define + +const ( + SYS_NET_ENV_START = 10000 + SYS_NET_ENV_BOOT uint16 = SYS_NET_ENV_START + iota + SYS_NET_ENV_SHUTDOWN + SYS_NET_ENV_OPEN + SYS_NET_ENV_CLOSE +) diff --git a/tcp/gnetserver.go b/tcp/gnetserver.go index 62b7bc9..8d9aa85 100644 --- a/tcp/gnetserver.go +++ b/tcp/gnetserver.go @@ -11,6 +11,7 @@ package tcpgnet import ( "fmt" "git.yhrjkj.com/YuanHong/YHEchoPackage/YHProto" + "git.yhrjkj.com/YuanHong/YHEchoPackage/define" "github.com/panjf2000/gnet/v2" goPool "github.com/panjf2000/gnet/v2/pkg/pool/goroutine" @@ -41,6 +42,10 @@ type GnetServer struct { func (s *GnetServer) addRoutes(r featuredRoutes) { for _, route := range r.routes { + if route.Command > define.SYS_NET_ENV_START { + logx.Errorf("命令标识不能超过%d", define.SYS_NET_ENV_START) + continue + } s.handlers.Store(route.Command, route.Handler) } } @@ -50,6 +55,15 @@ func (s *GnetServer) OnBoot(eng gnet.Engine) (action gnet.Action) { fmt.Sprintf("%s://%s", s.network, s.addr)) s.eng = eng + if handler, ok := s.handlers.Load(define.SYS_NET_ENV_BOOT); ok { + _ = s.workerPool.Submit( + func() { + h := handler.(HandlerFunc) + h(nil, nil) + }) + } + //处理pkg + return } @@ -57,6 +71,13 @@ func (s *GnetServer) OnShutdown(eng gnet.Engine) { //关闭工作池 logx.Infof("关闭服务 %s ", fmt.Sprintf("%s://%s", s.network, s.addr)) + if handler, ok := s.handlers.Load(define.SYS_NET_ENV_SHUTDOWN); ok { + _ = s.workerPool.Submit( + func() { + h := handler.(HandlerFunc) + h(nil, nil) + }) + } s.workerPool.Release() } @@ -69,6 +90,14 @@ func (s *GnetServer) OnOpen(c gnet.Conn) (out []byte, action gnet.Action) { } logx.Infof("在线:%d,最高在线:%d", connected, atomic.LoadInt32(&s.maxConnected)) + if handler, ok := s.handlers.Load(define.SYS_NET_ENV_OPEN); ok { + _ = s.workerPool.Submit( + func() { + h := handler.(HandlerFunc) + h(c, nil) + }) + } + return } @@ -78,6 +107,13 @@ func (s *GnetServer) OnClose(c gnet.Conn, err error) (action gnet.Action) { } connected := atomic.AddInt32(&s.connected, -1) logx.Infof("在线:%d,最高在线:%d", connected, atomic.LoadInt32(&s.maxConnected)) + if handler, ok := s.handlers.Load(define.SYS_NET_ENV_CLOSE); ok { + _ = s.workerPool.Submit( + func() { + h := handler.(HandlerFunc) + h(c, nil) + }) + } return } diff --git a/ws/gnetserver.go b/ws/gnetserver.go index 274a34f..57d837d 100644 --- a/ws/gnetserver.go +++ b/ws/gnetserver.go @@ -11,6 +11,7 @@ package wsgnet import ( "fmt" "git.yhrjkj.com/YuanHong/YHEchoPackage/YHProto" + "git.yhrjkj.com/YuanHong/YHEchoPackage/define" "github.com/gobwas/ws" "github.com/gobwas/ws/wsutil" @@ -43,6 +44,10 @@ type GnetServer struct { func (s *GnetServer) addRoutes(r featuredRoutes) { for _, route := range r.routes { + if route.Command > define.SYS_NET_ENV_START { + logx.Errorf("命令标识不能超过%d", define.SYS_NET_ENV_START) + continue + } s.handlers.Store(route.Command, route.Handler) } } @@ -51,7 +56,13 @@ func (s *GnetServer) OnBoot(eng gnet.Engine) (action gnet.Action) { logx.Infof("服务启动成功 %s ", fmt.Sprintf("%s://%s", s.network, s.addr)) s.eng = eng - + if handler, ok := s.handlers.Load(define.SYS_NET_ENV_BOOT); ok { + _ = s.workerPool.Submit( + func() { + h := handler.(HandlerFunc) + h(nil, nil) + }) + } return } @@ -59,6 +70,13 @@ func (s *GnetServer) OnShutdown(eng gnet.Engine) { //关闭工作池 logx.Infof("关闭服务 %s ", fmt.Sprintf("%s://%s", s.network, s.addr)) + if handler, ok := s.handlers.Load(define.SYS_NET_ENV_SHUTDOWN); ok { + _ = s.workerPool.Submit( + func() { + h := handler.(HandlerFunc) + h(nil, nil) + }) + } s.workerPool.Release() } @@ -70,7 +88,13 @@ func (s *GnetServer) OnOpen(c gnet.Conn) (out []byte, action gnet.Action) { atomic.SwapInt32(&s.maxConnected, connected) } logx.Infof("在线:%d,最高在线:%d", connected, atomic.LoadInt32(&s.maxConnected)) - + if handler, ok := s.handlers.Load(define.SYS_NET_ENV_OPEN); ok { + _ = s.workerPool.Submit( + func() { + h := handler.(HandlerFunc) + h(c, nil) + }) + } return } @@ -80,6 +104,13 @@ func (s *GnetServer) OnClose(c gnet.Conn, err error) (action gnet.Action) { } connected := atomic.AddInt32(&s.connected, -1) logx.Infof("在线:%d,最高在线:%d", connected, atomic.LoadInt32(&s.maxConnected)) + if handler, ok := s.handlers.Load(define.SYS_NET_ENV_CLOSE); ok { + _ = s.workerPool.Submit( + func() { + h := handler.(HandlerFunc) + h(c, nil) + }) + } return }