113 lines
2.5 KiB
Go
113 lines
2.5 KiB
Go
package server
|
||
|
||
import (
|
||
"bytes"
|
||
"context"
|
||
"fmt"
|
||
"image/png"
|
||
"io"
|
||
"os"
|
||
"time"
|
||
|
||
"google.golang.org/grpc/metadata"
|
||
"myschools.me/wyh/grpcservice/data"
|
||
"myschools.me/wyh/grpcservice/pb"
|
||
)
|
||
|
||
type EmployeeService struct {
|
||
pb.UnimplementedEmployeeServiceServer
|
||
}
|
||
|
||
func (msg *EmployeeService) GetByNo(ctx context.Context, req *pb.GetByNoRequset) (*pb.EmployeeResponse, error) {
|
||
for _, e := range data.Employees {
|
||
if req.No == e.No {
|
||
return &pb.EmployeeResponse{
|
||
Employee: &e,
|
||
}, nil
|
||
}
|
||
}
|
||
fmt.Println(1)
|
||
return &pb.EmployeeResponse{}, nil
|
||
}
|
||
|
||
func (msg *EmployeeService) GetAll(req *pb.GetAllRequest, steam pb.EmployeeService_GetAllServer) error {
|
||
for _, e := range data.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))
|
||
serveFrames(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...)
|
||
}
|
||
}
|
||
func (msg *EmployeeService) Save(context.Context, *pb.EmployeeRequest) (*pb.EmployeeResponse, error) {
|
||
return &pb.EmployeeResponse{Employee: &data.Employees[0]}, 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
|
||
}
|
||
data.Employees = append(data.Employees, *emp.Employee)
|
||
stream.Send(&pb.EmployeeResponse{Employee: emp.Employee})
|
||
}
|
||
for _, emp := range data.Employees {
|
||
fmt.Println(emp)
|
||
}
|
||
return nil
|
||
}
|
||
|
||
func serveFrames(imgByte []byte) {
|
||
// 解码
|
||
file, err := os.Create("img.png")
|
||
if err != nil {
|
||
fmt.Println(err)
|
||
return
|
||
}
|
||
defer file.Close()
|
||
|
||
reader := bytes.NewReader(imgByte)
|
||
// 文件解码,生成image.image
|
||
imgfile, err := png.Decode(reader)
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
// // 新建画布
|
||
// newTemplateImage := image.NewRGBA(templateFileImage.Bounds())
|
||
// // 将图片画到新建的画布上
|
||
// draw.Draw(newTemplateImage, templateFileImage.Bounds(), templateFileImage, templateFileImage.Bounds().Min, draw.Over)
|
||
dstFile, err := os.Create("img.png")
|
||
if err != nil {
|
||
fmt.Println(err)
|
||
}
|
||
defer dstFile.Close()
|
||
// 文件编码,写入image.image
|
||
png.Encode(dstFile, imgfile)
|
||
|
||
}
|