grpc-client/main.go

167 lines
3.4 KiB
Go

package main
import (
"fmt"
"io"
"log"
"os"
"golang.org/x/net/context"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/metadata"
"myschools.me/wyh/grpc-client/pb"
)
const host = "localhost:8081"
func main() {
creds, err := credentials.NewClientTLSFromFile("cert.pem", "")
if err != nil {
log.Fatal(err.Error())
}
// 客户端option
// options := []grpc.DialOption{grpc.WithTransportCredentials(creds)}
// 拨号 与服务器建立连接
conn, err := grpc.Dial(host, grpc.WithTransportCredentials(creds))
if err != nil {
log.Fatal(err.Error())
}
defer conn.Close()
client := pb.NewEmployeeServiceClient(conn)
// fmt.Println(client)
// getByNo(client)
// getAll(client)
addPhoto(client)
// saveAll(client)
// getByNo(client)
// client := pb.NewProductServiceClient(conn)
// token, reqid := "1111", "2222"
// ctx, cancel := service.ContextWithToken(&token, &reqid, 1)
// defer cancel()
// resp, err := client.GetProductStock(ctx, &pb.ProductRequest{
// ProdId: 100,
// })
// if err != nil {
// log.Fatalf("err: %s", err.Error())
// }
// fmt.Println(resp.ProdStock)
}
func getByNo(client pb.EmployeeServiceClient) {
res, err := client.GetByNo(context.Background(), &pb.GetByNoRequset{No: 1994})
if err != nil {
log.Fatal(err.Error())
}
fmt.Println(res.Employee)
}
func save(client pb.EmployeeServiceClient) {
res, err := client.Save(context.TODO(), &pb.EmployeeRequest{})
if err != nil {
log.Fatal(err.Error())
}
fmt.Println(res.Employee)
}
func getAll(client pb.EmployeeServiceClient) {
stream, err := client.GetAll(context.Background(), &pb.GetAllRequest{})
if err != nil {
log.Fatal(err.Error())
}
for {
res, err := stream.Recv()
if err == io.EOF {
log.Fatal("EOF: ", err.Error())
break
}
if err != nil {
log.Fatal(err.Error())
}
fmt.Println(res.Employee)
}
}
func addPhoto(client pb.EmployeeServiceClient) {
imgfile, err := os.Open("1.png")
if err != nil {
log.Fatal(err.Error())
}
defer imgfile.Close()
md := metadata.New(map[string]string{"no": "2004"})
context := context.Background()
context = metadata.NewOutgoingContext(context, md)
stream, err := client.AddPhoto(context)
if err != nil {
log.Fatal(err.Error())
}
for {
chunk := make([]byte, 128*1024)
chunksize, err := imgfile.Read(chunk)
if err == io.EOF {
break
}
if err != nil {
log.Fatal(err.Error())
}
if chunksize < len(chunk) {
chunk = chunk[:chunksize]
}
stream.Send(&pb.AddPhotoRequest{Data: chunk})
}
res, err := stream.CloseAndRecv()
if err != nil {
log.Fatal(err.Error())
}
fmt.Println(res.IsOk)
}
func saveAll(client pb.EmployeeServiceClient) {
var employees = []pb.Employee{
{
Id: 3,
No: 1995,
FirstName: "zxf",
LastName: "wqrr",
},
{
Id: 4,
No: 1998,
FirstName: "zsk",
LastName: "fww",
},
}
stream, err := client.SaveAll(context.Background())
if err != nil {
log.Fatal(err.Error())
}
finishChannel := make(chan struct{})
go func() {
for {
res, err := stream.Recv()
if err == io.EOF {
finishChannel <- struct{}{}
break
}
if err != nil {
log.Fatal(err.Error())
}
fmt.Println(res.Employee)
}
}()
for _, e := range employees {
err := stream.Send(&pb.EmployeeRequest{Employee: &e})
if err != nil {
log.Fatal(err.Error())
}
}
stream.CloseSend()
<-finishChannel
}