From b05ed0b59d27d17010a8721f2ed9fa0dd5e89404 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B0=E4=BA=AE?= Date: Sat, 20 Nov 2021 16:46:13 +0800 Subject: [PATCH] =?UTF-8?q?feature(1.2.8):=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - cron 相关 - socket 相关 --- .../controller/cron_handler/func_create.go | 4 +-- .../controller/cron_handler/func_detail.go | 4 +-- .../api/controller/cron_handler/func_list.go | 4 +-- .../controller/cron_handler/func_modify.go | 4 +-- .../api/controller/cron_handler/handler.go | 4 +-- .../tool_handler/func_sendmessage.go | 4 +-- .../server.go => api/repository/cron/cron.go} | 2 +- .../repository/cron/cron_add_job.go} | 2 +- .../repository/cron/cron_add_task.go} | 2 +- .../repository/cron/cron_remove_task.go} | 2 +- .../repository/cron/cron_start.go} | 2 +- .../repository/cron/cron_stop.go} | 2 +- .../repository/socket/socket.go} | 21 +++++++++--- .../repository/socket/socket_on_close.go} | 2 +- .../repository/socket/socket_on_message.go} | 2 +- .../repository/socket/socket_on_send.go} | 2 +- internal/router/router.go | 8 ++--- internal/router/router_socket.go | 4 +-- internal/services/cron/service.go | 6 ++-- .../system_message/func_connect.go | 34 ------------------- .../handler.go => sysmessage/sysmessage.go} | 33 ++++++++++-------- 21 files changed, 64 insertions(+), 84 deletions(-) rename internal/{cron/cron_server/server.go => api/repository/cron/cron.go} (98%) rename internal/{cron/cron_server/service_add_job.go => api/repository/cron/cron_add_job.go} (96%) rename internal/{cron/cron_server/service_add_task.go => api/repository/cron/cron_add_task.go} (94%) rename internal/{cron/cron_server/service_remove_task.go => api/repository/cron/cron_remove_task.go} (86%) rename internal/{cron/cron_server/service_start.go => api/repository/cron/cron_start.go} (98%) rename internal/{cron/cron_server/service_stop.go => api/repository/cron/cron_stop.go} (76%) rename internal/{websocket/socket_server/server.go => api/repository/socket/socket.go} (65%) rename internal/{websocket/socket_server/server_on_close.go => api/repository/socket/socket_on_close.go} (88%) rename internal/{websocket/socket_server/server_on_message.go => api/repository/socket/socket_on_message.go} (94%) rename internal/{websocket/socket_server/server_on_send.go => api/repository/socket/socket_on_send.go} (92%) delete mode 100755 internal/websocket/socket_conn/system_message/func_connect.go rename internal/websocket/{socket_conn/system_message/handler.go => sysmessage/sysmessage.go} (51%) diff --git a/internal/api/controller/cron_handler/func_create.go b/internal/api/controller/cron_handler/func_create.go index a71abc6..1accae0 100755 --- a/internal/api/controller/cron_handler/func_create.go +++ b/internal/api/controller/cron_handler/func_create.go @@ -6,7 +6,7 @@ import ( "github.com/xinliangnote/go-gin-api/internal/code" "github.com/xinliangnote/go-gin-api/internal/pkg/core" "github.com/xinliangnote/go-gin-api/internal/pkg/validation" - cron2 "github.com/xinliangnote/go-gin-api/internal/services/cron" + "github.com/xinliangnote/go-gin-api/internal/services/cron" "github.com/xinliangnote/go-gin-api/pkg/errno" ) @@ -67,7 +67,7 @@ func (h *handler) Create() core.HandlerFunc { return } - createData := new(cron2.CreateCronTaskData) + createData := new(cron.CreateCronTaskData) createData.Name = req.Name createData.Spec = req.Spec createData.Command = req.Command diff --git a/internal/api/controller/cron_handler/func_detail.go b/internal/api/controller/cron_handler/func_detail.go index 87bf44e..efde64e 100755 --- a/internal/api/controller/cron_handler/func_detail.go +++ b/internal/api/controller/cron_handler/func_detail.go @@ -6,7 +6,7 @@ import ( "github.com/xinliangnote/go-gin-api/internal/code" "github.com/xinliangnote/go-gin-api/internal/pkg/core" "github.com/xinliangnote/go-gin-api/internal/pkg/validation" - cron2 "github.com/xinliangnote/go-gin-api/internal/services/cron" + "github.com/xinliangnote/go-gin-api/internal/services/cron" "github.com/xinliangnote/go-gin-api/pkg/errno" "github.com/spf13/cast" @@ -66,7 +66,7 @@ func (h *handler) Detail() core.HandlerFunc { return } - searchOneData := new(cron2.SearchOneData) + searchOneData := new(cron.SearchOneData) searchOneData.Id = cast.ToInt32(ids[0]) info, err := h.cronService.Detail(ctx, searchOneData) diff --git a/internal/api/controller/cron_handler/func_list.go b/internal/api/controller/cron_handler/func_list.go index b92fd65..37a4d9b 100755 --- a/internal/api/controller/cron_handler/func_list.go +++ b/internal/api/controller/cron_handler/func_list.go @@ -7,7 +7,7 @@ import ( "github.com/xinliangnote/go-gin-api/internal/code" "github.com/xinliangnote/go-gin-api/internal/pkg/core" "github.com/xinliangnote/go-gin-api/internal/pkg/validation" - cron2 "github.com/xinliangnote/go-gin-api/internal/services/cron" + "github.com/xinliangnote/go-gin-api/internal/services/cron" "github.com/xinliangnote/go-gin-api/pkg/errno" "github.com/xinliangnote/go-gin-api/pkg/timeutil" @@ -91,7 +91,7 @@ func (h *handler) List() core.HandlerFunc { pageSize = 10 } - searchData := new(cron2.SearchData) + searchData := new(cron.SearchData) searchData.Page = req.Page searchData.PageSize = req.PageSize searchData.Name = req.Name diff --git a/internal/api/controller/cron_handler/func_modify.go b/internal/api/controller/cron_handler/func_modify.go index 781b4bb..c6e77a1 100755 --- a/internal/api/controller/cron_handler/func_modify.go +++ b/internal/api/controller/cron_handler/func_modify.go @@ -6,7 +6,7 @@ import ( "github.com/xinliangnote/go-gin-api/internal/code" "github.com/xinliangnote/go-gin-api/internal/pkg/core" "github.com/xinliangnote/go-gin-api/internal/pkg/validation" - cron2 "github.com/xinliangnote/go-gin-api/internal/services/cron" + "github.com/xinliangnote/go-gin-api/internal/services/cron" "github.com/xinliangnote/go-gin-api/pkg/errno" ) @@ -81,7 +81,7 @@ func (h *handler) Modify() core.HandlerFunc { id := int32(ids[0]) - modifyData := new(cron2.ModifyCronTaskData) + modifyData := new(cron.ModifyCronTaskData) modifyData.Name = req.Name modifyData.Spec = req.Spec modifyData.Command = req.Command diff --git a/internal/api/controller/cron_handler/handler.go b/internal/api/controller/cron_handler/handler.go index 82fa1a2..1bebab7 100644 --- a/internal/api/controller/cron_handler/handler.go +++ b/internal/api/controller/cron_handler/handler.go @@ -2,8 +2,8 @@ package cron_handler import ( "github.com/xinliangnote/go-gin-api/configs" + cronServer "github.com/xinliangnote/go-gin-api/internal/api/repository/cron" "github.com/xinliangnote/go-gin-api/internal/api/repository/redis" - "github.com/xinliangnote/go-gin-api/internal/cron/cron_server" "github.com/xinliangnote/go-gin-api/internal/pkg/core" "github.com/xinliangnote/go-gin-api/internal/pkg/db" "github.com/xinliangnote/go-gin-api/internal/services/cron" @@ -55,7 +55,7 @@ type handler struct { cronService cron.Service } -func New(logger *zap.Logger, db db.Repo, cache redis.Repo, cronServer cron_server.Server) Handler { +func New(logger *zap.Logger, db db.Repo, cache redis.Repo, cronServer cronServer.Server) Handler { return &handler{ logger: logger, cache: cache, diff --git a/internal/api/controller/tool_handler/func_sendmessage.go b/internal/api/controller/tool_handler/func_sendmessage.go index bc5c3f6..372c17d 100644 --- a/internal/api/controller/tool_handler/func_sendmessage.go +++ b/internal/api/controller/tool_handler/func_sendmessage.go @@ -7,7 +7,7 @@ import ( "github.com/xinliangnote/go-gin-api/internal/code" "github.com/xinliangnote/go-gin-api/internal/pkg/core" "github.com/xinliangnote/go-gin-api/internal/pkg/validation" - "github.com/xinliangnote/go-gin-api/internal/websocket/socket_conn/system_message" + "github.com/xinliangnote/go-gin-api/internal/websocket/sysmessage" "github.com/xinliangnote/go-gin-api/pkg/errno" "github.com/xinliangnote/go-gin-api/pkg/timeutil" ) @@ -49,7 +49,7 @@ func (h *handler) SendMessage() core.HandlerFunc { return } - conn, err := system_message.GetConn() + conn, err := sysmessage.GetConn() if err != nil { ctx.AbortWithError(errno.NewError( http.StatusBadRequest, diff --git a/internal/cron/cron_server/server.go b/internal/api/repository/cron/cron.go similarity index 98% rename from internal/cron/cron_server/server.go rename to internal/api/repository/cron/cron.go index 2387ef9..d827010 100644 --- a/internal/cron/cron_server/server.go +++ b/internal/api/repository/cron/cron.go @@ -1,4 +1,4 @@ -package cron_server +package cron import ( "sync" diff --git a/internal/cron/cron_server/service_add_job.go b/internal/api/repository/cron/cron_add_job.go similarity index 96% rename from internal/cron/cron_server/service_add_job.go rename to internal/api/repository/cron/cron_add_job.go index 9d4c649..5cf9917 100644 --- a/internal/cron/cron_server/service_add_job.go +++ b/internal/api/repository/cron/cron_add_job.go @@ -1,4 +1,4 @@ -package cron_server +package cron import ( "fmt" diff --git a/internal/cron/cron_server/service_add_task.go b/internal/api/repository/cron/cron_add_task.go similarity index 94% rename from internal/cron/cron_server/service_add_task.go rename to internal/api/repository/cron/cron_add_task.go index b16eb70..032362c 100644 --- a/internal/cron/cron_server/service_add_task.go +++ b/internal/api/repository/cron/cron_add_task.go @@ -1,4 +1,4 @@ -package cron_server +package cron import ( "strings" diff --git a/internal/cron/cron_server/service_remove_task.go b/internal/api/repository/cron/cron_remove_task.go similarity index 86% rename from internal/cron/cron_server/service_remove_task.go rename to internal/api/repository/cron/cron_remove_task.go index 7580d9a..ec705e3 100644 --- a/internal/cron/cron_server/service_remove_task.go +++ b/internal/api/repository/cron/cron_remove_task.go @@ -1,4 +1,4 @@ -package cron_server +package cron import "github.com/spf13/cast" diff --git a/internal/cron/cron_server/service_start.go b/internal/api/repository/cron/cron_start.go similarity index 98% rename from internal/cron/cron_server/service_start.go rename to internal/api/repository/cron/cron_start.go index 73843d4..b5811d2 100644 --- a/internal/cron/cron_server/service_start.go +++ b/internal/api/repository/cron/cron_start.go @@ -1,4 +1,4 @@ -package cron_server +package cron import ( "fmt" diff --git a/internal/cron/cron_server/service_stop.go b/internal/api/repository/cron/cron_stop.go similarity index 76% rename from internal/cron/cron_server/service_stop.go rename to internal/api/repository/cron/cron_stop.go index 98e4697..b818524 100644 --- a/internal/cron/cron_server/service_stop.go +++ b/internal/api/repository/cron/cron_stop.go @@ -1,4 +1,4 @@ -package cron_server +package cron func (s *server) Stop() { s.cron.Stop() diff --git a/internal/websocket/socket_server/server.go b/internal/api/repository/socket/socket.go similarity index 65% rename from internal/websocket/socket_server/server.go rename to internal/api/repository/socket/socket.go index fc288ca..a272d17 100644 --- a/internal/websocket/socket_server/server.go +++ b/internal/api/repository/socket/socket.go @@ -1,6 +1,9 @@ -package socket_server +package socket import ( + "net/http" + "time" + "github.com/xinliangnote/go-gin-api/internal/api/repository/redis" "github.com/xinliangnote/go-gin-api/internal/pkg/db" "github.com/xinliangnote/go-gin-api/pkg/errors" @@ -31,7 +34,14 @@ type Server interface { OnClose() } -func New(logger *zap.Logger, db db.Repo, cache redis.Repo, conn *websocket.Conn) (Server, error) { +var upGrader = websocket.Upgrader{ + HandshakeTimeout: 5 * time.Second, + CheckOrigin: func(r *http.Request) bool { + return true + }, +} + +func New(logger *zap.Logger, db db.Repo, cache redis.Repo, w http.ResponseWriter, r *http.Request, responseHeader http.Header) (Server, error) { if logger == nil { return nil, errors.New("logger required") } @@ -44,15 +54,16 @@ func New(logger *zap.Logger, db db.Repo, cache redis.Repo, conn *websocket.Conn) return nil, errors.New("cache required") } - if conn == nil { - return nil, errors.New("conn required") + ws, err := upGrader.Upgrade(w, r, responseHeader) + if err != nil { + return nil, errors.Wrap(err, "ws error") } return &server{ logger: logger, db: db, cache: cache, - socket: conn, + socket: ws, }, nil } diff --git a/internal/websocket/socket_server/server_on_close.go b/internal/api/repository/socket/socket_on_close.go similarity index 88% rename from internal/websocket/socket_server/server_on_close.go rename to internal/api/repository/socket/socket_on_close.go index a70c555..79290f3 100644 --- a/internal/websocket/socket_server/server_on_close.go +++ b/internal/api/repository/socket/socket_on_close.go @@ -1,4 +1,4 @@ -package socket_server +package socket import "go.uber.org/zap" diff --git a/internal/websocket/socket_server/server_on_message.go b/internal/api/repository/socket/socket_on_message.go similarity index 94% rename from internal/websocket/socket_server/server_on_message.go rename to internal/api/repository/socket/socket_on_message.go index f33c60c..e060786 100644 --- a/internal/websocket/socket_server/server_on_message.go +++ b/internal/api/repository/socket/socket_on_message.go @@ -1,4 +1,4 @@ -package socket_server +package socket import "go.uber.org/zap" diff --git a/internal/websocket/socket_server/server_on_send.go b/internal/api/repository/socket/socket_on_send.go similarity index 92% rename from internal/websocket/socket_server/server_on_send.go rename to internal/api/repository/socket/socket_on_send.go index d77bc1f..b27037e 100644 --- a/internal/websocket/socket_server/server_on_send.go +++ b/internal/api/repository/socket/socket_on_send.go @@ -1,4 +1,4 @@ -package socket_server +package socket import ( "github.com/gorilla/websocket" diff --git a/internal/router/router.go b/internal/router/router.go index 3a04193..59ec7c4 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -2,8 +2,8 @@ package router import ( "github.com/xinliangnote/go-gin-api/configs" + "github.com/xinliangnote/go-gin-api/internal/api/repository/cron" "github.com/xinliangnote/go-gin-api/internal/api/repository/redis" - "github.com/xinliangnote/go-gin-api/internal/cron/cron_server" "github.com/xinliangnote/go-gin-api/internal/pkg/core" "github.com/xinliangnote/go-gin-api/internal/pkg/db" "github.com/xinliangnote/go-gin-api/internal/pkg/metrics" @@ -21,14 +21,14 @@ type resource struct { db db.Repo cache redis.Repo middles middleware.Middleware - cronServer cron_server.Server + cronServer cron.Server } type Server struct { Mux core.Mux Db db.Repo Cache redis.Repo - CronServer cron_server.Server + CronServer cron.Server } func NewHTTPServer(logger *zap.Logger, cronLogger *zap.Logger) (*Server, error) { @@ -61,7 +61,7 @@ func NewHTTPServer(logger *zap.Logger, cronLogger *zap.Logger) (*Server, error) r.cache = cacheRepo // 初始化 CRON Server - cronServer, err := cron_server.New(cronLogger, dbRepo, cacheRepo) + cronServer, err := cron.New(cronLogger, dbRepo, cacheRepo) if err != nil { logger.Fatal("new cron err", zap.Error(err)) } diff --git a/internal/router/router_socket.go b/internal/router/router_socket.go index ed3d203..e51b361 100644 --- a/internal/router/router_socket.go +++ b/internal/router/router_socket.go @@ -1,11 +1,11 @@ package router import ( - "github.com/xinliangnote/go-gin-api/internal/websocket/socket_conn/system_message" + "github.com/xinliangnote/go-gin-api/internal/websocket/sysmessage" ) func setSocketRouter(r *resource) { - systemMessage := system_message.New(r.logger, r.db, r.cache) + systemMessage := sysmessage.New(r.logger, r.db, r.cache) // 无需记录日志 socket := r.mux.Group("/socket", r.middles.DisableLog()) diff --git a/internal/services/cron/service.go b/internal/services/cron/service.go index 6f61aa4..7ffeae6 100644 --- a/internal/services/cron/service.go +++ b/internal/services/cron/service.go @@ -1,9 +1,9 @@ package cron import ( + "github.com/xinliangnote/go-gin-api/internal/api/repository/cron" "github.com/xinliangnote/go-gin-api/internal/api/repository/db_repo/cron_task_repo" "github.com/xinliangnote/go-gin-api/internal/api/repository/redis" - "github.com/xinliangnote/go-gin-api/internal/cron/cron_server" "github.com/xinliangnote/go-gin-api/internal/pkg/core" "github.com/xinliangnote/go-gin-api/internal/pkg/db" ) @@ -25,10 +25,10 @@ type Service interface { type service struct { db db.Repo cache redis.Repo - cronServer cron_server.Server + cronServer cron.Server } -func New(db db.Repo, cache redis.Repo, cron cron_server.Server) Service { +func New(db db.Repo, cache redis.Repo, cron cron.Server) Service { return &service{ db: db, cache: cache, diff --git a/internal/websocket/socket_conn/system_message/func_connect.go b/internal/websocket/socket_conn/system_message/func_connect.go deleted file mode 100755 index bbd7e3c..0000000 --- a/internal/websocket/socket_conn/system_message/func_connect.go +++ /dev/null @@ -1,34 +0,0 @@ -package system_message - -import ( - "net/http" - "time" - - "github.com/xinliangnote/go-gin-api/internal/pkg/core" - "github.com/xinliangnote/go-gin-api/internal/websocket/socket_server" - - "github.com/gorilla/websocket" -) - -func (h *handler) Connect() core.HandlerFunc { - var upGrader = websocket.Upgrader{ - HandshakeTimeout: 5 * time.Second, - CheckOrigin: func(r *http.Request) bool { - return true - }, - } - - return func(ctx core.Context) { - ws, err := upGrader.Upgrade(ctx.ResponseWriter(), ctx.Request(), nil) - if err != nil { - return - } - - server, err = socket_server.New(h.logger, h.db, h.cache, ws) - if err != nil { - return - } - - go server.OnMessage() - } -} diff --git a/internal/websocket/socket_conn/system_message/handler.go b/internal/websocket/sysmessage/sysmessage.go similarity index 51% rename from internal/websocket/socket_conn/system_message/handler.go rename to internal/websocket/sysmessage/sysmessage.go index 2633b6b..59cd161 100644 --- a/internal/websocket/socket_conn/system_message/handler.go +++ b/internal/websocket/sysmessage/sysmessage.go @@ -1,25 +1,19 @@ -package system_message +package sysmessage import ( "github.com/xinliangnote/go-gin-api/internal/api/repository/redis" + "github.com/xinliangnote/go-gin-api/internal/api/repository/socket" "github.com/xinliangnote/go-gin-api/internal/pkg/core" "github.com/xinliangnote/go-gin-api/internal/pkg/db" - "github.com/xinliangnote/go-gin-api/internal/websocket/socket_server" "github.com/xinliangnote/go-gin-api/pkg/errors" "go.uber.org/zap" ) -var _ Handler = (*handler)(nil) - -var server socket_server.Server - -type Handler interface { - i() - - // Connect 建立 Socket 连接 - Connect() core.HandlerFunc -} +var ( + err error + server socket.Server +) type handler struct { logger *zap.Logger @@ -27,7 +21,7 @@ type handler struct { db db.Repo } -func New(logger *zap.Logger, db db.Repo, cache redis.Repo) Handler { +func New(logger *zap.Logger, db db.Repo, cache redis.Repo) *handler { return &handler{ logger: logger, cache: cache, @@ -35,7 +29,7 @@ func New(logger *zap.Logger, db db.Repo, cache redis.Repo) Handler { } } -func GetConn() (socket_server.Server, error) { +func GetConn() (socket.Server, error) { if server != nil { return server, nil } @@ -43,4 +37,13 @@ func GetConn() (socket_server.Server, error) { return nil, errors.New("conn is nil") } -func (h *handler) i() {} +func (h *handler) Connect() core.HandlerFunc { + return func(ctx core.Context) { + server, err = socket.New(h.logger, h.db, h.cache, ctx.ResponseWriter(), ctx.Request(), nil) + if err != nil { + return + } + + go server.OnMessage() + } +}