From 668b6256517497df46511a33dfe036c8d3de2910 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Mon, 27 Dec 2021 11:05:20 -0300 Subject: [PATCH] match the websocket route before implementations. --- start.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/start.go b/start.go index 3db9fbb..653d683 100644 --- a/start.go +++ b/start.go @@ -22,19 +22,23 @@ var log = zerolog.New(os.Stderr).Output(zerolog.ConsoleWriter{Out: os.Stderr}) var Router = mux.NewRouter() func Start(relay Relay) { + // read host/port (implementations can read other stuff on their own if they need) if err := envconfig.Process("", &s); err != nil { log.Panic().Err(err).Msg("couldn't process envconfig") } + // expose this Log instance so implementations can use it Log = log.With().Str("name", relay.Name()).Logger() + // catch the websocket call before anything else + Router.Path("/").Headers("Upgrade", "websocket").HandlerFunc(handleWebsocket(relay)) + + // allow implementations to do initialization stuff if err := relay.Init(); err != nil { Log.Fatal().Err(err).Msg("failed to start") } - Router.Path("/").Methods("GET").Headers("Upgrade", "websocket"). - HandlerFunc(handleWebsocket(relay)) - + // wait for events to come from implementations, if this is implemented if inj, ok := relay.(Injector); ok { go func() { for event := range inj.InjectEvents() { @@ -43,6 +47,7 @@ func Start(relay Relay) { }() } + // start http server srv := &http.Server{ Handler: cors.Default().Handler(Router), Addr: s.Host + ":" + s.Port,