go_dreamfactory/modules/friend/api_cross_refresh.go

118 lines
3.1 KiB
Go

package friend
import (
"context"
"go_dreamfactory/comm"
"go_dreamfactory/lego/core"
"go_dreamfactory/pb"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo/options"
)
//好友列表
func (this *apiComp) RefreshAssistHeroCheck(session comm.IUserSession, req *pb.FriendRefreshAssistHeroReq) (errdata *pb.ErrorData) {
return
}
func (this *apiComp) RefreshAssistHero(session comm.IUserSession, req *pb.FriendRefreshAssistHeroReq) (errdata *pb.ErrorData) {
var (
self *pb.DBFriend
err error
ahero []*pb.DBHero // 助战英雄列表
list *pb.DBAssistHero
strangerCount int32 // 陌生人的数量
friends []*pb.DBFriend
heros []*pb.DBHero
uids []string
names []string
sz []int32
//aherofr []*pb.DBHero // 好友的助战列表
)
strangerCount = comm.AssistHeroCount // 默认一个界面12条
list, err = this.module.modelAssist.getAssist(session.GetUserId())
if err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError,
Title: pb.ErrorCode_DBError.ToString(),
Message: err.Error(),
}
return
}
self, err = this.module.modelFriend.GetFriend(session.GetUserId())
if err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_FriendSelfNoData,
Title: pb.ErrorCode_FriendSelfNoData.ToString(),
}
return
}
if friends, err = this.module.modelFriend.GetFriends(self.FriendIds); err == nil {
for _, v := range friends {
if v.AssistHeroId != "" && session.GetUserId() != v.Uid {
names = append(names, v.Info.Name)
uids = append(uids, v.Uid)
heros = append(heros, v.Hero)
sz = append(sz, 1)
}
}
}
list.Data = make(map[string]string)
if int32(len(sz)) > strangerCount {
szData := comm.GetRandWs(sz, strangerCount)
for _, v := range szData {
ahero = append(ahero, heros[v])
list.Data[uids[v]] = names[v]
}
} else {
if len(sz) > 0 {
szData := comm.GetRandWs(sz, int32(len(sz)/2+1))
for _, v := range szData {
ahero = append(ahero, heros[v])
list.Data[uids[v]] = names[v]
}
}
}
if list.RefreshNum >= this.module.ModuleTools.GetGlobalConf().FriendHelpHeroRefreshNum {
return
}
list.RefreshNum++
cur, err := this.module.modelFriend.DB.Find(core.SqlTable(this.module.modelFriend.TableName), bson.M{"assistHeroId": bson.M{"$ne": ""}}, options.Find().SetSkip(0).SetLimit(int64(strangerCount)))
for cur.Next(context.TODO()) {
tmp := &pb.DBFriend{}
if err = cur.Decode(tmp); err == nil {
if session.GetUserId() != tmp.Uid && tmp.Info != nil {
if int32(len(list.Data)) >= strangerCount {
break
}
ahero = append(ahero, tmp.Hero)
list.Data[tmp.Uid] = tmp.Info.Name
}
}
}
if err = this.module.modelAssist.Change(session.GetUserId(), map[string]interface{}{
"refreshNum": list.RefreshNum,
"data": list.Data,
}); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError,
Title: pb.ErrorCode_DBError.ToString(),
Message: err.Error(),
}
return
}
session.SendMsg(string(this.module.GetType()), "refreshassisthero", &pb.FriendRefreshAssistHeroResp{
Data: list,
Hero: ahero,
})
return
}