gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/util/mux/mux.go (about)

     1  // Package mux provides proxy muxing
     2  package mux
     3  
     4  import (
     5  	"context"
     6  	"sync"
     7  
     8  	"gitee.com/liuxuezhan/go-micro-v1.18.0/debug/service/handler"
     9  	"gitee.com/liuxuezhan/go-micro-v1.18.0/proxy"
    10  	"gitee.com/liuxuezhan/go-micro-v1.18.0/server"
    11  )
    12  
    13  // Server is a proxy muxer that incudes the use of the DefaultHandler
    14  type Server struct {
    15  	// name of service
    16  	Name string
    17  	// Proxy handler
    18  	Proxy proxy.Proxy
    19  }
    20  
    21  var (
    22  	once sync.Once
    23  )
    24  
    25  func (s *Server) ProcessMessage(ctx context.Context, msg server.Message) error {
    26  	if msg.Topic() == s.Name {
    27  		return server.DefaultRouter.ProcessMessage(ctx, msg)
    28  	}
    29  	return s.Proxy.ProcessMessage(ctx, msg)
    30  }
    31  
    32  func (s *Server) ServeRequest(ctx context.Context, req server.Request, rsp server.Response) error {
    33  	if req.Service() == s.Name {
    34  		return server.DefaultRouter.ServeRequest(ctx, req, rsp)
    35  	}
    36  	return s.Proxy.ServeRequest(ctx, req, rsp)
    37  }
    38  
    39  func New(name string, p proxy.Proxy) *Server {
    40  	// only register this once
    41  	once.Do(func() {
    42  		server.DefaultRouter.Handle(
    43  			server.DefaultRouter.NewHandler(
    44  				handler.DefaultHandler,
    45  				server.InternalHandler(true),
    46  			),
    47  		)
    48  	})
    49  
    50  	return &Server{
    51  		Name:  name,
    52  		Proxy: p,
    53  	}
    54  }