package main import ( "io/ioutil" "os" "rocommon" "rocommon/service" _ "rocommon/socket" _ "rocommon/socket/http" _ "rocommon/socket/mysql" _ "rocommon/socket/tcp" "rocommon/util" "roserver/baseserver" "roserver/baseserver/model" _ "roserver/gmweb/model" gmwebmodel "roserver/gmweb/model" "roserver/gmweb/msg" _ "roserver/gmweb/msg" "runtime" "runtime/debug" "strconv" "syscall" "github.com/gin-gonic/gin" ) func main() { //记录gate pid用来做关闭操作 sysType := runtime.GOOS if sysType != "windows" { if pid := syscall.Getpid(); pid != 1 { fileName := "webgm_server.pid" + strconv.Itoa(pid) ioutil.WriteFile(fileName, []byte(strconv.Itoa(pid)), 0777) defer os.Remove(fileName) } } baseserver.Init(model.SERVICE_NODE_TYPE_WEBGM_STR, gmwebmodel.ConfigInit, &gmwebmodel.WebGMUpdate{}) //baseserver.Init(model.SERVICE_NODE_TYPE_WEBGM_STR, nil, &gmwebmodel.WebGMUpdate{}) //先建立服务器对应的连接,再监听客户端 sConfig := service.GetServiceConfig() var acceNode rocommon.ServerNode = nil if sConfig.Node.Addr != "" { acceNode = baseserver.CreateAcceptor(baseserver.ServiceParam{ ServiceType: "tcpAcceptor", ServiceName: model.SERVICE_NODE_TYPE_WEBGM_STR, ProcName: "common.backend", LisAddr: sConfig.Node.Addr, }, sConfig) } msg.RedisCdk2 = service.NewNetRedisConnector(sConfig.Redis.RedisAddr, sConfig.Redis.Password, sConfig.Redis.DBIndex3, sConfig.Redis.RedisCluster) _, err := msg.RedisCdk2.RedisCli().Ping().Result() if err != nil { util.PanicF("New RedisConnector ping failed er=%v", err) return } for _, concern := range sConfig.Node.Concern { //建立需要链接的服务器,可以通过服务器发现etcd来处理(包含在了CreateConnector中) baseserver.CreateConnector(baseserver.ServiceParam{ DiscoveryServiceName: concern, DiscoveryServiceZone: sConfig.Node.Zone, ServiceType: "tcpConnector", ServiceName: model.SERVICE_NODE_TYPE_WEBGM_STR, ProcName: "common.backend", }) } //phpserver if sConfig.Node.PhpServerAddr != "" { gmwebmodel.SetHttpNodeParam(&baseserver.ServiceParam{ ServiceType: "httpConnector", ServiceName: "game", //LisAddr: "101.133.164.98/gift", LisAddr: sConfig.Node.PhpServerAddr, }) } go func() { defer func() { //打印奔溃信息 if err := recover(); err != nil { util.InfoF("onError data=%v \n%s\n", err, string(debug.Stack())) } }() router := gin.Default() router.Use(func(c *gin.Context) { // 请求方式 reqMethod := c.Request.Method // 请求路由 reqUri := c.Request.RequestURI // 状态码 statusCode := c.Writer.Status() // 请求IP clientIP := c.ClientIP() util.DebugF("requst=| statusCode=%3d | clientIP=%s | reqMethod=%s | reqUri=%s |", statusCode, clientIP, reqMethod, reqUri) }) apiRouter := router.Group("/api") apiRouter.GET("/login", gmwebmodel.UserLogin) apiRouter.GET("/hard", msg.HardLevel) //r1 := router.Group("/gm", gmwebmodel.GmVerify) //需要登录才能访问 r1 := router.Group("/gm") //需要登录才能访问 r1.GET("/user_get", msg.WebGmProcessUserGet) r1.GET("/info_get", msg.WebGmProcessUserInfoGet) r1.GET("/ban", msg.WebGmProcessBanUser) r1.GET("/chat_msg", msg.WebGmProcessChatMsg) r1.GET("/mail", msg.WebGmProcessMail) //r1.POST("/mail", msg.WebGmProcessMailPost) r1.GET("/notice", msg.WebGmProcessNotice) r1.GET("/lookmail", msg.WebGMLookMail) r1.GET("/sethead", msg.WebGMSetHead) r1.GET("/gethead", msg.WebGMGetHead) r1.GET("/delitem", msg.WebGMDelItem) //道具删除 r1.GET("/delpoint", msg.WebGMDelPoint) //潜能果实删除 //r1.GET("/delitemall", msg.WebGMDelItemAll) //道具删除 //r1.GET("/delequip", msg.WebGMDelEquip) //装备删除 r1.GET("/getcdk", msg.GetCdk) //生成指定数量的非通码cdk //服务器维护通知 r1.GET("/maintain", msg.WebGMProcessServerMaintain) r1.GET("/register", msg.WebGMProcessServerRegister) r1.GET("/reload", msg.WebGMProcessServerConfigReload) //配置文件热加载 //东南亚 r2 := router.Group("/v1") r2.POST("/getUserList", msg.WebGmProcessUserListGet) r2.POST("/check-uid", msg.WebGmProcessUserListCheck) r2.POST("/create-order", msg.WebGmProcessCreateOrder) r2.POST("/pay/hwDn", msg.WebPayHwDnNotify) // 海外东南亚 router.POST("/pay", msg.WebPayQuickNotify) // SDKquick 畅梦nbSDK router.POST("/pay/hwQucik", msg.WebPayHwQuickNotify) // 海外quick router.POST("/pay/hwRu", msg.WebPayHwRuNotify) // 海外俄罗斯 router.POST("/pay/hwQucikFromS1GmWeb", msg.WebPayHwQuickNotifyFromS1GmWeb) // 海外quick 1服转发到其他服,这里接收 //router.POST("/pay/nb", msg.WebPayNBSDKNotify) // 畅梦牛逼SDK router.POST("/pay/uni", msg.WebPayUniSDKNotify) router.POST("/pay/nbh5", msg.WebPayNBH5Notify) // 畅梦h5 router.POST("/pay/mycard", msg.WebPayNBH5Notify) // mycard回调 // r1.GET("/guildbattle", msg.WebGmProcessGuildBattle) r1.GET("/guildbattle_state", msg.WebGmGetGuildBattleState) r1.GET("/redis/:uid/:type", msg.GmGetDataFromRedis) r1.GET("serviceConnByZone", msg.GetServiceConnByZone) r1.GET("pay-all-money", msg.GetPayAllMoney) router.Run(sConfig.Node.HttpAddr) }() baseserver.Wait() //prof.Stop() baseserver.Exit(acceNode) //需要unregister的node }