Files
TurboLinkTest/Server/services/user_server.go
T
2023-01-16 14:44:59 +08:00

75 lines
1.9 KiB
Go

package services
import (
"fmt"
"context"
"log"
"errors"
"google.golang.org/grpc"
pb "tldemo/services/User"
)
type UserAddress struct {
Address string
PostalCode string
}
type UserData struct {
Id int
Name string
Gender pb.GENDER_ENUM
Addresses [] *UserAddress
}
type UserServer struct {
pb.UnimplementedUserServiceServer
UserArray []*UserData
}
func (s *UserServer) Register(ctx context.Context, in *pb.RegisterRequest) (*pb.RegisterResponse, error) {
userData := &UserData{Id:len(s.UserArray), Name:in.Name, Gender:in.Gender}
userData.Addresses = make([]*UserAddress, 0)
for i:=0; i<len(in.Address); i++ {
userData.Addresses = append(userData.Addresses, &UserAddress{Address : in.Address[i].Address, PostalCode: in.Address[i].PostalCode})
}
s.UserArray = append(s.UserArray, userData)
replyMessage := fmt.Sprintf("Hello %s, Your Id is %v", userData.Name, userData.Id)
log.Printf("[Register User] %s", replyMessage)
result := &pb.RegisterResponse{Id: uint64(userData.Id), Msg: replyMessage}
return result, nil
}
func (s *UserServer) Query(ctx context.Context, in *pb.QueryRequest) (*pb.QueryResponse, error) {
log.Printf("[Query User] %d", in.Id)
if(in.Id<0 || int(in.Id)>=len(s.UserArray)) {
return nil, errors.New("Out of range!")
}
var userData = s.UserArray[int(in.Id)]
address := make([]*pb.Address, 0)
for i:=0; i<len(userData.Addresses); i++ {
address = append(address, &pb.Address{ Address: userData.Addresses[i].Address, PostalCode: userData.Addresses[i].PostalCode})
}
//address[0] = &pb.Address{ Address: "xxxx", PostalCode: "1234"}
result := &pb.QueryResponse{
Name: userData.Name,
Gender: userData.Gender,
Address : address,
}
return result, nil
}
func RegisterUserServer(s *grpc.Server) {
userServer := &UserServer{}
userServer.UserArray = make([]*UserData, 0)
pb.RegisterUserServiceServer(s, userServer)
}