更新好友接口

This commit is contained in:
zhaocy 2022-06-10 14:20:25 +08:00
parent 2c2457f2ac
commit cfd3cba23b
17 changed files with 1184 additions and 327 deletions

View File

@ -2,23 +2,78 @@ package robot
import ( import (
"go_dreamfactory/comm" "go_dreamfactory/comm"
"go_dreamfactory/modules/friend"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"log" "log"
) )
func (r *Robot) handleFriendMsg(msg *pb.UserMessage) { func (r *Robot) handleFriendMsg(msg *pb.UserMessage) {
switch msg.SubType { switch msg.SubType {
case "apply": case friend.Friend_SubType_Apply:
r.handleFriendApply(msg) r.handleFriendApply(msg)
case friend.Friend_SubType_ApplyList:
r.handleFriendApplyList(msg)
case friend.Friend_SubType_Agree:
r.handleFriendAgree(msg)
case friend.Friend_SubType_Refuse:
r.handleFriendRefuse(msg)
case friend.Friend_SubType_Blacklist:
r.handleFriendBlacklist(msg)
case friend.Friend_SubType_AddBlack:
r.handleFriendAddBlack(msg)
case friend.Friend_SubType_DelBlack:
r.handleFriendDelBlack(msg)
case friend.Friend_SubType_Search:
r.handleFriendSearch(msg)
} }
} }
//添加好友 //好友列表
func (r *Robot) FriendList() {
req := &pb.FriendListReq{}
head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_List}
defer traceFunc(head.MainType, head.SubType, r.user.UserData.GetUserId(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleFriendList(msg *pb.UserMessage) {
rsp := &pb.FriendListRsp{}
if !comm.ProtoDecode(msg, rsp) {
return
}
printReply(msg, rsp)
}
//好友搜索
func (r *Robot) FriendSearch(nickName string) {
req := &pb.FriendSearchReq{
NickName: nickName,
}
head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_Search}
defer traceFunc(head.MainType, head.SubType, r.user.UserData.GetUserId(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleFriendSearch(msg *pb.UserMessage) {
rsp := &pb.FriendSearchRsp{}
if !comm.ProtoDecode(msg, rsp) {
return
}
printReply(msg, rsp)
}
//好友申请
func (r *Robot) FriendApply(friendId string) { func (r *Robot) FriendApply(friendId string) {
req := &pb.FriendApplyReq{ req := &pb.FriendApplyReq{
FriendId: friendId, FriendId: friendId,
} }
head := &pb.UserMessage{MainType: "friend", SubType: "apply"} head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_Apply}
defer traceFunc(head.MainType, head.SubType, r.user.UserData.GetUserId(), req) defer traceFunc(head.MainType, head.SubType, r.user.UserData.GetUserId(), req)
err := r.SendToClient(head, req) err := r.SendToClient(head, req)
if err != nil { if err != nil {
@ -33,3 +88,123 @@ func (r *Robot) handleFriendApply(msg *pb.UserMessage) {
} }
printReply(msg, rsp) printReply(msg, rsp)
} }
//申请列表
func (r *Robot) FriendApplyList() {
req := &pb.FriendApplyListReq{}
head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_ApplyList}
defer traceFunc(head.MainType, head.SubType, r.user.UserData.GetUserId(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleFriendApplyList(msg *pb.UserMessage) {
rsp := &pb.FriendApplyListRsp{}
if !comm.ProtoDecode(msg, rsp) {
return
}
printReply(msg, rsp)
}
//同意
func (r *Robot) FriendAgree(friendIds []string) {
req := &pb.FriendAgreeReq{
FriendIds: friendIds,
}
head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_Apply}
defer traceFunc(head.MainType, head.SubType, r.user.UserData.GetUserId(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleFriendAgree(msg *pb.UserMessage) {
rsp := &pb.FriendAgreeRsp{}
if !comm.ProtoDecode(msg, rsp) {
return
}
printReply(msg, rsp)
}
//拒绝
func (r *Robot) FriendRefuse(friendIds []string) {
req := &pb.FriendRefuseReq{
FriendIds: friendIds,
}
head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_Refuse}
defer traceFunc(head.MainType, head.SubType, r.user.UserData.GetUserId(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleFriendRefuse(msg *pb.UserMessage) {
rsp := &pb.FriendRefuseRsp{}
if !comm.ProtoDecode(msg, rsp) {
return
}
printReply(msg, rsp)
}
//黑名单列表
func (r *Robot) FriendBlacklist() {
req := &pb.FriendBlackListReq{}
head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_Blacklist}
defer traceFunc(head.MainType, head.SubType, r.user.UserData.GetUserId(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleFriendBlacklist(msg *pb.UserMessage) {
rsp := &pb.FriendBlackListRsp{}
if !comm.ProtoDecode(msg, rsp) {
return
}
printReply(msg, rsp)
}
//添加黑名单
func (r *Robot) FriendAddBlack() {
req := &pb.FriendBlackAddReq{}
head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_AddBlack}
defer traceFunc(head.MainType, head.SubType, r.user.UserData.GetUserId(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleFriendAddBlack(msg *pb.UserMessage) {
rsp := &pb.FriendBlackAddRsp{}
if !comm.ProtoDecode(msg, rsp) {
return
}
printReply(msg, rsp)
}
//删除黑名单
func (r *Robot) FriendDelBlack(friendId string) {
req := &pb.FriendDelBlackReq{
FriendId: friendId,
}
head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_DelBlack}
defer traceFunc(head.MainType, head.SubType, r.user.UserData.GetUserId(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleFriendDelBlack(msg *pb.UserMessage) {
rsp := &pb.FriendDelBlackRsp{}
if !comm.ProtoDecode(msg, rsp) {
return
}
printReply(msg, rsp)
}

View File

@ -9,9 +9,9 @@ import (
"log" "log"
"net/http" "net/http"
"github.com/golang/protobuf/proto"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
jsoniter "github.com/json-iterator/go" jsoniter "github.com/json-iterator/go"
"google.golang.org/protobuf/proto"
) )
type Robot struct { type Robot struct {
@ -79,13 +79,21 @@ func (r *Robot) handleMsg(msg *pb.UserMessage) {
//在这里添加玩家成功登录以后的测试方法 //在这里添加玩家成功登录以后的测试方法
func (r *Robot) onUserLoaded() { func (r *Robot) onUserLoaded() {
//user //user
r.CreateUser("user671") // r.CreateUser("乐谷4")
//friend //friend
r.FriendApply("629f147e3d276120561bfa18") // r.FriendApply("629f147e3d276120561bfa18")
// r.FriendAgree([]string{})
// r.FriendRefuse([]string{})
// r.FriendApplyList()
// r.FriendList()
// r.FriendBlacklist()
// r.FriendAddBlack()
// r.FriendDelBlack("")
r.FriendSearch("乐谷5")
//pack //pack
r.QueryUserPack() // r.QueryUserPack()
} }
@ -137,10 +145,12 @@ func (r *Robot) AccountRegister() {
} }
} }
//打印响应
func printReply(msg *pb.UserMessage, rsp interface{}) { func printReply(msg *pb.UserMessage, rsp interface{}) {
log.Printf("rsp [%s.%s] [%d] [%v]", msg.MainType, msg.SubType, msg.Code, rsp) log.Printf("rsp [%s.%s] [%d] [%v]", msg.MainType, msg.SubType, msg.Code, rsp)
} }
//方法参数跟踪
func traceFunc(module string, funcName string, uid string, funcArgs interface{}) { func traceFunc(module string, funcName string, uid string, funcArgs interface{}) {
log.Printf("req [%s.%s] [%s] [%v]", module, funcName, uid, funcArgs) log.Printf("req [%s.%s] [%s] [%v]", module, funcName, uid, funcArgs)
} }

View File

@ -2,6 +2,7 @@ package robot
import ( import (
"go_dreamfactory/comm" "go_dreamfactory/comm"
"go_dreamfactory/modules/user"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"log" "log"
) )
@ -40,8 +41,8 @@ func (r *Robot) CreateUser(NickName string) {
} }
head := &pb.UserMessage{ head := &pb.UserMessage{
MainType: "user", MainType: string(comm.SM_UserModule),
SubType: "create", SubType: user.User_SubType_Create,
} }
defer traceFunc(head.MainType, head.SubType, r.user.UserData.GetUserId(), req) defer traceFunc(head.MainType, head.SubType, r.user.UserData.GetUserId(), req)

1
go.mod
View File

@ -7,6 +7,7 @@ require (
github.com/go-playground/validator/v10 v10.10.1 github.com/go-playground/validator/v10 v10.10.1
github.com/go-redis/redis/v8 v8.11.5 github.com/go-redis/redis/v8 v8.11.5
github.com/golang-jwt/jwt v3.2.2+incompatible github.com/golang-jwt/jwt v3.2.2+incompatible
github.com/golang/protobuf v1.5.2
github.com/gorilla/websocket v1.4.2 github.com/gorilla/websocket v1.4.2
github.com/hashicorp/consul/api v1.12.0 github.com/hashicorp/consul/api v1.12.0
github.com/json-iterator/go v1.1.12 github.com/json-iterator/go v1.1.12

View File

@ -8,12 +8,20 @@ import (
"go_dreamfactory/modules" "go_dreamfactory/modules"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"go_dreamfactory/sys/cache" "go_dreamfactory/sys/cache"
"go_dreamfactory/sys/db"
"go_dreamfactory/utils" "go_dreamfactory/utils"
) )
const ( const (
Friend_SubType_List = "list"
Friend_SubType_Apply = "apply" Friend_SubType_Apply = "apply"
Friend_SubType_ApplyList = "applylist" Friend_SubType_ApplyList = "applylist"
Friend_SubType_AddBlack = "addblack"
Friend_SubType_DelBlack = "delblack"
Friend_SubType_Blacklist = "blacklist"
Friend_SubType_Agree = "agree"
Friend_SubType_Refuse = "refuse"
Friend_SubType_Search = "search"
) )
type FriendComp struct { type FriendComp struct {
@ -29,6 +37,27 @@ func (this *FriendComp) Init(service core.IService, module core.IModule, comp co
//搜索 //搜索
func (this *FriendComp) Search(ctx context.Context, session comm.IUserSession, req *pb.FriendSearchReq) error { func (this *FriendComp) Search(ctx context.Context, session comm.IUserSession, req *pb.FriendSearchReq) error {
var (
code pb.ErrorCode
rsp *pb.FriendSearchRsp
friend *pb.FriendBase
)
defer func() {
if code == pb.ErrorCode_Success {
rsp = &pb.FriendSearchRsp{
Friend: friend,
}
}
session.SendMsg(string(this.module.GetType()), Friend_SubType_Search, code, rsp)
}()
user := db.Defsys.Frined_FindCond(req.NickName)
if user != nil {
friend = &pb.FriendBase{
UserId: user.UserId,
NickName: user.NiceName,
}
}
return nil return nil
} }
@ -115,7 +144,7 @@ func (this *FriendComp) Apply(ctx context.Context, session comm.IUserSession, re
//将自己加入到目标用户的申请列表中 //将自己加入到目标用户的申请列表中
target.ApplyIds = append(target.ApplyIds, self.UserId) target.ApplyIds = append(target.ApplyIds, self.UserId)
err = cache.Defsys.Friend_Apply(&pb.Cache_FriendData{ err = cache.Defsys.Friend_Update(&pb.Cache_FriendData{
UserId: req.FriendId, UserId: req.FriendId,
ApplyIds: target.ApplyIds, ApplyIds: target.ApplyIds,
}) })
@ -138,12 +167,6 @@ func (this *FriendComp) ApplyList(ctx context.Context, session comm.IUserSession
list []*pb.FriendBase list []*pb.FriendBase
) )
self, err = cache.Defsys.Friend_Get(session.GetUserId())
if self == nil || err != nil {
code = pb.ErrorCode_FriendSelfNoData
return
}
defer func() { defer func() {
if code == pb.ErrorCode_Success { if code == pb.ErrorCode_Success {
rsp = &pb.FriendApplyListRsp{ rsp = &pb.FriendApplyListRsp{
@ -153,6 +176,12 @@ func (this *FriendComp) ApplyList(ctx context.Context, session comm.IUserSession
session.SendMsg(string(this.module.GetType()), Friend_SubType_ApplyList, code, rsp) session.SendMsg(string(this.module.GetType()), Friend_SubType_ApplyList, code, rsp)
}() }()
self, err = cache.Defsys.Friend_Get(session.GetUserId())
if self == nil || err != nil {
code = pb.ErrorCode_FriendSelfNoData
return
}
for _, userId := range self.ApplyIds { for _, userId := range self.ApplyIds {
//TODO 组装FriendBase明细数据 //TODO 组装FriendBase明细数据
list = append(list, &pb.FriendBase{ list = append(list, &pb.FriendBase{
@ -169,28 +198,142 @@ func (this *FriendComp) Del(ctx context.Context, session comm.IUserSession, req
} }
//好友列表 //好友列表
func (this *FriendComp) List(ctx context.Context, session comm.IUserSession, req *pb.FriendListReq) error { func (this *FriendComp) List(ctx context.Context, session comm.IUserSession, req *pb.FriendListReq) (err error) {
var (
code pb.ErrorCode
self *pb.Cache_FriendData
rsp *pb.FriendListRsp
list []*pb.FriendBase
)
defer func() {
if code == pb.ErrorCode_Success {
rsp = &pb.FriendListRsp{
List: list,
}
}
session.SendMsg(string(this.module.GetType()), Friend_SubType_List, code, rsp)
}()
self, err = cache.Defsys.Friend_Get(session.GetUserId())
if self == nil || err != nil {
code = pb.ErrorCode_FriendSelfNoData
return
}
for _, userId := range self.FriendIds {
list = append(list, &pb.FriendBase{
UserId: userId,
})
}
return nil return nil
} }
//单个/批量同意 //单个/批量同意
func (this *FriendComp) Agree(ctx context.Context, session comm.IUserSession, req *pb.FriendAgreeOrRefuseReq) error { func (this *FriendComp) Agree(ctx context.Context, session comm.IUserSession, req *pb.FriendAgreeReq) (err error) {
var (
code pb.ErrorCode
self *pb.Cache_FriendData
rsp *pb.FriendAgreeRsp
optNum int32
)
defer func() {
if code == pb.ErrorCode_Success {
rsp = &pb.FriendAgreeRsp{
Num: optNum,
}
}
session.SendMsg(string(this.module.GetType()), Friend_SubType_Agree, code, rsp)
}()
self, err = cache.Defsys.Friend_Get(session.GetUserId())
if self == nil || err != nil {
code = pb.ErrorCode_FriendSelfNoData
return
}
//将申请人加入到自己的好友列表中
for _, userId := range req.FriendIds {
if _, ok := utils.Find(self.FriendIds, userId); !ok {
self.FriendIds = append(self.FriendIds, userId)
}
}
//将自己加入到申请人的好友列表中
for _, userId := range req.FriendIds {
target, err2 := cache.Defsys.Friend_Get(userId)
if target == nil || err2 != nil {
code = pb.ErrorCode_FriendTargetNoData
continue
}
if _, ok := utils.Find(target.FriendIds, self.UserId); !ok {
target.FriendIds = append(target.FriendIds, self.UserId)
}
err = cache.Defsys.Friend_Update(target)
if err != nil {
code = pb.ErrorCode_DBError
return
}
}
//将申请人从申请列表中删除
for _, userId := range req.FriendIds {
self.ApplyIds = utils.DeleteString(self.ApplyIds, userId)
optNum++
}
//更新
err = cache.Defsys.Friend_Update(self)
if err != nil {
code = pb.ErrorCode_DBError
return
}
return nil return nil
} }
//单个/批量拒绝 //单个/批量拒绝
func (this *FriendComp) Refuse(ctx context.Context, session comm.IUserSession, req *pb.FriendAgreeOrRefuseReq) error { func (this *FriendComp) Refuse(ctx context.Context, session comm.IUserSession, req *pb.FriendRefuseReq) (err error) {
//将申请人从申请列表中删除
var (
code pb.ErrorCode
self *pb.Cache_FriendData
rsp *pb.FriendAgreeRsp
optNum int32
)
defer func() {
if code == pb.ErrorCode_Success {
rsp = &pb.FriendAgreeRsp{
Num: optNum,
}
}
session.SendMsg(string(this.module.GetType()), Friend_SubType_Refuse, code, rsp)
}()
self, err = cache.Defsys.Friend_Get(session.GetUserId())
if self == nil || err != nil {
code = pb.ErrorCode_FriendSelfNoData
return
}
//将申请人从申请列表中删除
for _, userId := range req.FriendIds {
self.ApplyIds = utils.DeleteString(self.ApplyIds, userId)
optNum++
}
//更新
err = cache.Defsys.Friend_Update(self)
if err != nil {
code = pb.ErrorCode_DBError
return
}
return nil return nil
} }
//赠送或接收 //赠送或接收
func (this *FriendComp) ReceSend(ctx context.Context, session comm.IUserSession, req *pb.FriendReceiveOrSendReq) error { func (this *FriendComp) ReceSend(ctx context.Context, session comm.IUserSession, req *pb.FriendReceiveReq) error {
return nil
}
//好友数量
func (this *FriendComp) Total(ctx context.Context, session comm.IUserSession, req *pb.FriendTotalReq) error {
return nil return nil
} }
@ -200,11 +343,129 @@ func (this *FriendComp) Detail(ctx context.Context, session comm.IUserSession, r
} }
//黑名单 //黑名单
func (this *FriendComp) Blacklist(ctx context.Context, session comm.IUserSession, req *pb.FriendBlackListReq) error { func (this *FriendComp) Blacklist(ctx context.Context, session comm.IUserSession, req *pb.FriendBlackListReq) (err error) {
var (
code pb.ErrorCode
self *pb.Cache_FriendData
rsp *pb.FriendBlackListRsp
list []*pb.FriendBase
)
defer func() {
if code == pb.ErrorCode_Success {
rsp = &pb.FriendBlackListRsp{
Friends: list,
}
}
session.SendMsg(string(this.module.GetType()), Friend_SubType_Blacklist, code, rsp)
}()
self, err = cache.Defsys.Friend_Get(session.GetUserId())
if self == nil || err != nil {
code = pb.ErrorCode_FriendSelfNoData
return
}
for _, userId := range self.BlackIds {
//TODO 完善FriendBase信息
list = append(list, &pb.FriendBase{
UserId: userId,
})
}
return nil return nil
} }
//加入黑名单 //加入黑名单
func (this *FriendComp) Addblack(ctx context.Context, session comm.IUserSession, req *pb.FriendBlackAddReq) error { func (this *FriendComp) Addblack(ctx context.Context, session comm.IUserSession, req *pb.FriendBlackAddReq) (err error) {
var (
code pb.ErrorCode
self *pb.Cache_FriendData
target *pb.Cache_FriendData
rsp *pb.FriendBlackAddRsp
blackNumMax = 50 //TODO 从配置中读取
)
defer func() {
if code == pb.ErrorCode_Success {
rsp = &pb.FriendBlackAddRsp{
FriendId: req.FriendId,
UserId: session.GetUserId(),
}
}
session.SendMsg(string(this.module.GetType()), Friend_SubType_AddBlack, code, rsp)
}()
self, err = cache.Defsys.Friend_Get(session.GetUserId())
if self == nil || err != nil {
code = pb.ErrorCode_FriendSelfNoData
return
}
target, err = cache.Defsys.Friend_Get(req.FriendId)
if target == nil || err != nil {
code = pb.ErrorCode_FriendTargetNoData
return
}
//判断目标是否在好友列表里面
if _, ok := utils.Find(self.FriendIds, req.FriendId); ok {
code = pb.ErrorCode_FriendSelfBlackYet
return
}
// 判断自己是否在对方的黑名单中
if _, ok := utils.Find(target.BlackIds, self.UserId); ok {
code = pb.ErrorCode_FriendTargetBlackYet
return
}
// 判断是否黑名单人数已满
if len(self.BlackIds) >= blackNumMax {
code = pb.ErrorCode_FriendBlackMax
return
}
//将目标加入黑名单
self.BlackIds = append(self.BlackIds, req.FriendId)
//更新黑名单
err = cache.Defsys.Friend_Update(self)
if err != nil {
code = pb.ErrorCode_DBError
return
}
return nil
}
//删除黑名单
func (this *FriendComp) delblack(ctx context.Context, session comm.IUserSession, req *pb.FriendDelBlackReq) (err error) {
var (
code pb.ErrorCode
self *pb.Cache_FriendData
rsp *pb.FriendDelBlackRsp
)
defer func() {
if code == pb.ErrorCode_Success {
rsp = &pb.FriendDelBlackRsp{
FriendId: req.FriendId,
UserId: session.GetUserId(),
}
}
session.SendMsg(string(this.module.GetType()), Friend_SubType_AddBlack, code, rsp)
}()
self, err = cache.Defsys.Friend_Get(session.GetUserId())
if self == nil || err != nil {
code = pb.ErrorCode_FriendSelfNoData
return
}
//从黑名单列表中删除目标
self.BlackIds = utils.DeleteString(self.BlackIds, req.FriendId)
//更新黑名单
err = cache.Defsys.Friend_Update(self)
if err != nil {
code = pb.ErrorCode_DBError
return
}
return nil return nil
} }

View File

@ -13,6 +13,10 @@ import (
"go_dreamfactory/lego/sys/log" "go_dreamfactory/lego/sys/log"
) )
const (
User_SubType_Create = "create"
)
type UserComp struct { type UserComp struct {
modules.MComp_GateComp modules.MComp_GateComp
module *User module *User
@ -26,11 +30,11 @@ func (this *UserComp) Init(service core.IService, module core.IModule, comp core
//创角 //创角
func (this *UserComp) Create(ctx context.Context, session comm.IUserSession, req *pb.UserCreateReq) (err error) { func (this *UserComp) Create(ctx context.Context, session comm.IUserSession, req *pb.UserCreateReq) (err error) {
defer utils.TraceFunc(session.GetUserId(), "user", "create", req, nil) defer utils.TraceFunc(session.GetUserId(), string(this.module.GetType()), User_SubType_Create, req, nil)
user := cache.Defsys.Get(session.GetUserId()) user := cache.Defsys.Get(session.GetUserId())
var code pb.ErrorCode var code pb.ErrorCode
defer func() { defer func() {
session.SendMsg("user", "create", code, &pb.UserCreateRsp{}) session.SendMsg(string(this.module.GetType()), User_SubType_Create, code, &pb.UserCreateRsp{})
}() }()
if user == nil { if user == nil {
log.Errorf("user no exist") log.Errorf("user no exist")
@ -42,6 +46,8 @@ func (this *UserComp) Create(ctx context.Context, session comm.IUserSession, req
err = cache.Defsys.Update(user) err = cache.Defsys.Update(user)
if err != nil { if err != nil {
log.Errorf("cache update err") log.Errorf("cache update err")
code = pb.ErrorCode_DBError
return
} }
event.RegisterGO(comm.Event_CreateUser, session.GetUserId()) event.RegisterGO(comm.Event_CreateUser, session.GetUserId())
return nil return nil

File diff suppressed because it is too large Load Diff

View File

@ -32,4 +32,5 @@ enum ErrorCode {
FriendSelfBlackYet = 1107;// FriendSelfBlackYet = 1107;//
FriendTargetBlackYet = 1108;// FriendTargetBlackYet = 1108;//
FriendApplyError = 1109;// FriendApplyError = 1109;//
FriendBlackMax = 1110; //
} }

View File

@ -1,6 +1,5 @@
syntax = "proto3"; syntax = "proto3";
option go_package = ".;pb"; option go_package = ".;pb";
import "friend/friend_db.proto";
message FriendBase { message FriendBase {
string userId = 1; //ID string userId = 1; //ID
@ -18,7 +17,7 @@ message FriendListReq{
} }
message FriendListRsp{ message FriendListRsp{
repeated Cache_FriendData list = 1; repeated FriendBase list = 1;
} }
// //
@ -41,15 +40,20 @@ message FriendDelRsp{
string userId = 2; //ID string userId = 2; //ID
} }
// //
message FriendAgreeOrRefuseReq{ message FriendAgreeReq{
string friendId = 1; // repeated string friendIds = 1; //
bool isAgree = 2;
} }
message FriendAgressOrRefuseRsp{ message FriendAgreeRsp{
int32 Num = 1;//
}
//
message FriendRefuseReq{
repeated string friendIds = 1; //
}
message FriendRefuseRsp{
int32 Num = 1;// int32 Num = 1;//
bool isAgree = 2;
} }
@ -63,12 +67,11 @@ message FriendApplyListRsp{
// //
message FriendSearchReq{ message FriendSearchReq{
string friendId = 1; string nickName = 1; //
string nickName = 2; //
} }
message FriendSearchRsp{ message FriendSearchRsp{
repeated FriendBase friends = 1; FriendBase friend = 1;
} }
// //
@ -90,18 +93,37 @@ message FriendBlackAddRsp{
string userId = 2; string userId = 2;
} }
// //
message FriendReceiveOrSendReq{ message FriendDelBlackReq{
string friendId = 1; string friendId = 1;
bool isReceive = 2;
} }
message FriendReceiveOrSendRsp{ message FriendDelBlackRsp{
string friendId = 1; string friendId = 1;
string userId = 2; string userId = 2;
bool isReceive = 3;
} }
//
message FriendReceiveReq{
string friendId = 1;
}
message FriendReceiveRsp{
string friendId = 1;
string userId = 2;
}
//
message FriendGiveReq{
string friendId = 1;
}
message FriendGiveRsp{
string friendId = 1;
string userId = 2;
}
// //
message FriendTotalReq{ message FriendTotalReq{
string friendId = 1; string friendId = 1;

View File

@ -8,7 +8,7 @@ message Cache_UserData {
} }
message DB_UserData { message DB_UserData {
string UserId = 1; //tags:{bson:"_id"}Id string UserId = 1; // @go_tags(`bson:"_id"`) ID
string Account = 2; string Account = 2;
string NiceName = 3; string NiceName = 3;
int32 ServerId = 4; int32 ServerId = 4;

11
sys/cache/friend.go vendored
View File

@ -17,14 +17,15 @@ func getRdsFriendKey(userId string) string {
} }
type IFriend interface { type IFriend interface {
Friend_Apply(data *pb.Cache_FriendData) (err error) Friend_Update(data *pb.Cache_FriendData) (err error)
Friend_Total(userId string) int32 Friend_Total(userId string) int32
Friend_Get(userId string) (*pb.Cache_FriendData, error) Friend_Get(userId string) (*pb.Cache_FriendData, error)
} }
//好友申请 //更新
func (this *Cache) Friend_Apply(data *pb.Cache_FriendData) (err error) { func (this *Cache) Friend_Update(data *pb.Cache_FriendData) (err error) {
if err = db.Defsys.Friend_Apply(data); err == nil { if err = db.Defsys.Friend_SaveOrUpdate(data); err == nil {
//更新缓存
err = this.redis.Set(getRdsFriendKey(data.UserId), data, 0) err = this.redis.Set(getRdsFriendKey(data.UserId), data, 0)
} }
return return
@ -47,7 +48,7 @@ func (this *Cache) Friend_Get(userId string) (*pb.Cache_FriendData, error) {
if err != nil { if err != nil {
if err.Error() == string(redis.RedisNil) { if err.Error() == string(redis.RedisNil) {
d = &pb.Cache_FriendData{UserId: userId} d = &pb.Cache_FriendData{UserId: userId}
err = this.Friend_Apply(d) err = this.Friend_Update(d)
if err != nil { if err != nil {
return d, nil return d, nil
} }

View File

@ -10,7 +10,7 @@ import (
) )
func TestFriendApply(t *testing.T) { func TestFriendApply(t *testing.T) {
err := cache.Defsys.Friend_Apply(&pb.Cache_FriendData{ err := cache.Defsys.Friend_Update(&pb.Cache_FriendData{
UserId: "629f159310d6970846f7ef26", UserId: "629f159310d6970846f7ef26",
FriendIds: []string{"629f147e3d276120561bfa18"}, FriendIds: []string{"629f147e3d276120561bfa18"},
ApplyIds: []string{"629eb3f4132dc4bb26139659"}, ApplyIds: []string{"629eb3f4132dc4bb26139659"},

4
sys/cache/user.go vendored
View File

@ -3,6 +3,7 @@ package cache
import ( import (
"fmt" "fmt"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"go_dreamfactory/sys/db"
"go_dreamfactory/lego/sys/log" "go_dreamfactory/lego/sys/log"
) )
@ -17,7 +18,10 @@ type IUser interface {
} }
func (this *Cache) Update(data *pb.Cache_UserData) (err error) { func (this *Cache) Update(data *pb.Cache_UserData) (err error) {
err = db.Defsys.User_Update(data.UserData)
if err == nil {
err = this.redis.Set(fmt.Sprintf(Redis_UserCache, data.UserData.UserId), data, -1) err = this.redis.Set(fmt.Sprintf(Redis_UserCache, data.UserData.UserId), data, -1)
}
return return
} }

View File

@ -2,6 +2,7 @@ package db
import ( import (
"go_dreamfactory/lego/core" "go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson"
@ -14,11 +15,12 @@ const (
) )
type IFriend interface { type IFriend interface {
Friend_Apply(data *pb.Cache_FriendData) (err error) Friend_SaveOrUpdate(data *pb.Cache_FriendData) (err error)
Frined_FindCond(nickName string) *pb.DB_UserData
} }
//好友申请 //好友
func (this *DB) Friend_Apply(data *pb.Cache_FriendData) (err error) { func (this *DB) Friend_SaveOrUpdate(data *pb.Cache_FriendData) (err error) {
err = this.mgo.FindOneAndUpdate(DB_FriendTable, err = this.mgo.FindOneAndUpdate(DB_FriendTable,
bson.M{"_id": data.UserId}, bson.M{"_id": data.UserId},
bson.M{"$set": bson.M{ bson.M{"$set": bson.M{
@ -32,3 +34,15 @@ func (this *DB) Friend_Apply(data *pb.Cache_FriendData) (err error) {
} }
return return
} }
func (this *DB) Frined_FindCond(nickName string) *pb.DB_UserData {
var user *pb.DB_UserData
err := this.mgo.FindOne(DB_UserTable, bson.M{
"nicename": nickName,
}).Decode(&user)
if err != nil {
log.Errorf("findCond err:%v", err)
return nil
}
return user
}

View File

@ -1,6 +1,7 @@
package db package db
import ( import (
"fmt"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"testing" "testing"
@ -8,7 +9,7 @@ import (
) )
func TestFriendAdd(t *testing.T) { func TestFriendAdd(t *testing.T) {
err := db.Friend_Apply(&pb.Cache_FriendData{ err := db.Friend_SaveOrUpdate(&pb.Cache_FriendData{
UserId: "629f159310d6970846f7ef26", UserId: "629f159310d6970846f7ef26",
FriendIds: []string{ FriendIds: []string{
"629f147e3d276120561bfa18", "629f147e3d276120561bfa18",
@ -17,3 +18,10 @@ func TestFriendAdd(t *testing.T) {
require.Nil(t, err, nil) require.Nil(t, err, nil)
} }
func TestFriendFindCond(t *testing.T) {
user := db.Frined_FindCond("乐谷5")
require.NotNil(t, user, nil)
fmt.Printf("%v", user)
}

View File

@ -35,7 +35,7 @@ func (this *DB) User_FindByAccount(user *pb.DB_UserData) (*pb.DB_UserData, error
func (this *DB) User_FindById(id string) (*pb.DB_UserData, error) { func (this *DB) User_FindById(id string) (*pb.DB_UserData, error) {
filter := bson.M{ filter := bson.M{
"_id": id, "userid": id,
} }
sr := this.mgo.FindOne(DB_UserTable, filter) sr := this.mgo.FindOne(DB_UserTable, filter)
user := &pb.DB_UserData{} user := &pb.DB_UserData{}
@ -53,11 +53,11 @@ func (this *DB) User_Create(user *pb.DB_UserData) (err error) {
func (this *DB) User_Update(data *pb.DB_UserData) (err error) { func (this *DB) User_Update(data *pb.DB_UserData) (err error) {
err = this.mgo.FindOneAndUpdate( err = this.mgo.FindOneAndUpdate(
DB_UserTable, DB_UserTable,
bson.M{"_id": data.UserId}, bson.M{"userid": data.UserId},
bson.M{"$set": bson.M{ bson.M{"$set": bson.M{
"niceName": data.NiceName, "nicename": data.NiceName,
}}, }},
options.FindOneAndUpdate().SetUpsert(false).SetReturnDocument(options.After), options.FindOneAndUpdate().SetUpsert(true),
).Decode(data) ).Err()
return err return err
} }

View File

@ -16,7 +16,6 @@ func ParseP(p string) (string, string, bool) {
return s[0], s[1], true return s[0], s[1], true
} }
func Find(slice []string, val string) (int, bool) { func Find(slice []string, val string) (int, bool) {
for i, item := range slice { for i, item := range slice {
if item == val { if item == val {
@ -25,3 +24,13 @@ func Find(slice []string, val string) (int, bool) {
} }
return -1, false return -1, false
} }
func DeleteString(list []string, ele string) []string {
result := make([]string, 0)
for _, v := range list {
if v != ele {
result = append(result, v)
}
}
return result
}