gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/transport/grpc/handler.go (about) 1 package grpc 2 3 import ( 4 "runtime/debug" 5 6 "gitee.com/liuxuezhan/go-micro-v1.18.0/errors" 7 "gitee.com/liuxuezhan/go-micro-v1.18.0/transport" 8 pb "gitee.com/liuxuezhan/go-micro-v1.18.0/transport/grpc/proto" 9 "gitee.com/liuxuezhan/go-micro-v1.18.0/util/log" 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) error { 20 var err error 21 22 sock := &grpcTransportSocket{ 23 stream: ts, 24 local: m.addr, 25 } 26 27 p, ok := peer.FromContext(ts.Context()) 28 if ok { 29 sock.remote = p.Addr.String() 30 } 31 32 defer func() { 33 if r := recover(); r != nil { 34 log.Log(r, string(debug.Stack())) 35 sock.Close() 36 err = errors.InternalServerError("go.micro.transport", "panic recovered: %v", r) 37 } 38 }() 39 40 // execute socket func 41 m.fn(sock) 42 43 return err 44 }