diff --git a/src/rpc/user/Makefile b/src/rpc/user/Makefile new file mode 100644 index 000000000..d3f837791 --- /dev/null +++ b/src/rpc/user/Makefile @@ -0,0 +1,27 @@ +.PHONY: all build run gotool install clean help + +BINARY_NAME=open_im_user +BIN_DIR=../../../bin/ +LAN_FILE=.go +GO_FILE:=${BINARY_NAME}${LAN_FILE} + +all: gotool build + +build: + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ${BINARY_NAME} ${GO_FILE} + +run: + @go run ./ + +gotool: + go fmt ./ + go vet ./ + +install: + make build + mv ${BINARY_NAME} ${BIN_DIR} + +clean: + @if [ -f ${BINARY_NAME} ] ; then rm ${BINARY_NAME} ; fi + + diff --git a/src/rpc/user/open_im_user.go b/src/rpc/user/open_im_user.go new file mode 100644 index 000000000..0625b11ee --- /dev/null +++ b/src/rpc/user/open_im_user.go @@ -0,0 +1,13 @@ +package main + +import ( + "Open_IM/src/rpc/user/user" + "flag" +) + +func main() { + rpcPort := flag.Int("port", 10100, "rpc listening port") + flag.Parse() + rpcServer := user.NewUserServer(*rpcPort) + rpcServer.Run() +} diff --git a/src/rpc/user/user/get_user_info.go b/src/rpc/user/user/get_user_info.go new file mode 100644 index 000000000..cc2ba0d6c --- /dev/null +++ b/src/rpc/user/user/get_user_info.go @@ -0,0 +1,96 @@ +package user + +import ( + "Open_IM/src/common/config" + "Open_IM/src/common/db/mysql_model/im_mysql_model" + "Open_IM/src/common/log" + pbUser "Open_IM/src/proto/user" + "Open_IM/src/utils" + "context" + "github.com/skiffer-git/grpc-etcdv3/getcdv3" + "google.golang.org/grpc" + "net" + "strconv" + "strings" +) + +type userServer struct { + rpcPort int + rpcRegisterName string + etcdSchema string + etcdAddr []string +} + +func NewUserServer(port int) *userServer { + return &userServer{ + rpcPort: port, + rpcRegisterName: config.Config.RpcRegisterName.OpenImUserName, + etcdSchema: config.Config.Etcd.EtcdSchema, + etcdAddr: config.Config.Etcd.EtcdAddr, + } +} + +func (s *userServer) Run() { + log.Info("", "", "rpc user init....") + + ip := utils.ServerIP + registerAddress := ip + ":" + strconv.Itoa(s.rpcPort) + //listener network + listener, err := net.Listen("tcp", registerAddress) + if err != nil { + log.InfoByArgs("listen network failed,err=%s", err.Error()) + return + } + log.Info("", "", "listen network success, address = %s", registerAddress) + defer listener.Close() + //grpc server + srv := grpc.NewServer() + defer srv.GracefulStop() + //Service registers with etcd + pbUser.RegisterUserServer(srv, s) + err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), ip, s.rpcPort, s.rpcRegisterName, 10) + if err != nil { + log.ErrorByArgs("register rpc token to etcd failed,err=%s", err.Error()) + return + } + err = srv.Serve(listener) + if err != nil { + log.ErrorByArgs("listen token failed,err=%s", err.Error()) + return + } + log.Info("", "", "rpc token init success") +} + +func (s *userServer) GetUserInfo(ctx context.Context, req *pbUser.GetUserInfoReq) (*pbUser.GetUserInfoResp, error) { + log.InfoByKv("rpc get_user_info is server", req.OperationID) + + var userInfoList []*pbUser.UserInfo + //Obtain user information according to userID + if len(req.UserIDList) > 0 { + for _, userID := range req.UserIDList { + var userInfo pbUser.UserInfo + user, err := im_mysql_model.FindUserByUID(userID) + if err != nil { + log.ErrorByKv("search userinfo failed", req.OperationID, "userID", userID, "err=%s", err.Error()) + continue + } + userInfo.Uid = user.UID + userInfo.Icon = user.Icon + userInfo.Name = user.Name + userInfo.Gender = user.Gender + userInfo.Mobile = user.Mobile + userInfo.Birth = user.Birth + userInfo.Email = user.Email + userInfo.Ex = user.Ex + userInfoList = append(userInfoList, &userInfo) + } + } else { + return &pbUser.GetUserInfoResp{ErrorCode: 999, ErrorMsg: "uidList is nil"}, nil + } + log.InfoByKv("rpc get userInfo return success", req.OperationID, "token", req.Token) + return &pbUser.GetUserInfoResp{ + ErrorCode: 0, + ErrorMsg: "", + Data: userInfoList, + }, nil +} diff --git a/src/rpc/user/user/update_user_info.go b/src/rpc/user/user/update_user_info.go new file mode 100644 index 000000000..105d7636c --- /dev/null +++ b/src/rpc/user/user/update_user_info.go @@ -0,0 +1,25 @@ +package user + +import ( + "Open_IM/src/common/config" + "Open_IM/src/common/db/mysql_model/im_mysql_model" + log2 "Open_IM/src/common/log" + pbUser "Open_IM/src/proto/user" + "Open_IM/src/utils" + "context" +) + +func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserInfoReq) (*pbUser.CommonResp, error) { + log2.Info(req.Token, req.OperationID, "rpc modify user is server,args=%s", req.String()) + claims, err := utils.ParseToken(req.Token) + if err != nil { + log2.Error(req.Token, req.OperationID, "err=%s,parse token failed", err.Error()) + return &pbUser.CommonResp{ErrorCode: config.ErrParseToken.ErrCode, ErrorMsg: err.Error()}, nil + } + err = im_mysql_model.UpDateUserInfo(claims.UID, req.Name, req.Icon, req.Mobile, req.Birth, req.Email, req.Ex, req.Gender) + if err != nil { + log2.Error(req.Token, req.OperationID, "update user some attribute failed,err=%s", err.Error()) + return &pbUser.CommonResp{ErrorCode: config.ErrModifyUserInfo.ErrCode, ErrorMsg: config.ErrModifyUserInfo.ErrMsg}, nil + } + return &pbUser.CommonResp{}, nil +}