diff --git a/common/socket/ServerEvent.go b/common/socket/ServerEvent.go index 64f6773b5..0b4d42069 100644 --- a/common/socket/ServerEvent.go +++ b/common/socket/ServerEvent.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "log" + "os" "sync/atomic" "time" @@ -60,6 +61,10 @@ func (s *Server) OnClose(c gnet.Conn, _ error) (action gnet.Action) { } func (s *Server) OnTick() (delay time.Duration, action gnet.Action) { cool.Loger.Infof(context.Background(), "[connected-count=%v]", atomic.LoadInt64(&s.connected)) + if s.quit { + //执行正常退出逻辑 + os.Exit(0) + } return 10 * time.Second, gnet.None } func (s *Server) OnBoot(eng gnet.Engine) gnet.Action { diff --git a/common/socket/ServerOption.go b/common/socket/ServerOption.go index 55a559c90..01a5bd148 100644 --- a/common/socket/ServerOption.go +++ b/common/socket/ServerOption.go @@ -23,6 +23,7 @@ type Server struct { codec codec.SocketCodec handler Handler discorse bool + quit bool } type Option func(*Server) diff --git a/common/socket/kick.go b/common/socket/kick.go new file mode 100644 index 000000000..a84310940 --- /dev/null +++ b/common/socket/kick.go @@ -0,0 +1,19 @@ +package socket + +import ( + "blazing/logic/service/player" + "fmt" +) + +func (h *Server) KickPerson(a int) error { + + fmt.Println("检测到踢人请求", a) + player.KickPlayer(uint32(a)) + return nil +} +func (h *Server) QuitSelf(a int) error { + //TODO 这里待退出 + fmt.Println("检测到退出请求") + h.quit = true + return nil +} diff --git a/logic/controller/controller.go b/logic/controller/controller.go index b20c6e5be..73338c08c 100644 --- a/logic/controller/controller.go +++ b/logic/controller/controller.go @@ -6,9 +6,7 @@ import ( "blazing/cool" "blazing/logic/service/player" - "os" "strings" - "time" "bytes" "context" @@ -22,6 +20,11 @@ import ( ) var Maincontroller = NewController() //注入service + +func NewController() *Controller { + return &Controller{} +} + // 分发cmd逻辑实现Controller type Controller struct { Port uint16 @@ -32,40 +35,6 @@ type Controller struct { } } -type LogicClient struct { -} - -func (h *LogicClient) KickPerson(a int) error { - - fmt.Println("检测到踢人请求", a) - player.KickPlayer(uint32(a)) - return nil -} -func (h *LogicClient) QuitSelf(a int) error { - //TODO 这里待退出 - fmt.Println("检测到退出请求") - - go func() { - - for { - - //entity.ConutPlayer() - fmt.Println("当前在线人数", player.ConutPlayer()) - - if player.ConutPlayer() <= 0 { - //执行退出逻辑 - os.Exit(1) - } - <-time.After(5 * time.Second) - } - }() - //service.KickPlayer(uint32(a)) - return nil -} -func NewController() *Controller { - return &Controller{} -} - func ParseCmd[T any](a T, data []byte) T { // := info.NewLoginSidInfo() struc.Unpack(bytes.NewBuffer(data), &a) diff --git a/logic/server.go b/logic/server.go index ded817166..bc47dd4db 100644 --- a/logic/server.go +++ b/logic/server.go @@ -82,21 +82,19 @@ func Start(serverid uint16) { if err != nil { log.Fatalf("Failed to determine port: %v", err) } + ser := socket.NewServer( + socket.WithCORS(), + socket.WithPort(port), + socket.WithSocketHandler(head)) // go func() { - t := rpc.StartClient(serverid, uint16(port), new(controller.LogicClient)) + t := rpc.StartClient(serverid, uint16(port), ser) controller.Maincontroller.RPCClient = *t //将RPC赋值Start controller.Maincontroller.Port = uint16(port) //赋值服务器ID blservice.NewLoginServiceService().SetServerID(serverid, gconv.Uint16(port), t) - socket. - NewServer( - socket.WithCORS(), - socket.WithPort(port), - - socket.WithSocketHandler(head)). - Boot() + ser.Boot() } else { go rpc.StartServer()