package account import ( "SciencesServer/app/common/model" "SciencesServer/app/service" "SciencesServer/app/session" "SciencesServer/config" "SciencesServer/utils" "fmt" ) type Instance struct{} type InstanceHandle func() *Instance type InstanceLoginCallback func(params *InstanceLoginParams) *InstanceLoginReturn type ( InstanceLoginParams struct { UID uint64 Avatar, Name, Mobile string Identity, SelectIdentity int Status model.AccountStatusKind } InstanceLoginReturn struct { Token string `json:"token"` EffectTime int `json:"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.Identity = params.Identity _session.SelectIdentity = params.SelectIdentity service.Publish(config.EventForRedisHashProduce, config.RedisKeyForAccount, _session.UIDToString(), _session) return &InstanceLoginReturn{Token: token, EffectTime: config.SettingInfo.TokenEffectTime} } } func NewInstance() InstanceHandle { return func() *Instance { return &Instance{} } }