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  }