package main import ( "fmt" "github.com/gin-gonic/gin" "pro2d/common" "pro2d/common/db/redisproxy" "pro2d/common/sms" "pro2d/models" "pro2d/pb" ) type AccountAction struct { HttpServer *AccountServer } func (h *AccountAction) Register(c *gin.Context) (int, interface{}){ var register pb.Register if err := c.ShouldBindJSON(®ister); err != nil { return 1, err.Error() } if register.Code != "0000" { return 2, "code error" } account := models.NewAccount(register.Phone) if err := account.Load(); err == nil { return 3 , "account exists: " + register.Phone } account.Uid = common.SnowFlack.NextValStr() account.Password = common.Md5V(register.Password) if err := account.Create(); err != nil{ return 4, "account register err: " + err.Error() } account.Password = register.Password return 0, "success" } func (h *AccountAction) Login(c *gin.Context) (int,interface{}) { var login pb.Account if err := c.ShouldBindJSON(&login); err != nil { return 1, err.Error() } account := models.NewAccount(login.Phone) if err := account.Load(); err != nil { return 2, err.Error() } if common.Md5V(login.Password) != account.Password { return 3, "password error" } var gs []*pb.ServiceInfo for k, v := range h.HttpServer.EtcdClient.GetByPrefix(common.GlobalConf.GameConf.Name) { gs = append(gs, &pb.ServiceInfo{ Id: k, Name: common.GlobalConf.GameConf.Name, Address: v, }) } rsp := &pb.LoginRsp{ Token: account.Uid, GameService: gs, } return 0, rsp } func (h *AccountAction) Sms(c *gin.Context) (int,interface{}) { c.Request.ParseForm() phone, ok := c.GetPostForm("phone") if !ok { return 1, "phone not exists" } code := common.RandomCode() key := fmt.Sprintf(common.SMSCode, phone) relay, err := redisproxy.SETNX(key, code) if relay.(int64) == 0 { return 2, "send frequently" } redisproxy.ExpireKey(key, 60) err = sms.SendSms(phone, code) if err != nil { redisproxy.DEL(key) return 3, err.Error() } return 0, nil }