添加定义系统事件

master v0.0.17
mic 2023-02-17 17:40:28 +08:00
parent b55fdda1de
commit 6281e50f3e
3 changed files with 78 additions and 2 deletions

9
define/define.go 100644
View File

@ -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
)

View File

@ -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
}

View File

@ -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
}