package main import ( "fmt" "log" "net/http" "connectrpc.com/grpcreflect" servicepb "github.com/chathaway-codes/home-sensors/v2/gen/genconnect" "github.com/chathaway-codes/home-sensors/v2/pkg/signaler" "github.com/rs/cors" "golang.org/x/net/http2" "golang.org/x/net/http2/h2c" ) func main() { mux := http.NewServeMux() reflector := grpcreflect.NewStaticReflector( servicepb.SignalerServiceName, ) path, _ := grpcreflect.NewHandlerV1(reflector) fmt.Printf("Got path %s\n", path) mux.Handle(grpcreflect.NewHandlerV1(reflector)) path, _ = grpcreflect.NewHandlerV1Alpha(reflector) fmt.Printf("Got path %s\n", path) mux.Handle(grpcreflect.NewHandlerV1Alpha(reflector)) path, _ = servicepb.NewSignalerServiceHandler(signaler.New()) fmt.Printf("Got path %s\n", path) mux.Handle(servicepb.NewSignalerServiceHandler(signaler.New())) corsHandler := cors.New(cors.Options{ AllowedMethods: []string{ http.MethodGet, http.MethodPost, }, AllowedOrigins: []string{"example.com"}, AllowedHeaders: []string{ "Accept-Encoding", "Authorization", "Content-Encoding", "Content-Type", "Connect-Protocol-Version", "Connect-Timeout-Ms", "Connect-Accept-Encoding", // Unused in web browsers, but added for future-proofing "Connect-Content-Encoding", // Unused in web browsers, but added for future-proofing "Grpc-Timeout", // Used for gRPC-web "X-Grpc-Web", // Used for gRPC-web "X-User-Agent", // Used for gRPC-web }, ExposedHeaders: []string{ "Content-Encoding", // Unused in web browsers, but added for future-proofing "Connect-Content-Encoding", // Unused in web browsers, but added for future-proofing "Grpc-Status", // Required for gRPC-web "Grpc-Message", // Required for gRPC-web }, }) handler := corsHandler.Handler(mux) server := &http.Server{ Addr: "0.0.0.0:8080", Handler: h2c.NewHandler(handler, &http2.Server{}), } if err := server.ListenAndServe(); err != nil { log.Fatalf("Failed to listen for HTTP traffic: %v", err) } }