main.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. package main
  2. import (
  3. "box-gm/utils"
  4. "fmt"
  5. "github.com/astaxie/beego"
  6. // "github.com/drone/routes"
  7. "box-gm/backup"
  8. "box-gm/models"
  9. _ "box-gm/routers"
  10. "database/sql"
  11. "log"
  12. "os"
  13. "time"
  14. "github.com/astaxie/beego/orm"
  15. _ "github.com/go-sql-driver/mysql"
  16. _ "github.com/mattn/go-sqlite3"
  17. )
  18. var dsn = "./admin.db"
  19. func init() {
  20. //会话保存到文件中
  21. beego.BConfig.WebConfig.Session.SessionOn = true
  22. }
  23. func TimeToStr(i int64) string {
  24. if i == int64(0) {
  25. return ""
  26. }
  27. return time.Unix(int64(i), 0).Format("2006-01-02 15:04:05")
  28. }
  29. func GetSelectStatus(id1 int64, id2 int64) string {
  30. log.Printf("GetSelectStatus id1[%d] id2[%d]", id1, id2)
  31. if id1 == id2 {
  32. return "selected"
  33. }
  34. return ""
  35. }
  36. // 服务器状态
  37. func ServerStatus(s int) string {
  38. if s == 1 {
  39. return "正在运行"
  40. }
  41. if s == 0 {
  42. return "已停止"
  43. }
  44. return ""
  45. }
  46. func PermissionToStr(n int64) string {
  47. ret := ""
  48. p := models.GetPermissions()
  49. for i := 0; i < len(p); i++ {
  50. if (n & (1 << uint(p[i].Id))) != 0 {
  51. if ret == "" {
  52. ret = p[i].Name
  53. } else {
  54. ret = ret + " | " + p[i].Name
  55. }
  56. }
  57. }
  58. return ret
  59. }
  60. func GetRoleNameById(id int64) string {
  61. role := models.GetRoleById(id)
  62. if role == nil {
  63. return ""
  64. }
  65. return role.Name
  66. }
  67. func TimeCmdOperate(s int) string {
  68. if s == 1 {
  69. return "关闭登录"
  70. }
  71. if s == 2 {
  72. return "合服"
  73. }
  74. return ""
  75. }
  76. func TimeCmdOperateStatus(s int) string {
  77. if s == 0 {
  78. return "未执行"
  79. }
  80. if s == 1 {
  81. return "已执行"
  82. }
  83. return ""
  84. }
  85. // 权重物品列表
  86. func WeightItems(items []*models.ExchangeItemsInfo) string {
  87. cnt := ""
  88. for _, v := range items {
  89. if cnt != "" {
  90. cnt += "|"
  91. }
  92. cnt += fmt.Sprintf("%s%d,权重:%d", models.GetItemName(v.ItemId), v.Count, v.Weight)
  93. }
  94. return cnt
  95. }
  96. // 道具列表
  97. func BeegoItemNameList(items []int) string {
  98. cnt := ""
  99. for _, v := range items {
  100. if cnt != "" {
  101. cnt += ","
  102. }
  103. cnt += fmt.Sprintf("%s", models.GetItemName(v))
  104. }
  105. return cnt
  106. }
  107. // 玩家昵称
  108. func BeegoGetPlayerNickname(uid int) string {
  109. return utils.GetPlayerNickname(uid)
  110. }
  111. // 初始化beego fun
  112. func initBeegoFunMap() {
  113. beego.AddFuncMap("TimeToStr", TimeToStr)
  114. beego.AddFuncMap("GetSelectStatus", GetSelectStatus)
  115. beego.AddFuncMap("ServerStatus", ServerStatus)
  116. beego.AddFuncMap("PermissionToStr", PermissionToStr)
  117. beego.AddFuncMap("GetRoleNameById", GetRoleNameById)
  118. beego.AddFuncMap("TimeCmdOperate", TimeCmdOperate)
  119. beego.AddFuncMap("TimeCmdOperateStatus", TimeCmdOperateStatus)
  120. beego.AddFuncMap("WeightItems", WeightItems)
  121. beego.AddFuncMap("BeegoItemNameList", BeegoItemNameList)
  122. beego.AddFuncMap("BeegoGetPlayerNickname", BeegoGetPlayerNickname)
  123. }
  124. func main() {
  125. //系统第一次初始化需要先运行init
  126. if len(os.Args) > 1 && os.Args[1] == "init" {
  127. initDb()
  128. return
  129. }
  130. //当有新数据结构,或者数据结构有变更,需要先运行patch
  131. if len(os.Args) > 1 && os.Args[1] == "patch" {
  132. patchDb()
  133. return
  134. }
  135. utils.InitProject()
  136. utils.InitRedis()
  137. // 注册sqlite
  138. orm.RegisterDriver("sqlite3", orm.DRSqlite)
  139. orm.RegisterDataBase("default", "sqlite3", dsn)
  140. orm.RegisterDataBase("admin", "sqlite3", dsn)
  141. go backup.Init_backup_event_proc()
  142. // 初始化数据
  143. models.InitHotfixInfo()
  144. models.InitBanIPInfo()
  145. models.InitExchangeCodeInfo()
  146. models.UpdateItemConfig()
  147. models.UpdateGoodsConfig()
  148. models.InitRollAwardInfo()
  149. models.InitRollInfo()
  150. //模板初始化
  151. initBeegoFunMap()
  152. beego.SetLevel(beego.LevelInformational)
  153. beego.Run()
  154. }
  155. func initDb() {
  156. os.Remove(dsn)
  157. orm.RegisterDriver("sqlite3", orm.DRSqlite)
  158. orm.RegisterDataBase("default", "sqlite3", dsn)
  159. orm.RegisterDataBase("admin", "sqlite3", dsn)
  160. db, err := sql.Open("sqlite3", dsn)
  161. if err != nil {
  162. panic(err.Error())
  163. }
  164. r, err := db.Exec("create table init (n varchar(32));drop table init;")
  165. if err != nil {
  166. log.Println(err)
  167. log.Println(r)
  168. } else {
  169. log.Println("Database ", " created")
  170. }
  171. o := orm.NewOrm()
  172. o.Using("admin")
  173. orm.RunSyncdb("admin", true, true)
  174. u := new(models.User)
  175. u.Username = "admin"
  176. u.Role = 1
  177. u.Password = utils.Strtomd5("000000")
  178. u.CreateTs = time.Now().Unix()
  179. u.LastLoginTs = time.Now().Unix()
  180. o.Insert(u)
  181. role := new(models.Role)
  182. role.Name = "管理员"
  183. role.Permission = 0xFFFFFFFF
  184. o.Insert(role)
  185. time.Sleep(10000)
  186. }
  187. func patchDb() {
  188. orm.RegisterDriver("sqlite3", orm.DRSqlite)
  189. orm.RegisterDataBase("default", "sqlite3", dsn)
  190. orm.RegisterDataBase("admin", "sqlite3", dsn)
  191. //force - drop table 后再建表
  192. orm.RunSyncdb("admin", false, true)
  193. // o := orm.NewOrm()
  194. // o.Insert(&models.SystemParameter{Key: "test_server", Value: ""})
  195. // o.Insert(&models.SystemParameter{Key: "game_server", Value: ""})
  196. }