package service import ( "github.com/gin-gonic/gin" "net/http" "pro2d/cmd/gameserver/gmaction" "pro2d/common/components" "pro2d/common/logger" "pro2d/models" "reflect" ) type GmServer struct { components.IHttp Server components.IServer } func NewGmServer(server components.IServer, port ...string) *GmServer { return &GmServer{ IHttp: components.NewHttpServer("", port...), Server: server, } } func (s *GmServer) HandlerFuncObj(tvl, obj reflect.Value) gin.HandlerFunc { return func(c *gin.Context) { var roleId string var ok bool properties := make(map[string]string, 2) //请求类型,以及 format 参数 if c.Request.Method == "POST" { c.Request.ParseForm() for k, v := range c.Request.PostForm { properties[k] = v[0] } roleId, ok = c.GetPostForm("role_id") } else if c.Request.Method == "GET" { roleId, ok = c.GetQuery("role_id") for k, v := range c.Request.URL.Query() { properties[k] = v[0] } } else { c.JSON(http.StatusOK, gin.H{"code": -101, "message": "not support method"}) return } if !ok { c.JSON(http.StatusOK, gin.H{"code": -102, "message": "role not exist"}) return } //role start conn := s.Server.GetConnManage().GetConnByRID(roleId) var role *models.RoleModel callback := func() { logger.Debug(properties) tvl.Call([]reflect.Value{obj, reflect.ValueOf(role), reflect.ValueOf(properties)}) role.SaveRoleData(0) } if conn != nil { //在线 role = conn.(*Agent).Role conn.CustomChan() <- callback } else { //离线 role = models.NewRole(roleId) if err := role.Load(); err != nil { c.JSON(http.StatusOK, gin.H{"code": -103, "message": "role not exist"}) return } role.LoadAll() callback() } c.JSON(http.StatusOK, gin.H{"code": 0}) } } func (s *GmServer) Start() error { s.SetHandlerFuncCallback(s.HandlerFuncObj) s.BindHandler(&gmaction.GmAction{}) //gin.SetMode(gin.ReleaseMode) return s.IHttp.Start() }