main.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package main
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "rocommon"
  6. "rocommon/service"
  7. _ "rocommon/socket"
  8. _ "rocommon/socket/http"
  9. _ "rocommon/socket/mysql"
  10. _ "rocommon/socket/tcp"
  11. "rocommon/util"
  12. "roserver/baseserver"
  13. "roserver/baseserver/model"
  14. _ "roserver/gmweb/model"
  15. gmwebmodel "roserver/gmweb/model"
  16. "roserver/gmweb/msg"
  17. _ "roserver/gmweb/msg"
  18. "runtime"
  19. "runtime/debug"
  20. "strconv"
  21. "syscall"
  22. "github.com/gin-gonic/gin"
  23. )
  24. func main() {
  25. //记录gate pid用来做关闭操作
  26. sysType := runtime.GOOS
  27. if sysType != "windows" {
  28. if pid := syscall.Getpid(); pid != 1 {
  29. fileName := "webgm_server.pid" + strconv.Itoa(pid)
  30. ioutil.WriteFile(fileName, []byte(strconv.Itoa(pid)), 0777)
  31. defer os.Remove(fileName)
  32. }
  33. }
  34. baseserver.Init(model.SERVICE_NODE_TYPE_WEBGM_STR, gmwebmodel.ConfigInit, &gmwebmodel.WebGMUpdate{})
  35. //baseserver.Init(model.SERVICE_NODE_TYPE_WEBGM_STR, nil, &gmwebmodel.WebGMUpdate{})
  36. //先建立服务器对应的连接,再监听客户端
  37. sConfig := service.GetServiceConfig()
  38. var acceNode rocommon.ServerNode = nil
  39. if sConfig.Node.Addr != "" {
  40. acceNode = baseserver.CreateAcceptor(baseserver.ServiceParam{
  41. ServiceType: "tcpAcceptor",
  42. ServiceName: model.SERVICE_NODE_TYPE_WEBGM_STR,
  43. ProcName: "common.backend",
  44. LisAddr: sConfig.Node.Addr,
  45. }, sConfig)
  46. }
  47. msg.RedisCdk2 = service.NewNetRedisConnector(sConfig.Redis.RedisAddr,
  48. sConfig.Redis.Password,
  49. sConfig.Redis.DBIndex3,
  50. sConfig.Redis.RedisCluster)
  51. _, err := msg.RedisCdk2.RedisCli().Ping().Result()
  52. if err != nil {
  53. util.PanicF("New RedisConnector ping failed er=%v", err)
  54. return
  55. }
  56. for _, concern := range sConfig.Node.Concern {
  57. //建立需要链接的服务器,可以通过服务器发现etcd来处理(包含在了CreateConnector中)
  58. baseserver.CreateConnector(baseserver.ServiceParam{
  59. DiscoveryServiceName: concern,
  60. DiscoveryServiceZone: sConfig.Node.Zone,
  61. ServiceType: "tcpConnector",
  62. ServiceName: model.SERVICE_NODE_TYPE_WEBGM_STR,
  63. ProcName: "common.backend",
  64. })
  65. }
  66. //phpserver
  67. if sConfig.Node.PhpServerAddr != "" {
  68. gmwebmodel.SetHttpNodeParam(&baseserver.ServiceParam{
  69. ServiceType: "httpConnector",
  70. ServiceName: "game",
  71. //LisAddr: "101.133.164.98/gift",
  72. LisAddr: sConfig.Node.PhpServerAddr,
  73. })
  74. }
  75. go func() {
  76. defer func() {
  77. //打印奔溃信息
  78. if err := recover(); err != nil {
  79. util.InfoF("onError data=%v \n%s\n", err, string(debug.Stack()))
  80. }
  81. }()
  82. router := gin.Default()
  83. router.Use(func(c *gin.Context) {
  84. // 请求方式
  85. reqMethod := c.Request.Method
  86. // 请求路由
  87. reqUri := c.Request.RequestURI
  88. // 状态码
  89. statusCode := c.Writer.Status()
  90. // 请求IP
  91. clientIP := c.ClientIP()
  92. util.DebugF("requst=| statusCode=%3d | clientIP=%s | reqMethod=%s | reqUri=%s |",
  93. statusCode,
  94. clientIP,
  95. reqMethod,
  96. reqUri)
  97. })
  98. apiRouter := router.Group("/api")
  99. apiRouter.GET("/login", gmwebmodel.UserLogin)
  100. apiRouter.GET("/hard", msg.HardLevel)
  101. //r1 := router.Group("/gm", gmwebmodel.GmVerify) //需要登录才能访问
  102. r1 := router.Group("/gm") //需要登录才能访问
  103. r1.GET("/user_get", msg.WebGmProcessUserGet)
  104. r1.GET("/info_get", msg.WebGmProcessUserInfoGet)
  105. r1.GET("/ban", msg.WebGmProcessBanUser)
  106. r1.GET("/chat_msg", msg.WebGmProcessChatMsg)
  107. r1.GET("/mail", msg.WebGmProcessMail)
  108. //r1.POST("/mail", msg.WebGmProcessMailPost)
  109. r1.GET("/notice", msg.WebGmProcessNotice)
  110. r1.GET("/lookmail", msg.WebGMLookMail)
  111. r1.GET("/sethead", msg.WebGMSetHead)
  112. r1.GET("/gethead", msg.WebGMGetHead)
  113. r1.GET("/delitem", msg.WebGMDelItem) //道具删除
  114. r1.GET("/delpoint", msg.WebGMDelPoint) //潜能果实删除
  115. //r1.GET("/delitemall", msg.WebGMDelItemAll) //道具删除
  116. //r1.GET("/delequip", msg.WebGMDelEquip) //装备删除
  117. r1.GET("/getcdk", msg.GetCdk) //生成指定数量的非通码cdk
  118. //服务器维护通知
  119. r1.GET("/maintain", msg.WebGMProcessServerMaintain)
  120. r1.GET("/register", msg.WebGMProcessServerRegister)
  121. r1.GET("/reload", msg.WebGMProcessServerConfigReload) //配置文件热加载
  122. router.POST("/pay", msg.WebPayQuickNotify) // SDKquick 畅梦nbSDK
  123. router.POST("/pay/hwQucik", msg.WebPayHwQuickNotify) // 海外quick
  124. router.POST("/pay/hwQucikFromS1GmWeb", msg.WebPayHwQuickNotifyFromS1GmWeb) // 海外quick 1服转发到其他服,这里接收
  125. //router.POST("/pay/nb", msg.WebPayNBSDKNotify) // 畅梦牛逼SDK
  126. router.POST("/pay/uni", msg.WebPayUniSDKNotify)
  127. router.POST("/pay/nbh5", msg.WebPayNBH5Notify) // 畅梦h5
  128. router.POST("/pay/mycard", msg.WebPayNBH5Notify) // mycard回调
  129. //
  130. r1.GET("/guildbattle", msg.WebGmProcessGuildBattle)
  131. r1.GET("/guildbattle_state", msg.WebGmGetGuildBattleState)
  132. r1.GET("/redis/:uid/:type", msg.GmGetDataFromRedis)
  133. r1.GET("serviceConnByZone", msg.GetServiceConnByZone)
  134. r1.GET("pay-all-money", msg.GetPayAllMoney)
  135. router.Run(sConfig.Node.HttpAddr)
  136. }()
  137. baseserver.Wait()
  138. //prof.Stop()
  139. baseserver.Exit(acceNode) //需要unregister的node
  140. }