grpcservice/main.go

108 lines
2.3 KiB
Go

package main
import (
"fmt"
"io"
"log"
"net"
"time"
"golang.org/x/net/context"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/metadata"
"myschools.me/wyh/grpcservice/pb"
)
const (
port = "8081"
)
func main() {
listen, err := net.Listen("tcp", "0.0.0.0:"+port)
if err != nil {
log.Fatal("err: %s", err.Error())
}
// 证书
creds, err := credentials.NewServerTLSFromFile("cert.pem", "key.pem")
if err != nil {
log.Fatal("err: %s", err.Error())
}
// 传递进grpc
options := []grpc.ServerOption{grpc.Creds(creds)}
// grpc服务
server := grpc.NewServer(options...)
//服务注册
pb.RegisterEmployeeServiceServer(server, new(employeeService))
log.Println("grpc server started..." + port)
server.Serve(listen)
}
type employeeService struct{}
func (msg *employeeService) GetByNo(ctx context.Context, req *pb.GetByNoRequset) (*pb.EmployeeResponse, error) {
for _, e := range employees {
if req.No == e.No {
return &pb.EmployeeResponse{
Employee: &e,
}, nil
}
}
return &pb.EmployeeResponse{}, nil
}
func (msg *employeeService) GetAll(req *pb.GetAllRequest, steam pb.EmployeeService_GetAllServer) error {
for _, e := range employees {
steam.Send(&pb.EmployeeResponse{
Employee: &e,
})
time.Sleep(2 * time.Second)
}
return nil
}
func (msg *employeeService) AddPhoto(stream pb.EmployeeService_AddPhotoServer) error {
md, ok := metadata.FromIncomingContext(stream.Context())
if ok {
fmt.Println("employee", md["no"][0])
}
img := []byte{}
for {
data, err := stream.Recv()
if err == io.EOF {
fmt.Printf("file size:%d\n", len(img))
return stream.SendAndClose(&pb.AddPhotoResponse{IsOk: true})
}
if err != nil {
return err
}
fmt.Printf("file received: %d", len(data.Data))
img = append(img, data.Data...)
}
return nil
}
func (msg *employeeService) Save(context.Context, *pb.EmployeeRequest) (*pb.EmployeeResponse, error) {
return nil, nil
}
func (msg *employeeService) SaveAll(stream pb.EmployeeService_SaveAllServer) error {
for {
emp, err := stream.Recv()
if err == io.EOF {
break
}
if err != nil {
return err
}
employees = append(employees, *emp.Employee)
stream.Send(&pb.EmployeeResponse{Employee: emp.Employee})
}
for _, emp := range employees {
fmt.Println(emp)
}
return nil
}