192 lines
5.3 KiB
Go
192 lines
5.3 KiB
Go
package main
|
||
|
||
import (
|
||
"bufio"
|
||
"flag"
|
||
"fmt"
|
||
"io"
|
||
"net"
|
||
"net/http"
|
||
_ "net/http/pprof"
|
||
"os"
|
||
"time"
|
||
|
||
"git.rosy.net.cn/baseapi/platformapi/dingdingapi"
|
||
"git.rosy.net.cn/baseapi/utils"
|
||
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
|
||
"git.rosy.net.cn/jx-callback/business/jxstore/misc"
|
||
"git.rosy.net.cn/jx-callback/business/jxutils/tasks"
|
||
|
||
beego "github.com/astaxie/beego/server/web"
|
||
|
||
// 导入缺省订单调度器
|
||
|
||
"git.rosy.net.cn/jx-callback/globals"
|
||
"git.rosy.net.cn/jx-callback/globals/api"
|
||
"git.rosy.net.cn/jx-callback/globals/beegodb"
|
||
|
||
_ "git.rosy.net.cn/jx-callback/business/auth2/authprovider/alipay"
|
||
_ "git.rosy.net.cn/jx-callback/business/auth2/authprovider/dingding"
|
||
_ "git.rosy.net.cn/jx-callback/business/auth2/authprovider/mobile"
|
||
_ "git.rosy.net.cn/jx-callback/business/auth2/authprovider/password"
|
||
_ "git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin"
|
||
_ "git.rosy.net.cn/jx-callback/business/jxstore/partner/jds"
|
||
_ "git.rosy.net.cn/jx-callback/business/jxstore/partner/mt"
|
||
_ "git.rosy.net.cn/jx-callback/business/jxstore/partner/pdd"
|
||
_ "git.rosy.net.cn/jx-callback/business/jxstore/partner/taobao"
|
||
_ "git.rosy.net.cn/jx-callback/globals/api"
|
||
|
||
_ "git.rosy.net.cn/jx-callback/routers"
|
||
)
|
||
|
||
var (
|
||
GitCommit string
|
||
GitBranch string
|
||
GitState string
|
||
GitSummary string
|
||
BuildDate string
|
||
Version string
|
||
)
|
||
|
||
func Init() {
|
||
beegodb.Init()
|
||
|
||
buildTime, err := time.ParseInLocation(time.RFC3339, BuildDate, time.UTC)
|
||
if err == nil {
|
||
buildTime = buildTime.Local()
|
||
}
|
||
cms.InitServiceInfo(Version, buildTime, GitCommit)
|
||
misc.Init()
|
||
}
|
||
|
||
// 返回true表示非运行服务
|
||
func checkCmdFlags() bool {
|
||
var flagGitCommit bool
|
||
var flagGitBranch bool
|
||
var flagGitState bool
|
||
var flagGitSummary bool
|
||
var flagBuildDate bool
|
||
var flagVersion bool
|
||
var flagFullInfo bool
|
||
|
||
flag.BoolVar(&flagGitCommit, "gitcommit", false, "get gitcommit info")
|
||
flag.BoolVar(&flagGitBranch, "gitbranch", false, "get gitbranch info")
|
||
flag.BoolVar(&flagGitState, "gitstate", false, "get gitstate info")
|
||
flag.BoolVar(&flagGitSummary, "gitsummary", false, "get gitsummary info")
|
||
flag.BoolVar(&flagBuildDate, "builddate", false, "get builddate info")
|
||
flag.BoolVar(&flagVersion, "version", false, "get version info")
|
||
flag.BoolVar(&flagFullInfo, "fullinfo", false, "get fullinfo info")
|
||
flag.Parse()
|
||
|
||
if flagGitCommit || flagFullInfo {
|
||
fmt.Println(GitCommit)
|
||
}
|
||
if flagGitBranch || flagFullInfo {
|
||
fmt.Println(GitBranch)
|
||
}
|
||
if flagGitState || flagFullInfo {
|
||
fmt.Println(GitState)
|
||
}
|
||
if flagGitSummary || flagFullInfo {
|
||
fmt.Println(GitSummary)
|
||
}
|
||
if flagBuildDate || flagFullInfo {
|
||
fmt.Println(BuildDate)
|
||
}
|
||
if flagVersion || flagFullInfo {
|
||
fmt.Println(Version)
|
||
}
|
||
|
||
return len(os.Args) > 1
|
||
}
|
||
|
||
func main() {
|
||
if !checkCmdFlags() {
|
||
Init()
|
||
// if err := tasks.RefreshWeixinToken(); err != nil {
|
||
// globals.SugarLogger.Errorf("RefreshWeixinToken failed with error:%s", err)
|
||
// return
|
||
// }
|
||
// if err := tasks.RefreshWeixin2Token(); err != nil {
|
||
// globals.SugarLogger.Errorf("RefreshWeixin2Token failed with error:%s", err)
|
||
// return
|
||
// }
|
||
// if err := tasks.RefreshWeixin3Token(); err != nil {
|
||
// globals.SugarLogger.Errorf("RefreshWeixin3Token failed with error:%s", err)
|
||
// return
|
||
// }
|
||
// if err := tasks.RefreshPushToken(); err != nil {
|
||
// globals.SugarLogger.Errorf("RefreshPushToken failed with error:%s", err)
|
||
// return
|
||
// }
|
||
// 延时的原因是等回调准备好
|
||
if globals.IsProductEnv() || beego.BConfig.RunMode == "beta" {
|
||
utils.AfterFuncWithRecover(2*time.Second, func() {
|
||
if err := tasks.RefreshDingDingToken(); err != nil {
|
||
globals.SugarLogger.Errorf("RefreshDingDingToken failed with error:%s", err)
|
||
return
|
||
}
|
||
if globals.IsProductEnv() {
|
||
api.DingDingAPI.DeleteCallback()
|
||
if err := api.DingDingAPI.RegisterCallback([]string{dingdingapi.CBTagUserAddOrg, dingdingapi.CBTagUserModifyOrg, dingdingapi.CBTagUserLeaveOrg}, beego.AppConfig.DefaultString("dingdingCallbackToken", ""), beego.AppConfig.DefaultString("dingdingCallbackAESKey", ""), beego.AppConfig.DefaultString("dingdingCallbackURL", "")); err != nil {
|
||
globals.SugarLogger.Warnf("dingding RegisterCallback failed with error:%v", err)
|
||
}
|
||
}
|
||
})
|
||
}
|
||
cms.ResetJobTimers()
|
||
if beego.BConfig.RunMode != "prod" {
|
||
beego.BConfig.WebConfig.DirectoryIndex = true
|
||
beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
|
||
}
|
||
go func() {
|
||
if globals.IsMainProductEnv() {
|
||
http.ListenAndServe("0.0.0.0:6061", nil)
|
||
} else {
|
||
http.ListenAndServe("0.0.0.0:6060", nil)
|
||
}
|
||
}()
|
||
if globals.IsProductEnv() {
|
||
l, err := net.Listen("tcp", ":8000")
|
||
if err != nil {
|
||
fmt.Println("listen error:", err)
|
||
return
|
||
}
|
||
for {
|
||
c, err := l.Accept()
|
||
if err != nil {
|
||
fmt.Println("accept error:", err)
|
||
break
|
||
}
|
||
globals.SugarLogger.Debugf("tcp socket:", utils.Format4Output(c, true))
|
||
go handleConn(c)
|
||
}
|
||
}
|
||
beego.Run()
|
||
}
|
||
}
|
||
|
||
func handleConn(c net.Conn) {
|
||
if c == nil {
|
||
fmt.Println("conn is nil")
|
||
return
|
||
}
|
||
defer c.Close()
|
||
reader := bufio.NewReader(c)
|
||
for {
|
||
//ReadString阻塞,直到读到\n
|
||
msg, err := reader.ReadString('\n')
|
||
if err != nil {
|
||
if err == io.EOF {
|
||
fmt.Println("connection close")
|
||
} else {
|
||
fmt.Println("ReadString err", err)
|
||
}
|
||
return
|
||
}
|
||
fmt.Println("read data:", msg)
|
||
b := []byte("ok")
|
||
c.Write(b)
|
||
}
|
||
}
|