This commit is contained in:
meixiongfeng 2023-05-05 10:58:14 +08:00
commit cc60845b92
9 changed files with 121 additions and 46 deletions

View File

@ -21,7 +21,8 @@ func (this *apiComp) Info(session comm.IUserSession, req *pb.ParkourInfoReq) (co
if code = this.InfoCheck(session, req); code != pb.ErrorCode_Success { if code = this.InfoCheck(session, req); code != pb.ErrorCode_Success {
return return
} }
isopen = this.module.configure.isopen() // isopen = this.module.configure.isopen()
isopen = true
if isopen { if isopen {
if info, err = this.module.parkourComp.queryinfo(session.GetUserId()); err != nil { if info, err = this.module.parkourComp.queryinfo(session.GetUserId()); err != nil {
code = pb.ErrorCode_DBError code = pb.ErrorCode_DBError

View File

@ -59,7 +59,7 @@ func (this *apiComp) Invite(session comm.IUserSession, req *pb.ParkourInviteReq)
} }
} }
if !ok { if !ok {
info.Member = append(info.Member, &pb.DBRaceMember{Uid: tuser.Uid, Name: tuser.Name, Avatar: tuser.Avatar, Mount: info.Dfmount, Hp: mount.Hp}) info.Member = append(info.Member, &pb.DBRaceMember{Uid: tuser.Uid, Name: tuser.Name, Avatar: tuser.Avatar, Lv: tuser.Lv, Mount: info.Dfmount, Hp: mount.Hp})
} }
if tinfo, err = this.module.parkourComp.queryinfo(req.Uid); err != nil { if tinfo, err = this.module.parkourComp.queryinfo(req.Uid); err != nil {
@ -77,7 +77,8 @@ func (this *apiComp) Invite(session comm.IUserSession, req *pb.ParkourInviteReq)
//目标是否在线 //目标是否在线
if !this.module.ModuleUser.IsOnline(req.Uid) { if !this.module.ModuleUser.IsOnline(req.Uid) {
member = &pb.DBRaceMember{Uid: tuser.Uid, Name: tuser.Name, Avatar: tuser.Avatar, Mount: tinfo.Dfmount, Hp: mount.Hp, Isai: true} member = &pb.DBRaceMember{Uid: tuser.Uid, Name: tuser.Name, Avatar: tuser.Avatar, Lv: tuser.Lv, Mount: tinfo.Dfmount, Hp: mount.Hp, Isai: true}
info.Captainid = session.GetUserId()
info.Member = append(info.Member, member) info.Member = append(info.Member, member)
users = make([]string, len(info.Member)) users = make([]string, len(info.Member))
for i, v := range info.Member { for i, v := range info.Member {
@ -100,14 +101,15 @@ func (this *apiComp) Invite(session comm.IUserSession, req *pb.ParkourInviteReq)
} }
} }
if !ok { if !ok {
info.Invite = append(info.Invite, &pb.DBRaceInvite{Uid: tuser.Uid, Name: tuser.Name, Avatar: tuser.Avatar, Expired: configure.Now().Add(time.Second * 10).Unix()}) info.Invite = append(info.Invite, &pb.DBRaceInvite{Uid: tuser.Uid, Name: tuser.Name, Avatar: tuser.Avatar, Lv: tuser.Lv, Expired: configure.Now().Add(time.Second * 10).Unix()})
} }
this.module.SendMsgToUser(string(this.module.GetType()), "invitenotice", this.module.SendMsgToUser(string(this.module.GetType()), "invitenotice",
&pb.ParkourInviteNoticePush{Team: info, State: 1}, req.Uid) &pb.ParkourInviteNoticePush{Team: info, State: 1}, req.Uid)
} }
if err = this.module.parkourComp.Change(session.GetUserId(), map[string]interface{}{ if err = this.module.parkourComp.Change(session.GetUserId(), map[string]interface{}{
"invite": info.Invite, "captainid": info.Captainid,
"member": info.Member, "invite": info.Invite,
"member": info.Member,
}); err != nil { }); err != nil {
code = pb.ErrorCode_DBError code = pb.ErrorCode_DBError
return return

View File

@ -64,12 +64,13 @@ func (this *apiComp) InviteHandle(session comm.IUserSession, req *pb.ParkourInvi
code = pb.ErrorCode_ConfigNoFound code = pb.ErrorCode_ConfigNoFound
return return
} }
member = &pb.DBRaceMember{Uid: invite.Uid, Name: invite.Name, Avatar: invite.Avatar, Mount: info.Dfmount, Hp: mount.Hp} member = &pb.DBRaceMember{Uid: invite.Uid, Name: invite.Name, Avatar: invite.Avatar, Lv: invite.Lv, Mount: info.Dfmount, Hp: mount.Hp}
tean.Captainid = tean.Uid tean.Captainid = tean.Uid
tean.State = pb.RaceTeamState_teaming tean.State = pb.RaceTeamState_teaming
tean.Member = append(tean.Member, member) tean.Member = append(tean.Member, member)
if err = this.module.parkourComp.Change(session.GetUserId(), map[string]interface{}{ if err = this.module.parkourComp.Change(session.GetUserId(), map[string]interface{}{
"captainid": tean.Captainid, "captainid": tean.Captainid,
"state": tean.State,
}); err != nil { }); err != nil {
code = pb.ErrorCode_DBError code = pb.ErrorCode_DBError
return return

View File

@ -52,17 +52,29 @@ func (this *apiComp) JoinTeam(session comm.IUserSession, req *pb.ParkourJoinTeam
} }
users[i] = v.Uid users[i] = v.Uid
} }
if tean.Captainid == "" {
user := this.module.ModuleUser.GetUser(tean.Uid)
if mount, err = this.module.configure.getGameBuzkashiMount(tean.Dfmount); err != nil {
code = pb.ErrorCode_ConfigNoFound
return
}
member = &pb.DBRaceMember{Uid: session.GetUserId(), Name: user.Name, Avatar: user.Avatar, Lv: user.Lv, Mount: tean.Dfmount, Hp: mount.Hp}
tean.Captainid = tean.Uid
tean.State = pb.RaceTeamState_teaming
tean.Member = append(tean.Member, member)
users = append(users, tean.Uid)
}
users = append(users, session.GetUserId()) users = append(users, session.GetUserId())
if mount, err = this.module.configure.getGameBuzkashiMount(info.Dfmount); err != nil { if mount, err = this.module.configure.getGameBuzkashiMount(info.Dfmount); err != nil {
code = pb.ErrorCode_ConfigNoFound code = pb.ErrorCode_ConfigNoFound
return return
} }
user := this.module.ModuleUser.GetUser(session.GetUserId()) user := this.module.ModuleUser.GetUser(session.GetUserId())
member = &pb.DBRaceMember{Uid: session.GetUserId(), Name: user.Name, Avatar: user.Avatar, Mount: info.Dfmount, Hp: mount.Hp} member = &pb.DBRaceMember{Uid: session.GetUserId(), Name: user.Name, Avatar: user.Avatar, Lv: user.Lv, Mount: info.Dfmount, Hp: mount.Hp}
tean.Captainid = tean.Uid
tean.State = pb.RaceTeamState_teaming
tean.Member = append(tean.Member, member) tean.Member = append(tean.Member, member)
if err = this.module.parkourComp.Change(session.GetUserId(), map[string]interface{}{ if err = this.module.parkourComp.Change(session.GetUserId(), map[string]interface{}{
"state": tean.State,
"captainid": tean.Captainid, "captainid": tean.Captainid,
}); err != nil { }); err != nil {
code = pb.ErrorCode_DBError code = pb.ErrorCode_DBError

View File

@ -14,6 +14,7 @@ func (this *apiComp) QuitTeamCheck(session comm.IUserSession, req *pb.ParkourQui
func (this *apiComp) QuitTeam(session comm.IUserSession, req *pb.ParkourQuitTeamReq) (code pb.ErrorCode, data *pb.ErrorData) { func (this *apiComp) QuitTeam(session comm.IUserSession, req *pb.ParkourQuitTeamReq) (code pb.ErrorCode, data *pb.ErrorData) {
var ( var (
tean *pb.DBParkour tean *pb.DBParkour
ntean *pb.DBParkour
member *pb.DBRaceMember member *pb.DBRaceMember
users []string users []string
ok bool ok bool
@ -31,7 +32,7 @@ func (this *apiComp) QuitTeam(session comm.IUserSession, req *pb.ParkourQuitTeam
tean.Member = append(tean.Member[0:i], tean.Member[i+1:]...) tean.Member = append(tean.Member[0:i], tean.Member[i+1:]...)
member = v member = v
ok = true ok = true
} else { } else if !v.Isai {
users = append(users, v.Uid) users = append(users, v.Uid)
} }
} }
@ -39,24 +40,71 @@ func (this *apiComp) QuitTeam(session comm.IUserSession, req *pb.ParkourQuitTeam
code = pb.ErrorCode_ReqParameterError code = pb.ErrorCode_ReqParameterError
return return
} }
if err = this.module.parkourComp.Change(session.GetUserId(), map[string]interface{}{ if req.Captainid == session.GetUserId() { //自己是队长
"captainid": session.GetUserId(), if len(users) > 0 {
}); err != nil { for i, v := range users {
code = pb.ErrorCode_DBError if i == 0 {
return if ntean, err = this.module.parkourComp.queryinfo(v); err != nil {
} code = pb.ErrorCode_DBError
if err = this.module.parkourComp.Change(req.Captainid, map[string]interface{}{ return
"member": tean.Member, } else {
}); err != nil { ntean.Captainid = users[0]
code = pb.ErrorCode_DBError ntean.Member = tean.Member
return if err = this.module.parkourComp.Change(v, map[string]interface{}{
} "captainid": v,
"member": tean.Member,
}); err != nil {
code = pb.ErrorCode_DBError
return
}
}
} else {
if err = this.module.parkourComp.Change(v, map[string]interface{}{
"captainid": users[0],
}); err != nil {
code = pb.ErrorCode_DBError
return
}
}
}
this.module.SendMsgToUsers(string(this.module.GetType()), "teamchanage",
&pb.ParkourTeamChanagePush{Team: ntean}, users...)
}
this.module.SendMsgToUsers(string(this.module.GetType()), "teamquitnotice", tean.Invite = make([]*pb.DBRaceInvite, 0)
&pb.ParkourTeamQuitNoticePush{Member: member}, users...) tean.Member = make([]*pb.DBRaceMember, 0)
if err = this.module.parkourComp.Change(session.GetUserId(), map[string]interface{}{
"state": pb.RaceTeamState_resting,
"captainid": "",
"invite": tean.Invite,
"member": tean.Member,
}); err != nil {
code = pb.ErrorCode_DBError
return
}
this.module.SendMsgToUsers(string(this.module.GetType()), "teamchanage", } else {
&pb.ParkourTeamChanagePush{Team: tean}, users...) if err = this.module.parkourComp.Change(session.GetUserId(), map[string]interface{}{
"state": pb.RaceTeamState_resting,
"captainid": "",
}); err != nil {
code = pb.ErrorCode_DBError
return
}
if err = this.module.parkourComp.Change(req.Captainid, map[string]interface{}{
"member": tean.Member,
}); err != nil {
code = pb.ErrorCode_DBError
return
}
if len(users) > 0 {
this.module.SendMsgToUsers(string(this.module.GetType()), "teamquitnotice",
&pb.ParkourTeamQuitNoticePush{Member: member}, users...)
this.module.SendMsgToUsers(string(this.module.GetType()), "teamchanage",
&pb.ParkourTeamChanagePush{Team: tean}, users...)
}
}
session.SendMsg(string(this.module.GetType()), "quitteam", &pb.ParkourQuitTeamResp{}) session.SendMsg(string(this.module.GetType()), "quitteam", &pb.ParkourQuitTeamResp{})
return return

View File

@ -151,7 +151,7 @@ func (this *ModelParkourComp) queryinfo(uid string) (result *pb.DBParkour, err e
result = &pb.DBParkour{ result = &pb.DBParkour{
Id: primitive.NewObjectID().Hex(), Id: primitive.NewObjectID().Hex(),
Uid: uid, Uid: uid,
State: pb.RaceTeamState_teaming, State: pb.RaceTeamState_resting,
Mounts: make(map[string]int32), Mounts: make(map[string]int32),
Invite: make([]*pb.DBRaceInvite, 0), Invite: make([]*pb.DBRaceInvite, 0),
Member: []*pb.DBRaceMember{}, Member: []*pb.DBRaceMember{},
@ -187,7 +187,7 @@ func (this *ModelParkourComp) queryinfos(uids []string) (results []*pb.DBParkour
temp := &pb.DBParkour{ temp := &pb.DBParkour{
Id: primitive.NewObjectID().Hex(), Id: primitive.NewObjectID().Hex(),
Uid: v, Uid: v,
State: pb.RaceTeamState_teaming, State: pb.RaceTeamState_resting,
Mounts: make(map[string]int32), Mounts: make(map[string]int32),
Invite: make([]*pb.DBRaceInvite, 0), Invite: make([]*pb.DBRaceInvite, 0),
Member: []*pb.DBRaceMember{}, Member: []*pb.DBRaceMember{},
@ -227,7 +227,7 @@ func (this *ModelParkourComp) addUserMounts(uid string, mounts map[string]int32)
result = &pb.DBParkour{ result = &pb.DBParkour{
Id: primitive.NewObjectID().Hex(), Id: primitive.NewObjectID().Hex(),
Uid: uid, Uid: uid,
State: pb.RaceTeamState_teaming, State: pb.RaceTeamState_resting,
Invite: make([]*pb.DBRaceInvite, 0), Invite: make([]*pb.DBRaceInvite, 0),
Mounts: make(map[string]int32), Mounts: make(map[string]int32),
Member: []*pb.DBRaceMember{}, Member: []*pb.DBRaceMember{},

View File

@ -392,11 +392,11 @@ func (this *Parkour) overtimer(task *timewheel.Task, args ...interface{}) {
//用户离线处理 //用户离线处理
func (this *Parkour) useroffline(uid, sessionid string) { func (this *Parkour) useroffline(uid, sessionid string) {
var ( var (
info *pb.DBParkour info *pb.DBParkour
team *pb.DBParkour team *pb.DBParkour
member *pb.DBRaceMember member *pb.DBRaceMember
users []string users []string
keep bool
index int32 index int32
err error err error
) )
@ -445,27 +445,29 @@ func (this *Parkour) useroffline(uid, sessionid string) {
if v.Uid == uid { if v.Uid == uid {
index = int32(i) index = int32(i)
member = v member = v
keep = true
continue continue
} }
if v.Uid != uid && !v.Isai { if v.Uid != uid && !v.Isai {
users = append(users, v.Uid) users = append(users, v.Uid)
} }
} }
team.Member = append(team.Member[0:index], team.Member[index+1:]...) if keep {
if err = this.parkourComp.Change(team.Uid, map[string]interface{}{ team.Member = append(team.Member[0:index], team.Member[index+1:]...)
"member": team.Member, if err = this.parkourComp.Change(team.Uid, map[string]interface{}{
}); err != nil { "member": team.Member,
this.Error("用户离线! 解散队伍处理", log.Field{Key: "uid", Value: team.Uid}, log.Field{Key: "err", Value: err.Error()}) }); err != nil {
return this.Error("用户离线! 解散队伍处理", log.Field{Key: "uid", Value: team.Uid}, log.Field{Key: "err", Value: err.Error()})
} return
if len(users) > 0 { }
this.SendMsgToUsers(string(this.GetType()), "teamquitnotice", if len(users) > 0 {
&pb.ParkourTeamQuitNoticePush{Member: member}, users...) this.SendMsgToUsers(string(this.GetType()), "teamquitnotice",
&pb.ParkourTeamQuitNoticePush{Member: member}, users...)
this.SendMsgToUsers(string(this.GetType()), "teamchanage", this.SendMsgToUsers(string(this.GetType()), "teamchanage",
&pb.ParkourTeamChanagePush{Team: team}, users...) &pb.ParkourTeamChanagePush{Team: team}, users...)
}
} }
} }
} else if info.State == pb.RaceTeamState_matching { } else if info.State == pb.RaceTeamState_matching {
if info.Captainid == uid { if info.Captainid == uid {

View File

@ -117,3 +117,7 @@ func (this *ModelRtask) checkCondi(uid string, condiId int32) (err error, ok boo
return return
} }
func (this *ModelRtask) userlock(uid string) (result *redis.RedisMutex, err error) {
return this.DBModel.Redis.NewRedisMutex(fmt.Sprintf("ulocktask:%s", uid))
}

View File

@ -357,6 +357,12 @@ func (this *ModuleRtask) TriggerTask(uid string, taskParams ...*comm.TaskParam)
return return
} }
lock, _ := this.modelRtask.userlock(uid)
err := lock.Lock()
if err != nil {
this.Error("TriggerTask userlock err!", log.Field{Key: "err", Value: err.Error()})
}
defer lock.Unlock()
for _, tp := range taskParams { for _, tp := range taskParams {
if code := this.processOneTask(session, tp.TT, tp.Params...); code != pb.ErrorCode_Success { if code := this.processOneTask(session, tp.TT, tp.Params...); code != pb.ErrorCode_Success {
@ -364,7 +370,6 @@ func (this *ModuleRtask) TriggerTask(uid string, taskParams ...*comm.TaskParam)
session.Push() session.Push()
comm.PuttaskParam(tp) comm.PuttaskParam(tp)
} }
this.PutUserSession(session) this.PutUserSession(session)
return return
} }