diff --git a/cmd/root.go b/cmd/root.go new file mode 100644 index 0000000..07ea804 --- /dev/null +++ b/cmd/root.go @@ -0,0 +1,33 @@ +package cmd +import ( + "errors" + "fmt" + "github.com/spf13/cobra" + "os" +) +var rootCmd = &cobra.Command{ + Use: "go-fly", + Short: "go-fly", + Long: `简洁快速的GO语言WEB在线客服 https://gofly.sopans.com`, + Args:args, + Run: func(cmd *cobra.Command, args []string) { + + }, +} +func args(cmd *cobra.Command, args []string) error{ + if len(args)<1{ + + return errors.New("至少需要一个参数!") + } + return nil +} +func Execute() { + if err := rootCmd.Execute(); err != nil { + fmt.Println(err) + os.Exit(1) + } +} +func init() { + rootCmd.AddCommand(versionCmd) + rootCmd.AddCommand(serverCmd) +} \ No newline at end of file diff --git a/main.go b/cmd/server.go similarity index 88% rename from main.go rename to cmd/server.go index 710570e..b5d7ff3 100644 --- a/main.go +++ b/cmd/server.go @@ -1,10 +1,10 @@ -package main +package cmd import ( - "flag" "github.com/gin-gonic/gin" - "github.com/swaggo/files" - "github.com/swaggo/gin-swagger" + "github.com/spf13/cobra" + ginSwagger "github.com/swaggo/gin-swagger" + "github.com/swaggo/gin-swagger/swaggerFiles" "github.com/taoshihan1991/imaptool/config" "github.com/taoshihan1991/imaptool/controller" "github.com/taoshihan1991/imaptool/docs" @@ -16,21 +16,26 @@ import ( "os/exec" "path/filepath" ) -var ( +var( port string tcpport string daemon bool GoflyConfig config.Config ) -func init(){ - //获取参数中的数据 - flag.StringVar(&port, "port", "8081", "监听端口号") - flag.StringVar(&tcpport, "tcpport", "8082", "监听tcp端口号") - flag.BoolVar(&daemon, "d", false, "是否为守护进程模式") - flag.Parse() - if flag.NFlag() < 1 { - flag.PrintDefaults() - } +var serverCmd = &cobra.Command{ + Use: "server", + Short: "example:go-fly server port 8081", + Example: "go-fly server -c config/", + Run: func(cmd *cobra.Command, args []string) { + run() + }, +} +func init() { + serverCmd.PersistentFlags().StringVarP(&port, "port", "p", "8081", "监听端口号") + serverCmd.PersistentFlags().StringVarP(&tcpport, "tcpport", "t", "8082", "监听tcp端口号") + serverCmd.PersistentFlags().BoolVarP(&daemon, "daemon", "d", false, "是否为守护进程模式") +} +func run(){ if daemon==true{ if os.Getppid() != 1{ // 将命令行参数中执行文件路径转换成可用路径 @@ -44,8 +49,6 @@ func init(){ os.Exit(0) } } -} -func main() { baseServer := "0.0.0.0:"+port tcpBaseServer := "0.0.0.0:"+tcpport @@ -141,4 +144,4 @@ func main() { //tcp服务 go controller.NewTcpServer(tcpBaseServer) engine.Run(baseServer) -} +} \ No newline at end of file diff --git a/cmd/version.go b/cmd/version.go new file mode 100644 index 0000000..92c36bb --- /dev/null +++ b/cmd/version.go @@ -0,0 +1,15 @@ +package cmd + +import ( + "fmt" + "github.com/spf13/cobra" + "github.com/taoshihan1991/imaptool/config" +) + +var versionCmd = &cobra.Command{ + Use: "version", + Short: "Print the version number of go-fly", + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("go-fly "+config.Version) + }, +} diff --git a/config/config.go b/config/config.go index 33c7d17..3baac2c 100644 --- a/config/config.go +++ b/config/config.go @@ -10,6 +10,7 @@ import ( var( PageSize uint=10 VisitorPageSize uint=8 + Version = "0.1.2" ) const Dir = "config/" const AccountConf = Dir + "account.json" diff --git a/go-fly.go b/go-fly.go new file mode 100644 index 0000000..8bdedc1 --- /dev/null +++ b/go-fly.go @@ -0,0 +1,132 @@ +package main + +import ( + "github.com/taoshihan1991/imaptool/cmd" +) +var ( +//port string +//tcpport string +//daemon bool +//GoflyConfig config.Config +) +//func init(){ +// //cmd.Execute() +// //获取参数中的数据 +// flag.StringVar(&port, "port", "8081", "监听端口号") +// flag.StringVar(&tcpport, "tcpport", "8082", "监听tcp端口号") +// flag.BoolVar(&daemon, "d", false, "是否为守护进程模式") +// flag.Parse() +// if flag.NFlag() < 1 { +// flag.PrintDefaults() +// } +// if daemon==true{ +// if os.Getppid() != 1{ +// // 将命令行参数中执行文件路径转换成可用路径 +// filePath, _ := filepath.Abs(os.Args[0]) +// cmd := exec.Command(filePath, os.Args[1:]...) +// // 将其他命令传入生成出的进程 +// cmd.Stdin = os.Stdin // 给新进程设置文件描述符,可以重定向到文件中 +// cmd.Stdout = os.Stdout +// cmd.Stderr = os.Stderr +// cmd.Start() // 开始执行新进程,不等待新进程退出 +// os.Exit(0) +// } +// } +//} +func main() { + cmd.Execute() + //baseServer := "0.0.0.0:"+port + //tcpBaseServer := "0.0.0.0:"+tcpport + //log.Println("start server...\r\ngo:http://" + baseServer) + //engine := gin.Default() + //engine.LoadHTMLGlob("static/html/*") + //engine.Static("/static", "./static") + // + ////首页 + //engine.GET("/", controller.Index) + //engine.GET("/index", tmpl.PageIndex) + ////登陆界面 + //engine.GET("/login", tmpl.PageLogin) + ////咨询界面 + //engine.GET("/chat_page",middleware.SetLanguage, tmpl.PageChat) + //engine.GET("/chatIndex",middleware.SetLanguage, tmpl.PageChat) + ////登陆验证 + //engine.POST("/check", controller.LoginCheckPass) + ////框架界面 + //engine.GET("/main",middleware.JwtPageMiddleware,tmpl.PageMain) + ////框架界面 + //engine.GET("/chat_main",middleware.JwtPageMiddleware,tmpl.PageChatMain) + ////验证权限 + //engine.POST("/check_auth",middleware.JwtApiMiddleware, controller.MainCheckAuth) + ////前后聊天 + //engine.GET("/chat_server", controller.NewChatServer) + ////获取消息 + //engine.GET("/messages", controller.GetVisitorMessage) + ////发送单条消息 + //engine.POST("/message",controller.SendMessage) + ////上传文件 + //engine.POST("/uploadimg",controller.UploadImg) + ////获取未读消息数 + //engine.GET("/message_status",controller.GetVisitorMessage) + ////设置消息已读 + //engine.POST("/message_status",controller.GetVisitorMessage) + // + ////获取客服信息 + //engine.GET("/kefuinfo",middleware.JwtApiMiddleware,middleware.RbacAuth, controller.GetKefuInfo) + //engine.GET("/kefuinfo_setting",middleware.JwtApiMiddleware,middleware.RbacAuth, controller.GetKefuInfoSetting) + //engine.POST("/kefuinfo",middleware.JwtApiMiddleware,middleware.RbacAuth, controller.PostKefuInfo) + //engine.DELETE("/kefuinfo",middleware.JwtApiMiddleware,middleware.RbacAuth, controller.DeleteKefuInfo) + //engine.GET("/kefulist",middleware.JwtApiMiddleware,middleware.RbacAuth, controller.GetKefuList) + ////设置页 + //engine.GET("/setting", tmpl.PageSetting) + ////设置mysql + //engine.GET("/setting_mysql", tmpl.PageSettingMysql) + ////角色列表 + //engine.GET("/roles",middleware.JwtApiMiddleware,middleware.RbacAuth, controller.GetRoleList) + //engine.GET("/roles_list", tmpl.PageRoleList) + //engine.POST("/role",middleware.JwtApiMiddleware,middleware.RbacAuth, controller.PostRole) + // + ////欢迎语 + //engine.GET("/setting_welcome", tmpl.PageSettingWelcome) + ////网页部署 + //engine.GET("/setting_deploy", tmpl.PageSettingDeploy) + ////邮箱列表 + //engine.GET("/mail_list", tmpl.PageMailList) + ////邮件夹列表 + //engine.GET("/folders", controller.GetFolders) + // + //engine.GET("/mysql",middleware.JwtApiMiddleware,middleware.RbacAuth, controller.MysqlGetConf) + //engine.POST("/mysql",middleware.JwtApiMiddleware,middleware.RbacAuth, controller.MysqlSetConf) + //engine.GET("/visitors_online", controller.GetVisitorOnlines) + //engine.GET("/clear_online_tcp", controller.DeleteOnlineTcp) + //engine.POST("/visitor",controller.PostVisitor) + //engine.GET("/visitor",middleware.JwtApiMiddleware, controller.GetVisitor) + //engine.GET("/visitors",middleware.JwtApiMiddleware, controller.GetVisitors) + //engine.GET("/setting_kefu_list",tmpl.PageKefuList) + //engine.GET("/statistics",middleware.JwtApiMiddleware, controller.GetStatistics) + ////前台接口 + //engine.GET("/notice",middleware.SetLanguage, controller.GetNotice) + //engine.POST("/notice",middleware.JwtApiMiddleware, controller.PostNotice) + //engine.DELETE("/notice",middleware.JwtApiMiddleware, controller.DelNotice) + //engine.GET("/notices",middleware.JwtApiMiddleware, controller.GetNotices) + ////前台引入js接口 + //engine.GET("/webjs", tmpl.PageWebJs) + ////前台引入css接口 + //engine.GET("/webcss", tmpl.PageWebCss) + ////文档服务 + //docs.SwaggerInfo.Title = "GO-FLY接口文档" + //docs.SwaggerInfo.Description = "go-fly即时通讯web客服管理系统 , 测试账户:kefu2 测试密码:123 类型:kefu" + //docs.SwaggerInfo.Version = "0.0.7" + ////docs.SwaggerInfo.Host = "127.0.0.1:"+port + //docs.SwaggerInfo.Host = "gofly.sopans.com" + //docs.SwaggerInfo.BasePath = "/" + ////docs.SwaggerInfo.Schemes = []string{"http"} + //engine.GET("/docs/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) + // + //logFile, _ := os.OpenFile("./fatal.log", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0660) + //tools.RedirectStderr(logFile) + // + ////tcp服务 + //go controller.NewTcpServer(tcpBaseServer) + //engine.Run(baseServer) +} diff --git a/go.mod b/go.mod index b6703ec..649dda7 100644 --- a/go.mod +++ b/go.mod @@ -17,6 +17,7 @@ require ( github.com/gobuffalo/packr/v2 v2.5.1 github.com/gorilla/websocket v1.4.2 github.com/jinzhu/gorm v1.9.14 + github.com/spf13/cobra v0.0.5 github.com/swaggo/files v0.0.0-20190704085106-630677cd5c14 github.com/swaggo/gin-swagger v1.2.0 github.com/swaggo/swag v1.5.1 diff --git a/go.sum b/go.sum index 4d68ede..b039232 100644 --- a/go.sum +++ b/go.sum @@ -89,6 +89,7 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jinzhu/gorm v1.9.14 h1:Kg3ShyTPcM6nzVo148fRrcMO6MNKuqtOUwnzqMgVniM= github.com/jinzhu/gorm v1.9.14/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs= @@ -151,8 +152,10 @@ github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= diff --git a/readme.md b/readme.md index dde8dba..d3b8ba7 100644 --- a/readme.md +++ b/readme.md @@ -61,9 +61,9 @@ ``` -3. 源码运行 go run main.go +3. 源码运行 go run go-fly.go port 8081 -4. 源码打包 go build main.go +4. 源码打包 go build go-fly.go ### nginx部署