118 lines
3.1 KiB
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
|
|
}
|