package main import ( "encoding/hex" "flag" "fmt" "io" "net" "net/http" _ "net/http/pprof" "os" "strconv" "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 } 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) buffer := make([]byte, 1024) for { n, err := c.Read(buffer) //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:", hex.EncodeToString(buffer[:n])) //1e00370200ff5000011b401b594155012d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2dff //data := []byte{0x1E, 0x00, 0x37, 0x02, 0x00, 0xff, 0x50, 0x00, 0x01, 0x1b, 0x40, 0x1b, 0x59, 0x41, 0x55, 0x01, 0x2d, // 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, // 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, // 0xff} data := "1E00C10200FF5000011B401B594155012D202D202D202D202D202D202D202D202D202D202D202D202D2D202D202D200AB2CBC3FB2020202020202020CAFDC1BF2020202020202020BDF0B6EE0AB0D7C7D0BCA620202020202031202020202020202020202031350A2D202D202D202D202D202D202D202D202D202D202D202D202D2D202D202D200A1b61021b2130D7DCBDF0B6EE3A31350A1D58021b5a000106160068747470733a2f2f7777772e62616964752e636f6d2f1b61000A0A0A1B40FF" c.Write(Hextob(data)) fmt.Println("write data: ", data) } } func Hextob(str string) []byte { slen := len(str) bHex := make([]byte, len(str)/2) ii := 0 for i := 0; i < len(str); i = i + 2 { if slen != 1 { ss := string(str[i]) + string(str[i+1]) bt, _ := strconv.ParseInt(ss, 16, 32) bHex[ii] = byte(bt) ii = ii + 1 slen = slen - 2 } } return bHex } func int2h8l8(i int64) (h, l string) { origin2 := fmt.Sprintf("%b", i) flag := 16 - len(origin2) for i := 0; i < flag; i++ { origin2 = "0" + origin2 } begin8 := origin2[:8] end8 := origin2[8:] r1, _ := strconv.ParseInt(begin8, 2, 32) r2, _ := strconv.ParseInt(end8, 2, 32) h = fmt.Sprintf("%x", r1) l = fmt.Sprintf("%x", r2) if len(h) < 2 { h = "0" + h } if len(l) < 2 { l = "0" + l } return h, l }