Files
quyun/backend/providers/cmux/config.go
2025-04-30 21:05:16 +08:00

62 lines
1.1 KiB
Go

package cmux
import (
"fmt"
"quyun/providers/grpc"
"quyun/providers/http"
"github.com/soheilhy/cmux"
"go.ipao.vip/atom/container"
"go.ipao.vip/atom/opt"
"golang.org/x/sync/errgroup"
)
const DefaultPrefix = "Cmux"
func DefaultProvider() container.ProviderContainer {
return container.ProviderContainer{
Provider: Provide,
Options: []opt.Option{
opt.Prefix(DefaultPrefix),
},
}
}
type Config struct {
Host *string
Port uint
}
func (h *Config) Address() string {
if h.Host == nil {
return fmt.Sprintf(":%d", h.Port)
}
return fmt.Sprintf("%s:%d", *h.Host, h.Port)
}
type CMux struct {
Http *http.Service
Grpc *grpc.Grpc
Mux cmux.CMux
}
func (c *CMux) Serve() error {
// grpcL := c.Mux.Match(cmux.HTTP2HeaderField("content-type", "application/grpc"))
// httpL := c.Mux.Match(cmux.HTTP1Fast())
// httpL := c.Mux.Match(cmux.Any())
httpL := c.Mux.Match(cmux.HTTP1Fast())
grpcL := c.Mux.Match(cmux.Any())
var eg errgroup.Group
eg.Go(func() error {
return c.Grpc.ServeWithListener(grpcL)
})
eg.Go(func() error {
return c.Http.Listener(httpL)
})
return c.Mux.Serve()
}