main.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package main
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "io/ioutil"
  5. _ "net/http"
  6. "os"
  7. "rocommon/service"
  8. _ "rocommon/socket"
  9. _ "rocommon/socket/http"
  10. _ "rocommon/socket/tcp"
  11. "rocommon/util"
  12. "roweb/serverlist/model"
  13. "runtime"
  14. "strconv"
  15. "syscall"
  16. )
  17. // /https://github.com/gin-gonic/gin
  18. func main() {
  19. //记录gate pid用来做关闭操作
  20. sysType := runtime.GOOS
  21. if sysType != "windows" {
  22. if pid := syscall.Getpid(); pid != 1 {
  23. fileName := "serverlist.pid" + string(strconv.Itoa(pid))
  24. ioutil.WriteFile(fileName, []byte(strconv.Itoa(pid)), 0777)
  25. defer os.Remove(fileName)
  26. }
  27. }
  28. service.Init("roweb")
  29. //todo...
  30. // 1,做动态热加载
  31. // 2,在获取文件内容时判断md5码然后进行加载,不加锁
  32. // 3, 是否需要放在mysql中
  33. // 4,是否需要支持通过后台web页面操作的方式来添加服务器组
  34. // 目前先做简单版本,放到配置文件中,修改后自动热加载,后期可以直接放到数据库中
  35. serverListFile := *(service.FlagServerList) //./serverlist.yaml
  36. model.InitConfig(serverListFile)
  37. sConfig := service.GetServiceConfig()
  38. //sdk http
  39. model.SetHttpNodeParam(&model.ServiceParam{
  40. ServiceType: "httpConnector",
  41. ServiceName: "game",
  42. //LisAddr: "serverlist.wtgame.cn:8088",
  43. //LisAddr: sConfig.Node.ServerList,
  44. })
  45. httpLogHandleFunc := func(c *gin.Context) {
  46. // 请求方式
  47. reqMethod := c.Request.Method
  48. // 请求路由
  49. reqUri := c.Request.RequestURI
  50. // 状态码
  51. statusCode := c.Writer.Status()
  52. // 请求IP
  53. clientIP := c.ClientIP()
  54. util.DebugF("requst=| statusCode=%3d | clientIP=%s | reqMethod=%s | reqUri=%s |",
  55. statusCode,
  56. clientIP,
  57. reqMethod,
  58. reqUri)
  59. c.Header("Access-Control-Allow-Origin", "*") // 可将将 * 替换为指定的域名
  60. c.Header("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
  61. c.Header("Access-Control-Allow-Headers", "Accept, X-Access-Token, X-Application-Name, X-Request-Sent-Time")
  62. c.Header("Access-Control-Allow-Credentials", "true")
  63. }
  64. //对外开放端口
  65. go func() {
  66. router := gin.Default()
  67. //bucket := ratelimit.NewBucket(time.Second/10, 1)
  68. //
  69. //// 限流中间件
  70. //router.Use(func(c *gin.Context) {
  71. // if bucket.TakeAvailable(1) == 0 {
  72. // c.String(http.StatusTooManyRequests, "当前玩家用户过多,请稍后再试")
  73. // c.Abort()
  74. // return
  75. // }
  76. // c.Next()
  77. //})
  78. router.Use(httpLogHandleFunc)
  79. r1 := router.Group("/serverlist")
  80. //获取服务器列表
  81. r1.HEAD("", model.GetHeadInfo)
  82. r1.GET("", model.GetServerListNew)
  83. r1.GET("/download", model.GetServerDownLoad)
  84. //r1.GET("", model.GetServerList)
  85. //sdk 登录校验
  86. rSdkCheck := router.Group("/sdkcheck")
  87. //rSdkCheck.POST("", model.SDKCheck)
  88. rSdkCheck.GET("", model.SDKCheck)
  89. rSdkCheck.GET("/webtoken", model.UniSdkWebToken)
  90. //服务器维护操作
  91. r1.GET("/maintain", model.ServerMaintain)
  92. //玩家服务器角色信息注册
  93. r1.POST("/add", model.AddOpenIDServer)
  94. //修改服务器信息(gmt负责修改)
  95. r1.GET("/server", model.SetServerInfo)
  96. // //测试用公告
  97. // router.GET("/notice")
  98. // //测试用chanel
  99. // //测试用vipService
  100. router.Run(sConfig.Node.Addr)
  101. }()
  102. //对内开放端口
  103. go func() {
  104. router := gin.Default()
  105. router.Use(httpLogHandleFunc)
  106. r1 := router.Group("/serverlist")
  107. //服务器维护操作
  108. r1.GET("/maintain", model.ServerMaintain)
  109. //玩家服务器角色信息注册
  110. r1.POST("/add", model.AddOpenIDServer)
  111. //修改服务器信息(gmt负责修改)
  112. r1.GET("/server", model.SetServerInfo)
  113. router.Run(sConfig.Node.HttpAddr)
  114. }()
  115. service.WaitExitSignal()
  116. }