grpc代码完成-待调试

This commit is contained in:
Liujian
2023-02-10 20:03:00 +08:00
parent 8e74ed33e5
commit 3563ff7fd8
12 changed files with 250 additions and 209 deletions

View File

@@ -1,86 +1,39 @@
package grpc_context
import (
"context"
"io"
"time"
grpc_context "github.com/eolinker/eosc/eocontext/grpc-context"
"github.com/eolinker/eosc/log"
"github.com/jhump/protoreflect/desc"
"github.com/jhump/protoreflect/dynamic"
"google.golang.org/grpc"
"google.golang.org/grpc/metadata"
)
var _ grpc_context.IResponse = (*Response)(nil)
type Response struct {
stream grpc.ClientStream
message *dynamic.Message
headers metadata.MD
header metadata.MD
trailer metadata.MD
msg *dynamic.Message
}
func NewResponse(stream grpc.ClientStream) *Response {
headers, err := stream.Header()
if err != nil {
log.Error("get grpc response header error: ", err)
headers = metadata.New(map[string]string{})
}
func (r *Response) Write(msg *dynamic.Message) {
r.msg = msg
}
func NewResponse() *Response {
return &Response{
stream: stream,
headers: headers,
trailer: stream.Trailer(),
header: metadata.New(map[string]string{}),
trailer: metadata.New(map[string]string{}),
msg: nil,
}
}
func (r *Response) Headers() metadata.MD {
return r.headers
return r.header
}
func (r *Response) Message(msgDesc *desc.MessageDescriptor) *dynamic.Message {
if r.message != nil {
return r.message
}
msg := dynamic.NewMessage(msgDesc)
if r.stream != nil {
ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)
errChan := make(chan error)
defer close(errChan)
go func() {
var err error
for {
err = r.stream.RecvMsg(msg)
if err != nil {
errChan <- err
}
}
}()
for {
select {
case <-ctx.Done():
// 超时关闭通道
r.stream.CloseSend()
break
case err := <-errChan:
if err == io.EOF {
log.Debug("read message eof.")
}
break
}
}
}
r.message = msg
return msg
func (r *Response) Message() *dynamic.Message {
return r.msg
}
func (r *Response) Trailer() metadata.MD {
return r.trailer
}
func (r *Response) ClientStream() grpc.ClientStream {
return r.stream
}