github.com/annwntech/go-micro/v2@v2.9.5/transport/grpc/handler.go (about) 1 package grpc 2 3 import ( 4 "runtime/debug" 5 6 "github.com/annwntech/go-micro/v2/errors" 7 "github.com/annwntech/go-micro/v2/logger" 8 "github.com/annwntech/go-micro/v2/transport" 9 pb "github.com/annwntech/go-micro/v2/transport/grpc/proto" 10 "google.golang.org/grpc/peer" 11 ) 12 13 // microTransport satisfies the pb.TransportServer inteface 14 type microTransport struct { 15 addr string 16 fn func(transport.Socket) 17 } 18 19 func (m *microTransport) Stream(ts pb.Transport_StreamServer) (err error) { 20 21 sock := &grpcTransportSocket{ 22 stream: ts, 23 local: m.addr, 24 } 25 26 p, ok := peer.FromContext(ts.Context()) 27 if ok { 28 sock.remote = p.Addr.String() 29 } 30 31 defer func() { 32 if r := recover(); r != nil { 33 logger.Error(r, string(debug.Stack())) 34 sock.Close() 35 err = errors.InternalServerError("go.micro.transport", "panic recovered: %v", r) 36 } 37 }() 38 39 // execute socket func 40 m.fn(sock) 41 42 return err 43 }