This commit is contained in:
liwei1dao 2022-10-19 15:03:04 +08:00
commit 79785852f6
25 changed files with 189 additions and 53 deletions

View File

@ -70,5 +70,89 @@
"open": true, "open": true,
"routrules": "~/worker", "routrules": "~/worker",
"describe": "拒绝" "describe": "拒绝"
},
{
"msgid": "friend.list",
"open": true,
"routrules": "~/worker",
"describe": "好友列表"
},
{
"msgid": "friend.applylist",
"open": true,
"routrules": "~/worker",
"describe": "好友申请列表"
},
{
"msgid": "friend.addblack",
"open": true,
"routrules": "~/worker",
"describe": "加黑名单"
},
{
"msgid": "friend.delblack",
"open": true,
"routrules": "~/worker",
"describe": "删除黑名单"
},
{
"msgid": "friend.blacklist",
"open": true,
"routrules": "~/worker",
"describe": "黑名单列表"
},
{
"msgid": "friend.zan",
"open": true,
"routrules": "~/worker",
"describe": "好友点赞"
},
{
"msgid": "friend.zanreceive",
"open": true,
"routrules": "~/worker",
"describe": "接收点赞"
},
{
"msgid": "friend.zanlist",
"open": true,
"routrules": "~/worker",
"describe": "点赞列表"
},
{
"msgid": "friend.assisthero",
"open": true,
"routrules": "~/worker",
"describe": "英雄助战"
},
{
"msgid": "friend.assistlist",
"open": true,
"routrules": "~/worker",
"describe": "助战列表"
},
{
"msgid": "friend.getreward",
"open": true,
"routrules": "~/worker",
"describe": "获取奖励"
},
{
"msgid": "friend.del",
"open": true,
"routrules": "~/worker",
"describe": "删除好友"
},
{
"msgid": "friend.search",
"open": true,
"routrules": "~/worker",
"describe": "搜索好友"
},
{
"msgid": "friend.randlist",
"open": true,
"routrules": "~/worker",
"describe": "好友推荐"
} }
] ]

View File

@ -93,6 +93,10 @@ type (
CrossUserSession(uid string) *pb.CacheUser CrossUserSession(uid string) *pb.CacheUser
// 跨服搜索玩家 // 跨服搜索玩家
CrossSearchUser(nickname string) ([]*pb.DBUser, error) CrossSearchUser(nickname string) ([]*pb.DBUser, error)
// 获取远程用户
GetRmoteUser(uid string) (*pb.DBUser, error)
// 搜索远程用户
SearchRmoteUser(nickname string) ([]*pb.DBUser, error)
} }
//武器模块 //武器模块
IEquipment interface { IEquipment interface {

View File

@ -38,6 +38,7 @@ type RPCX struct {
func (this *RPCX) Start() (err error) { func (this *RPCX) Start() (err error) {
this.service.Start() this.service.Start()
this.client.Start() this.client.Start()
return return
} }

View File

@ -38,7 +38,7 @@ func (this *apiComp) Init(service core.IService, module core.IModule, comp core.
} }
func (this *apiComp) setDefaultFriendUserBaseInfo(userId string) *pb.FriendBase { func (this *apiComp) setDefaultFriendUserBaseInfo(userId string) *pb.FriendBase {
if user, err := this.moduleFriend.ModuleUser.GetCrossUser(userId); err != nil { if user, err := this.moduleFriend.ModuleUser.GetRmoteUser(userId); err != nil {
return nil return nil
} else { } else {
if user != nil { if user != nil {

View File

@ -22,12 +22,13 @@ func (this *apiComp) Randlist(session comm.IUserSession, req *pb.FriendRandlistR
} }
//在线玩家列表 //在线玩家列表
cuList, err := this.moduleFriend.ModuleUser.CrossUserOnlineList() cuList, err := this.moduleFriend.ModuleUser.UserOnlineList()
if err != nil { if err != nil {
code = pb.ErrorCode_DBError code = pb.ErrorCode_DBError
return return
} }
recommend := 5 //推荐数量
//过滤 //过滤
var newList []*pb.CacheUser var newList []*pb.CacheUser
for _, v := range cuList { for _, v := range cuList {
@ -47,10 +48,9 @@ func (this *apiComp) Randlist(session comm.IUserSession, req *pb.FriendRandlistR
newList = append(newList, v) newList = append(newList, v)
} }
// 只随机选择5个在线玩家
var randOnlineUsers []string var randOnlineUsers []string
if len(newList) > 5 { if len(newList) > recommend {
randArr := utils.Numbers(0, len(newList), 5) randArr := utils.Numbers(0, len(newList), recommend)
for _, v := range randArr { for _, v := range randArr {
if newList[v] != nil { if newList[v] != nil {
randOnlineUsers = append(randOnlineUsers, newList[v].Uid) randOnlineUsers = append(randOnlineUsers, newList[v].Uid)

View File

@ -23,7 +23,7 @@ func (this *apiComp) Search(session comm.IUserSession, req *pb.FriendSearchReq)
resp := &pb.FriendSearchResp{} resp := &pb.FriendSearchResp{}
users, err := this.moduleFriend.ModuleUser.CrossSearchUser(req.NickName) users, err := this.moduleFriend.ModuleUser.SearchRmoteUser(req.NickName)
if err != nil { if err != nil {
code = pb.ErrorCode_DBError code = pb.ErrorCode_DBError
return return

View File

@ -1,10 +1,16 @@
package gourmet package gourmet
import ( import (
"context"
"go_dreamfactory/comm" "go_dreamfactory/comm"
"go_dreamfactory/lego/core"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"go_dreamfactory/sys/db"
"go_dreamfactory/utils" "go_dreamfactory/utils"
"time"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo/options"
"google.golang.org/protobuf/proto" "google.golang.org/protobuf/proto"
) )
@ -28,7 +34,7 @@ func (this *apiComp) GetRandUser(session comm.IUserSession, req *pb.GourmetGetRa
return // 参数校验失败直接返回 return // 参数校验失败直接返回
} }
// 获取在线玩家信息 // 获取在线玩家信息
onlineList, err := this.module.ModuleUser.UserOnlineList() onlineList, err := this.module.ModuleUser.CrossUserOnlineList()
if err != nil { if err != nil {
code = pb.ErrorCode_DBError code = pb.ErrorCode_DBError
return return
@ -54,6 +60,21 @@ func (this *apiComp) GetRandUser(session comm.IUserSession, req *pb.GourmetGetRa
for _, v := range szUid { for _, v := range szUid {
randOnlineUsers = append(randOnlineUsers, v) randOnlineUsers = append(randOnlineUsers, v)
} }
if len(randOnlineUsers) == 0 { // 一个人也没有 那就从db 中随机取
tag := session.GetServiecTag()
if conn, err := db.ServerDBConn(tag); err == nil {
dbModel := db.NewDBModel(comm.TableUser, time.Hour, conn)
if _data, err1 := dbModel.DB.Find(core.SqlTable(comm.TableUser), bson.M{}, options.Find().SetSort(bson.M{"lv": -1}).SetLimit(int64(req.People))); err1 == nil {
for _data.Next(context.TODO()) {
temp := &pb.DBUser{}
if err = _data.Decode(temp); err == nil {
randOnlineUsers = append(randOnlineUsers, temp.Uid)
}
}
}
}
}
} }
for _, v := range randOnlineUsers { for _, v := range randOnlineUsers {
szDbUser = append(szDbUser, this.module.ModuleUser.GetUser(v)) // 转成user对象 szDbUser = append(szDbUser, this.module.ModuleUser.GetUser(v)) // 转成user对象

View File

@ -44,7 +44,7 @@ func (this *configureComp) Init(service core.IService, module core.IModule, comp
} }
func (this *configureComp) SetLibraryFavor() { func (this *configureComp) SetLibraryFavor() {
if v, err := this.GetConfigure(game_favornum); err == nil { if v, err := this.GetConfigure(game_libraryfavor); err == nil {
if _configure, ok := v.(*cfg.GameLibraryFavor); ok { if _configure, ok := v.(*cfg.GameLibraryFavor); ok {
for _, v1 := range _configure.GetDataList() { for _, v1 := range _configure.GetDataList() {
this.favor[int64(v1.Star<<8)+int64(v1.Favorlv)] = v1 this.favor[int64(v1.Star<<8)+int64(v1.Favorlv)] = v1

View File

@ -97,11 +97,11 @@ func (this *apiComp) Login(session comm.IUserSession, req *pb.UserLoginReq) (cod
//不是新账号 //不是新账号
if !isNewUser { if !isNewUser {
lastLoginTime := user.Logintime lastLoginTime := user.Logintime
update := map[string]interface{}{ user.Logintime = time.Now().Unix()
"logintime": time.Now().Unix(), user.Lastloginip = session.GetIP()
"lastloginip": session.GetIP(), user.Offlinetime = 0
} update := utils.StructToMap(user)
err = this.module.modelUser.ChangeList(user.Uid, user.Id, update) err = this.module.modelUser.Change(user.Uid, update)
if err != nil { if err != nil {
code = pb.ErrorCode_DBError code = pb.ErrorCode_DBError
return return

View File

@ -95,6 +95,15 @@ func (this *User) GetCrossUser(uid string) (*pb.DBUser, error) {
return reply, err return reply, err
} }
// 获取远程用户数据sss
func (this *User) GetRmoteUser(uid string) (*pb.DBUser, error) {
reply := &pb.DBUser{}
if err := this.getUserFromRemoteDb(uid, reply); err != nil {
return nil, err
}
return reply, nil
}
//获取用户会话 //获取用户会话
func (this *User) GetUserSession(uid string) *pb.CacheUser { func (this *User) GetUserSession(uid string) *pb.CacheUser {
return this.modelSession.getUserSession(uid) return this.modelSession.getUserSession(uid)
@ -161,6 +170,15 @@ func (this *User) CrossSearchUser(nickName string) ([]*pb.DBUser, error) {
return reply.Users, nil return reply.Users, nil
} }
// 远程搜索用户
func (this *User) SearchRmoteUser(nickname string) ([]*pb.DBUser, error) {
reply := &pb.UserDataListResp{}
if err := this.queryUserFromRemoteDb(nickname, reply); err != nil {
return nil, err
}
return reply.Users, nil
}
//查询用户属性值 例如 金币 经验 //查询用户属性值 例如 金币 经验
func (this *User) QueryAttributeValue(uid string, attr string) (value int64) { func (this *User) QueryAttributeValue(uid string, attr string) (value int64) {
user := this.modelUser.GetUser(uid) user := this.modelUser.GetUser(uid)
@ -330,10 +348,54 @@ func (this *User) ChangeUserExpand(uid string, value map[string]interface{}) err
return this.modelExpand.ChangeUserExpand(uid, value) return this.modelExpand.ChangeUserExpand(uid, value)
} }
// 从远程库查询用户
func (this *User) getUserFromRemoteDb(uid string, rsp *pb.DBUser) error {
sid, _, ok := utils.UIdSplit(uid)
if !ok {
return errors.New("sid split error")
}
conn, err := db.ServerDBConn(sid)
if err != nil {
log.Errorf("cross db err: %v", err)
return err
}
model := db.NewDBModel(comm.TableUser, 0, conn)
if err := model.Get(uid, rsp); err != nil {
return err
}
return nil
}
func (this *User) queryUserFromRemoteDb(name string, reply *pb.UserDataListResp) error {
// 区服列表
for _, tag := range db.GetServerTags() {
conn, err := db.ServerDBConn(tag)
if err != nil {
return err
}
//查询用户
filter := bson.M{
"name": name,
}
sr := conn.Mgo.FindOne(comm.TableUser, filter)
user := &pb.DBUser{}
if err = sr.Decode(user); err != nil {
if err != mongo.ErrNoDocuments {
return err
}
}
if user.Uid != "" {
reply.Users = append(reply.Users, user)
}
}
return nil
}
func (this *User) RpcGetAllOnlineUser(ctx context.Context, args *pb.EmptyReq, reply *pb.UserOnlineResp) error { func (this *User) RpcGetAllOnlineUser(ctx context.Context, args *pb.EmptyReq, reply *pb.UserOnlineResp) error {
conn, err := db.Local() conn, err := db.Local()
if err != nil { if err != nil {
log.Errorf("cross db err: %v", err)
return err return err
} }
model := db.NewDBModel(comm.TableSession, 0, conn) model := db.NewDBModel(comm.TableSession, 0, conn)
@ -346,60 +408,24 @@ func (this *User) RpcGetAllOnlineUser(ctx context.Context, args *pb.EmptyReq, re
} }
func (this *User) RpcGetCrossUser(ctx context.Context, req *pb.UIdReq, reply *pb.DBUser) error { func (this *User) RpcGetCrossUser(ctx context.Context, req *pb.UIdReq, reply *pb.DBUser) error {
sid, _, ok := utils.UIdSplit(req.Uid) return this.getUserFromRemoteDb(req.Uid, reply)
if !ok {
return errors.New("sid split error")
}
conn, err := db.ServerDBConn(sid)
if err != nil {
log.Errorf("cross db err: %v", err)
return err
}
model := db.NewDBModel(comm.TableUser, 0, conn)
if err := model.Get(req.Uid, reply); err != nil {
return err
}
return nil
} }
func (this *User) RpcGetCrossUserSession(ctx context.Context, req *pb.UIdReq, reply *pb.CacheUser) error { func (this *User) RpcGetCrossUserSession(ctx context.Context, req *pb.UIdReq, reply *pb.CacheUser) error {
conn, err := db.Local() conn, err := db.Local()
if err != nil { if err != nil {
log.Errorf("cross db err: %v", err)
return err return err
} }
model := db.NewDBModel(comm.TableSession, 0, conn) model := db.NewDBModel(comm.TableSession, 0, conn)
if err := model.GetListObj(comm.RDS_SESSION, req.Uid, reply); err != nil { if err := model.GetListObj(comm.RDS_SESSION, req.Uid, reply); err != nil {
if err != mongo.ErrNoDocuments { if err != mongo.ErrNoDocuments {
log.Errorf("%v", err) return err
} }
return nil return nil
} }
return nil return nil
} }
func (this *User) RpcQueryUser(ctx context.Context, req *pb.NameReq, reply *pb.UserDataListResp) error { func (this *User) RpcQueryUser(ctx context.Context, req *pb.NameReq, reply *pb.UserDataListResp) error {
// 区服列表 return this.queryUserFromRemoteDb(req.Name, reply)
for _, tag := range db.GetServerTags() {
conn, err := db.ServerDBConn(tag)
if err != nil {
log.Errorf("cross db err: %v", err)
return err
}
//查询用户
filter := bson.M{
"name": req.Name,
}
sr := conn.Mgo.FindOne(comm.TableUser, filter)
user := &pb.DBUser{}
if err = sr.Decode(user); err != nil {
return err
}
reply.Users = append(reply.Users, user)
}
return nil
} }