github.com/gofunct/common@v0.0.0-20190131174352-fd058c7fbf22/pkg/transport/engine/mux.go (about) 1 package engine 2 3 import ( 4 "github.com/gofunct/common/pkg/transport/api" 5 "github.com/pkg/errors" 6 "github.com/soheilhy/cmux" 7 "google.golang.org/grpc/grpclog" 8 "net" 9 ) 10 11 // MuxServer wraps a connection multiplexer and a listener. 12 type MuxServer struct { 13 mux cmux.CMux 14 lis net.Listener 15 } 16 17 // NewMuxServer creates MuxServer instance. 18 func NewMuxServer(mux cmux.CMux, lis net.Listener) api.Interface { 19 return &MuxServer{ 20 mux: mux, 21 lis: lis, 22 } 23 } 24 25 // Serve implements Server.Serve 26 func (s *MuxServer) Serve(net.Listener) error { 27 grpclog.Info("mux is starting %s", s.lis.Addr()) 28 29 err := s.mux.Serve() 30 31 grpclog.Infof("mux is closed: %v", err) 32 33 return errors.Wrap(err, "failed to serve cmux server") 34 } 35 36 // Shutdown implements Server.Shutdown 37 func (s *MuxServer) Shutdown() { 38 err := s.lis.Close() 39 if err != nil { 40 grpclog.Errorf("failed to close cmux's listener: %v", err) 41 } 42 }