108 lines
2.3 KiB
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
|
|
}
|