package account import ( "SciencesServer/app/common/model" "SciencesServer/app/service" "SciencesServer/app/session" "SciencesServer/config" "SciencesServer/utils" "fmt" "time" ) type Instance struct{} type InstanceHandle func() *Instance type InstanceLoginCallback func(params *InstanceLoginParams) *InstanceLoginReturn type ( InstanceLoginParams struct { UID uint64 Avatar, Name, Mobile string Vip model.UserInstanceVipKind VipStatus bool VipDeadline time.Time Currency float64 Identity, SelectIdentity int Status model.AccountStatusKind } InstanceLoginReturn struct { Token string `json:"token"` TokenEffectTime int `json:"token_effect_time"` } ) func (c *Instance) Login() InstanceLoginCallback { return func(params *InstanceLoginParams) *InstanceLoginReturn { token := utils.JWTEncrypt(config.SettingInfo.TokenEffectTime, map[string]interface{}{ config.TokenForUID: fmt.Sprintf("%d", params.UID), }) _session := session.NewEnterprise() _session.Token = token _session.UID = params.UID _session.Avatar = params.Avatar _session.Name = params.Name _session.Mobile = params.Mobile _session.Vip = int(params.Vip) _session.VipStatus = params.VipStatus _session.VipDeadline = params.VipDeadline _session.Currency = params.Currency _session.Identity = params.Identity _session.SelectIdentity = params.SelectIdentity service.Publish(config.EventForRedisHashProduce, config.RedisKeyForAccountEnterprise, _session.UIDToString(), _session) return &InstanceLoginReturn{Token: token, TokenEffectTime: config.SettingInfo.TokenEffectTime} } } func NewInstance() InstanceHandle { return func() *Instance { return &Instance{} } }