package service import ( "github.com/gin-gonic/gin" "net/http" "pro2d/cmd/gameserver/action" "pro2d/common/components" "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) { c.Request.ParseForm() roleId, ok := c.GetPostForm("role_id") if !ok { c.JSON(http.StatusOK, gin.H{"code": -101, "message": "role not exist"}) return } conn := s.Server.GetConnManage().GetConnByRID(roleId) var role *models.RoleModel if conn != nil { //在线 role = conn.(*Agent).Role } else { //离线 role = models.NewRole(roleId) if err := role.Load(); err != nil { c.JSON(http.StatusOK, gin.H{"code": -102, "message": "role not exist"}) return } role.LoadAll() } properties := make(map[string]interface{}) for k, v := range c.Request.PostForm { properties[k] = v[0] } properties["_conn"] = conn properties["_role"] = role v := tvl.Call([]reflect.Value{obj, reflect.ValueOf(properties)}) role.SaveRoleData(0) if len(v) != 1 { c.JSON(http.StatusNotFound, gin.H{"code": -100, "message": "request param len is error"}) return } c.JSON(http.StatusOK, gin.H{"code": v[0].Interface()}) } } func (s *GmServer) Start() error { s.SetHandlerFuncCallback(s.HandlerFuncObj) s.BindHandler(&action.GmAction{}) //gin.SetMode(gin.ReleaseMode) return s.IHttp.Start() }