diff --git a/bin/json/game_msgdistrib.json b/bin/json/game_msgdistrib.json index dcb13d304..e5620f3ac 100644 --- a/bin/json/game_msgdistrib.json +++ b/bin/json/game_msgdistrib.json @@ -70,5 +70,89 @@ "open": true, "routrules": "~/worker", "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": "好友推荐" } ] \ No newline at end of file diff --git a/comm/imodule.go b/comm/imodule.go index e98a47d0e..8e573a989 100644 --- a/comm/imodule.go +++ b/comm/imodule.go @@ -93,6 +93,10 @@ type ( CrossUserSession(uid string) *pb.CacheUser // 跨服搜索玩家 CrossSearchUser(nickname string) ([]*pb.DBUser, error) + // 获取远程用户 + GetRmoteUser(uid string) (*pb.DBUser, error) + // 搜索远程用户 + SearchRmoteUser(nickname string) ([]*pb.DBUser, error) } //武器模块 IEquipment interface { diff --git a/lego/sys/rpcx/rpcx.go b/lego/sys/rpcx/rpcx.go index 9efe81287..f24934a09 100644 --- a/lego/sys/rpcx/rpcx.go +++ b/lego/sys/rpcx/rpcx.go @@ -38,6 +38,7 @@ type RPCX struct { func (this *RPCX) Start() (err error) { this.service.Start() this.client.Start() + return } diff --git a/modules/friend/api.go b/modules/friend/api.go index 4dcf2daa3..4e586abfe 100644 --- a/modules/friend/api.go +++ b/modules/friend/api.go @@ -38,7 +38,7 @@ func (this *apiComp) Init(service core.IService, module core.IModule, comp core. } 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 } else { if user != nil { diff --git a/modules/friend/api_addblack.go b/modules/friend/api_cross_addblack.go similarity index 100% rename from modules/friend/api_addblack.go rename to modules/friend/api_cross_addblack.go diff --git a/modules/friend/api_agree.go b/modules/friend/api_cross_agree.go similarity index 100% rename from modules/friend/api_agree.go rename to modules/friend/api_cross_agree.go diff --git a/modules/friend/api_apply.go b/modules/friend/api_cross_apply.go similarity index 100% rename from modules/friend/api_apply.go rename to modules/friend/api_cross_apply.go diff --git a/modules/friend/api_applylist.go b/modules/friend/api_cross_applylist.go similarity index 100% rename from modules/friend/api_applylist.go rename to modules/friend/api_cross_applylist.go diff --git a/modules/friend/api_assisthero.go b/modules/friend/api_cross_assisthero.go similarity index 100% rename from modules/friend/api_assisthero.go rename to modules/friend/api_cross_assisthero.go diff --git a/modules/friend/api_assistlist.go b/modules/friend/api_cross_assistlist.go similarity index 100% rename from modules/friend/api_assistlist.go rename to modules/friend/api_cross_assistlist.go diff --git a/modules/friend/api_blacklist.go b/modules/friend/api_cross_blacklist.go similarity index 100% rename from modules/friend/api_blacklist.go rename to modules/friend/api_cross_blacklist.go diff --git a/modules/friend/api_del.go b/modules/friend/api_cross_del.go similarity index 100% rename from modules/friend/api_del.go rename to modules/friend/api_cross_del.go diff --git a/modules/friend/api_delblack.go b/modules/friend/api_cross_delblack.go similarity index 100% rename from modules/friend/api_delblack.go rename to modules/friend/api_cross_delblack.go diff --git a/modules/friend/api_getreward.go b/modules/friend/api_cross_getreward.go similarity index 100% rename from modules/friend/api_getreward.go rename to modules/friend/api_cross_getreward.go diff --git a/modules/friend/api_list.go b/modules/friend/api_cross_list.go similarity index 100% rename from modules/friend/api_list.go rename to modules/friend/api_cross_list.go diff --git a/modules/friend/api_randlist.go b/modules/friend/api_cross_randlist.go similarity index 91% rename from modules/friend/api_randlist.go rename to modules/friend/api_cross_randlist.go index cfde86e76..ebfa7d363 100644 --- a/modules/friend/api_randlist.go +++ b/modules/friend/api_cross_randlist.go @@ -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 { code = pb.ErrorCode_DBError return } + recommend := 5 //推荐数量 //过滤 var newList []*pb.CacheUser for _, v := range cuList { @@ -47,10 +48,9 @@ func (this *apiComp) Randlist(session comm.IUserSession, req *pb.FriendRandlistR newList = append(newList, v) } - // 只随机选择5个在线玩家 var randOnlineUsers []string - if len(newList) > 5 { - randArr := utils.Numbers(0, len(newList), 5) + if len(newList) > recommend { + randArr := utils.Numbers(0, len(newList), recommend) for _, v := range randArr { if newList[v] != nil { randOnlineUsers = append(randOnlineUsers, newList[v].Uid) diff --git a/modules/friend/api_refuse.go b/modules/friend/api_cross_refuse.go similarity index 100% rename from modules/friend/api_refuse.go rename to modules/friend/api_cross_refuse.go diff --git a/modules/friend/api_search.go b/modules/friend/api_cross_search.go similarity index 93% rename from modules/friend/api_search.go rename to modules/friend/api_cross_search.go index 0b4f4031e..f1d0b1f54 100644 --- a/modules/friend/api_search.go +++ b/modules/friend/api_cross_search.go @@ -23,7 +23,7 @@ func (this *apiComp) Search(session comm.IUserSession, req *pb.FriendSearchReq) resp := &pb.FriendSearchResp{} - users, err := this.moduleFriend.ModuleUser.CrossSearchUser(req.NickName) + users, err := this.moduleFriend.ModuleUser.SearchRmoteUser(req.NickName) if err != nil { code = pb.ErrorCode_DBError return diff --git a/modules/friend/api_zan.go b/modules/friend/api_cross_zan.go similarity index 100% rename from modules/friend/api_zan.go rename to modules/friend/api_cross_zan.go diff --git a/modules/friend/api_zanlist.go b/modules/friend/api_cross_zanlist.go similarity index 100% rename from modules/friend/api_zanlist.go rename to modules/friend/api_cross_zanlist.go diff --git a/modules/friend/api_zanreceive.go b/modules/friend/api_cross_zanreceive.go similarity index 100% rename from modules/friend/api_zanreceive.go rename to modules/friend/api_cross_zanreceive.go diff --git a/modules/user/api_login.go b/modules/user/api_login.go index cc5770f23..77e0d6e17 100644 --- a/modules/user/api_login.go +++ b/modules/user/api_login.go @@ -97,11 +97,11 @@ func (this *apiComp) Login(session comm.IUserSession, req *pb.UserLoginReq) (cod //不是新账号 if !isNewUser { lastLoginTime := user.Logintime - update := map[string]interface{}{ - "logintime": time.Now().Unix(), - "lastloginip": session.GetIP(), - } - err = this.module.modelUser.ChangeList(user.Uid, user.Id, update) + user.Logintime = time.Now().Unix() + user.Lastloginip = session.GetIP() + user.Offlinetime = 0 + update := utils.StructToMap(user) + err = this.module.modelUser.Change(user.Uid, update) if err != nil { code = pb.ErrorCode_DBError return diff --git a/modules/user/module.go b/modules/user/module.go index 2b3fba60e..1848bb2e3 100644 --- a/modules/user/module.go +++ b/modules/user/module.go @@ -95,6 +95,15 @@ func (this *User) GetCrossUser(uid string) (*pb.DBUser, error) { 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 { return this.modelSession.getUserSession(uid) @@ -161,6 +170,15 @@ func (this *User) CrossSearchUser(nickName string) ([]*pb.DBUser, error) { 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) { 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) } +// 从远程库查询用户 +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 { conn, err := db.Local() if err != nil { - log.Errorf("cross db err: %v", err) return err } 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 { - sid, _, ok := utils.UIdSplit(req.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(req.Uid, reply); err != nil { - return err - } - - return nil + return this.getUserFromRemoteDb(req.Uid, reply) } func (this *User) RpcGetCrossUserSession(ctx context.Context, req *pb.UIdReq, reply *pb.CacheUser) error { conn, err := db.Local() if err != nil { - log.Errorf("cross db err: %v", err) return err } model := db.NewDBModel(comm.TableSession, 0, conn) if err := model.GetListObj(comm.RDS_SESSION, req.Uid, reply); err != nil { if err != mongo.ErrNoDocuments { - log.Errorf("%v", err) + return err } return nil } - return nil } func (this *User) RpcQueryUser(ctx context.Context, req *pb.NameReq, reply *pb.UserDataListResp) error { - // 区服列表 - 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 + return this.queryUserFromRemoteDb(req.Name, reply) }