package main import ( "encoding/base64" "eps/models/etc" "eps/models/statusMgr" "eps/models/userMgr" _ "eps/routers" "eps/tcp/bds" "eps/tcp/robot" "eps/tcp/zz" "github.com/astaxie/beego" "github.com/astaxie/beego/context" "github.com/astaxie/beego/orm" _ "github.com/mattn/go-sqlite3" "strings" "wb/cc" "wb/cfg" "wb/ctrl" "wb/ii" "wb/lg" "wb/modbus" "wb/usr" ) func initLog() { dataPath := cfg.WbConfig.DataPath if beego.BConfig.RunMode == "prod" { lg.InitLog(lg.LevelInfo, dataPath+"/log") } else { lg.InitLog(lg.LevelDebug, dataPath+"/log") } } func initDb() { orm.RegisterDriver("sqlite", orm.DRSqlite) dbPath := cfg.WbConfig.DataPath + "/db/main.db" beego.Info("initDb file:", dbPath) orm.RegisterDataBase("default", "sqlite3", dbPath) postitionPath := cfg.WbConfig.DataPath + "/db/position.db" beego.Info("initDb file:", postitionPath) orm.RegisterDataBase(etc.DbNamePosition, "sqlite3", postitionPath) historyPath := cfg.WbConfig.DataPath + "/db/gsstatus.db" beego.Info("initDb file:", historyPath) orm.RegisterDataBase(etc.DbNameGsStatus, "sqlite3", historyPath) historyPath = cfg.WbConfig.DataPath + "/db/wpstatus.db" beego.Info("initDb file:", historyPath) orm.RegisterDataBase(etc.DbNameWpStatus, "sqlite3", historyPath) historyPath = cfg.WbConfig.DataPath + "/db/epsstatus.db" beego.Info("initDb file:", historyPath) orm.RegisterDataBase(etc.DbNameEpsStatus, "sqlite3", historyPath) orm.Debug = true } var needLogin bool var FilterUser = func(ctx *context.Context) { if v, _ := beego.AppConfig.Bool("demoEnable"); v && ctx.Input.URL() == "/demo" { return } if v, _ := beego.AppConfig.Bool("publicEnable"); v && ctx.Input.URL() == "/public" { return } switch ctx.Input.URL() { case "/login", "/logout", "/ViewStatus": return } _, ok := ctx.Input.Session(cc.SessionUser).(usr.Usr) if !ok && ctx.Request.RequestURI != "/login" { if needLogin == false { u := userMgr.User{} u.Role = "role_sysuser" ctx.Input.CruSession.Set(cc.SessionUser, u) return } lg.Debug("FilterUser need login: ", ctx.Input.URL(), ctx.Input.URI()) if strings.EqualFold("POST", ctx.Request.Method) { ctx.WriteString("need_login") return } redirect := ctx.Input.URI() redirectB64 := base64.URLEncoding.EncodeToString([]byte(redirect)) ctx.Redirect(302, "/login?redirect="+redirectB64) } } func main() { cfg.InitConfig() iot.InitThings("conf/iot/things.xml") initLog() initDb() ii.LoadItemInfo("conf/item/fields") modbus.LoadModelInfo("conf/mdbs") zz.LoadModelInfo("conf/zz/zz.xml") needLogin = beego.AppConfig.DefaultBool("needLogin", true) lg.Info("Init need login:", needLogin) beego.InsertFilter("/*", beego.BeforeRouter, FilterUser) ctrl.LoadSvcConfig("conf/svc") statusMgr.InitStatusMgr() //go mdbs.ServerRun() go bds.ServerRun() go zz.ServerRun() go robot.ServerRun() //for i := int16(1);i<99;i++{ // time.Sleep(2 * time.Second) // print(i) // go client.BdsClient(i) //} beego.Run() }