main.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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. for _, concern := range sConfig.Node.Concern {
  48. //建立需要链接的服务器,可以通过服务器发现etcd来处理(包含在了CreateConnector中)
  49. baseserver.CreateConnector(baseserver.ServiceParam{
  50. DiscoveryServiceName: concern,
  51. DiscoveryServiceZone: sConfig.Node.Zone,
  52. ServiceType: "tcpConnector",
  53. ServiceName: model.SERVICE_NODE_TYPE_WEBGM_STR,
  54. ProcName: "common.backend",
  55. })
  56. }
  57. //phpserver
  58. if sConfig.Node.PhpServerAddr != "" {
  59. gmwebmodel.SetHttpNodeParam(&baseserver.ServiceParam{
  60. ServiceType: "httpConnector",
  61. ServiceName: "game",
  62. //LisAddr: "101.133.164.98/gift",
  63. LisAddr: sConfig.Node.PhpServerAddr,
  64. })
  65. }
  66. go func() {
  67. defer func() {
  68. //打印奔溃信息
  69. if err := recover(); err != nil {
  70. util.InfoF("onError data=%v \n%s\n", err, string(debug.Stack()))
  71. }
  72. }()
  73. router := gin.Default()
  74. router.Use(func(c *gin.Context) {
  75. // 请求方式
  76. reqMethod := c.Request.Method
  77. // 请求路由
  78. reqUri := c.Request.RequestURI
  79. // 状态码
  80. statusCode := c.Writer.Status()
  81. // 请求IP
  82. clientIP := c.ClientIP()
  83. util.DebugF("requst=| statusCode=%3d | clientIP=%s | reqMethod=%s | reqUri=%s |",
  84. statusCode,
  85. clientIP,
  86. reqMethod,
  87. reqUri)
  88. })
  89. apiRouter := router.Group("/api")
  90. apiRouter.GET("/login", gmwebmodel.UserLogin)
  91. //r1 := router.Group("/gm", gmwebmodel.GmVerify) //需要登录才能访问
  92. r1 := router.Group("/gm") //需要登录才能访问
  93. r1.GET("/user_get", msg.WebGmProcessUserGet)
  94. r1.GET("/info_get", msg.WebGmProcessUserInfoGet)
  95. r1.GET("/ban", msg.WebGmProcessBanUser)
  96. r1.GET("/chat_msg", msg.WebGmProcessChatMsg)
  97. r1.GET("/mail", msg.WebGmProcessMail)
  98. //r1.POST("/mail", msg.WebGmProcessMailPost)
  99. r1.GET("/notice", msg.WebGmProcessNotice)
  100. r1.GET("/lookmail", msg.WebGMLookMail)
  101. r1.GET("/sethead", msg.WebGMSetHead)
  102. r1.GET("/gethead", msg.WebGMGetHead)
  103. r1.GET("/delitem", msg.WebGMDelItem) //道具删除
  104. //服务器维护通知
  105. r1.GET("/maintain", msg.WebGMProcessServerMaintain)
  106. r1.GET("/register", msg.WebGMProcessServerRegister)
  107. r1.GET("/reload", msg.WebGMProcessServerConfigReload) //配置文件热加载
  108. router.POST("/pay", msg.WebPayQuickNotify) // SDKquick 畅梦nbSDK
  109. router.POST("/pay/hwQucik", msg.WebPayHwQuickNotify) // 海外quick
  110. //router.POST("/pay/nb", msg.WebPayNBSDKNotify) // 畅梦牛逼SDK
  111. router.POST("/pay/uni", msg.WebPayUniSDKNotify)
  112. router.POST("/pay/nbh5", msg.WebPayNBH5Notify) // 畅梦h5
  113. //
  114. r1.GET("/guildbattle", msg.WebGmProcessGuildBattle)
  115. r1.GET("/guildbattle_state", msg.WebGmGetGuildBattleState)
  116. router.Run(sConfig.Node.HttpAddr)
  117. }()
  118. baseserver.Wait()
  119. //prof.Stop()
  120. baseserver.Exit(acceNode) //需要unregister的node
  121. }