main.go 6.2 KB

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