package privilege import ( "go_dreamfactory/comm" "go_dreamfactory/lego/core" "go_dreamfactory/modules" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" "go_dreamfactory/sys/db" "time" "go.mongodb.org/mongo-driver/bson/primitive" ) func NewModule() core.IModule { m := new(Privilege) return m } type Privilege struct { modules.ModuleBase api_comp *apiComp configure *configureComp modelPrivilege *ModelPrivilege } //模块名 func (this *Privilege) GetType() core.M_Modules { return comm.ModuleShop } //模块初始化接口 注册用户创建角色事件 func (this *Privilege) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) { err = this.ModuleBase.Init(service, module, options) return } //装备组件 func (this *Privilege) OnInstallComp() { this.ModuleBase.OnInstallComp() this.api_comp = this.RegisterComp(new(apiComp)).(*apiComp) this.modelPrivilege = this.RegisterComp(new(ModelPrivilege)).(*ModelPrivilege) this.configure = this.RegisterComp(new(configureComp)).(*configureComp) } //Event------------------------------------------------------------------------------------------------------------ func (this *Privilege) EventUserOffline(session comm.IUserSession) { this.modelPrivilege.DelByUId(session.GetUserId(), db.SetDBMgoLog(false)) } // 购买了一个新的特权 func (this *Privilege) CreatePrivilegeCard(session comm.IUserSession, cid int32) (data *pb.DBPrivilege, code pb.ErrorCode) { data = &pb.DBPrivilege{ Id: primitive.NewObjectID().Hex(), Uid: session.GetUserId(), Cid: cid, PrivilegeID: []int32{}, CTime: time.Now().Unix(), ETime: 0, RewardTime: time.Now().Unix(), } conf, err := this.configure.GetPrivilegeCard(cid) if err != nil { code = pb.ErrorCode_ConfigNoFound return nil, code } data.ETime = time.Now().Unix() + int64(conf.AssertDay*24*3600) // 设置过期时间 for _, v := range conf.PrivilegeId { data.PrivilegeID = append(data.PrivilegeID, v) } this.modelPrivilege.addNewPrivilegeData(session.GetUserId(), data) code = this.DispenseRes(session, []*cfg.Gameatn{conf.DisposableReward}, true) // 推送 session.SendMsg(string(this.GetType()), PrivilegeGetListResp, &pb.PrivilegeGetListResp{Data: []*pb.DBPrivilege{data}}) return } // 续费特权 func (this *Privilege) RenewPrivilegeCard(session comm.IUserSession, cid int32) (data *pb.DBPrivilege, code pb.ErrorCode) { list, err := this.modelPrivilege.getPrivilegeList(session.GetUserId()) if err != nil { return } for _, v := range list { if v.Cid == cid { conf, err := this.configure.GetPrivilegeCard(cid) if err != nil { code = pb.ErrorCode_ConfigNoFound return nil, code } if conf.RenewDay >= int32(time.Now().Unix()-v.ETime)/(24*3600) { v.ETime += int64(conf.AssertDay) * 24 * 3600 mapData := make(map[string]interface{}, 0) mapData["eTime"] = v.ETime this.modelPrivilege.modifyPrivilegeData(session.GetUserId(), v.Id, mapData) // 发放奖励 code = this.DispenseRes(session, []*cfg.Gameatn{conf.DisposableReward}, true) data = v session.SendMsg(string(this.GetType()), PrivilegeGetListResp, &pb.PrivilegeGetListResp{Data: []*pb.DBPrivilege{v}}) return } else { code = pb.ErrorCode_PrivilegeRenewTime data = nil return } } } code = pb.ErrorCode_PrivilegeNotFound data = nil return } // 清除到期的特权 func (this *Privilege) CheckPrivilege(session comm.IUserSession) { list, err := this.modelPrivilege.getPrivilegeList(session.GetUserId()) if err != nil { return } for _, v := range list { if v.ETime > time.Now().Unix() { if err := this.modelPrivilege.DelListlds(session.GetUserId(), v.Id); err != nil { this.Errorf("delete privilege failed:%v", err) } } } return }