82 lines
2.1 KiB
Go
82 lines
2.1 KiB
Go
package services
|
|
|
|
import (
|
|
"fmt"
|
|
"context"
|
|
"log"
|
|
"errors"
|
|
|
|
"google.golang.org/grpc"
|
|
"encoding/json"
|
|
|
|
User "tldemo/services/User"
|
|
Common "tldemo/services/Common"
|
|
)
|
|
|
|
type UserAddress struct {
|
|
Address string
|
|
PostalCode string
|
|
}
|
|
|
|
type UserData struct {
|
|
Id int
|
|
Name string
|
|
Gender Common.Gender
|
|
Addresses [] *UserAddress
|
|
}
|
|
|
|
type UserServer struct {
|
|
User.UnimplementedUserServiceServer
|
|
UserArray []*UserData
|
|
}
|
|
|
|
func (s *UserServer) Register(ctx context.Context, in *User.RegisterRequest) (*Common.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})
|
|
}
|
|
|
|
log.Printf("----------------- Dump Begin -----------------")
|
|
jsonBytes, _ := json.MarshalIndent(in, "", " ")
|
|
log.Printf("%s", string(jsonBytes))
|
|
|
|
|
|
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 := &Common.RegisterResponse{Id: uint64(userData.Id), Msg: replyMessage}
|
|
return result, nil
|
|
}
|
|
|
|
func (s *UserServer) Query(ctx context.Context, in *User.QueryRequest) (*User.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([]*User.RegisterRequest_Address, 0)
|
|
//for i:=0; i<len(userData.Addresses); i++ {
|
|
// address = append(address, &User.RegisterRequest_Address{ Address: userData.Addresses[i].Address, PostalCode: userData.Addresses[i].PostalCode})
|
|
//}
|
|
//address[0] = &User.Address{ Address: "xxxx", PostalCode: "1234"}
|
|
|
|
result := &User.QueryResponse{
|
|
Name: userData.Name,
|
|
Gender: userData.Gender,
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func RegisterUserServer(s *grpc.Server) {
|
|
userServer := &UserServer{}
|
|
userServer.UserArray = make([]*UserData, 0)
|
|
|
|
User.RegisterUserServiceServer(s, userServer)
|
|
}
|
|
|