好友跨服修改

This commit is contained in:
wh_zcy 2022-10-19 14:21:36 +08:00
parent b0eec24368
commit 1baeb5cef0
23 changed files with 166 additions and 51 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

@ -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
} }