diff --git a/Handlers/AddHandler.go b/Handlers/AddHandler.go new file mode 100644 index 0000000..3598752 --- /dev/null +++ b/Handlers/AddHandler.go @@ -0,0 +1,13 @@ +package Handlers + +import ( + "net/http" +) + +func AddPublicHandler(pattern string, handler func(http.ResponseWriter, *http.Request)) { + muxPublic.HandleFunc(pattern, handler) +} + +func AddAdminHandler(pattern string, handler func(http.ResponseWriter, *http.Request)) { + muxAdmin.HandleFunc(pattern, handler) +} diff --git a/Handlers/GetMuxes.go b/Handlers/GetMuxes.go new file mode 100644 index 0000000..b2838e7 --- /dev/null +++ b/Handlers/GetMuxes.go @@ -0,0 +1,15 @@ +package Handlers + +import ( + "net/http" +) + +func GetPublicMux() (mux *http.ServeMux) { + mux = muxPublic + return +} + +func GetAdminMux() (mux *http.ServeMux) { + mux = muxAdmin + return +} diff --git a/Handlers/Init.go b/Handlers/Init.go new file mode 100644 index 0000000..a19d3c9 --- /dev/null +++ b/Handlers/Init.go @@ -0,0 +1,5 @@ +package Handlers + +func init() { + +} diff --git a/Handlers/Variables.go b/Handlers/Variables.go new file mode 100644 index 0000000..37dee9d --- /dev/null +++ b/Handlers/Variables.go @@ -0,0 +1,12 @@ +package Handlers + +import ( + LM "github.com/SommerEngineering/Ocean/Log/Meta" + "net/http" +) + +var ( + senderName LM.Sender = `System::Handlers` + muxPublic *http.ServeMux = http.NewServeMux() + muxAdmin *http.ServeMux = http.NewServeMux() +) diff --git a/System/InitHandlers.go b/System/InitHandlers.go index adde383..c397268 100644 --- a/System/InitHandlers.go +++ b/System/InitHandlers.go @@ -2,6 +2,7 @@ package System import ( "github.com/SommerEngineering/Ocean/ConfigurationDB" + "github.com/SommerEngineering/Ocean/Handlers" "github.com/SommerEngineering/Ocean/ICCC" "github.com/SommerEngineering/Ocean/Log" LM "github.com/SommerEngineering/Ocean/Log/Meta" @@ -9,7 +10,6 @@ import ( "github.com/SommerEngineering/Ocean/Robots" "github.com/SommerEngineering/Ocean/StaticFiles" "github.com/SommerEngineering/Ocean/WebContent" - "net/http" ) func InitHandlers() { @@ -17,15 +17,15 @@ func InitHandlers() { initSystem() Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `Register now all system handlers.`) - http.HandleFunc(`/framework/`, WebContent.HandlerDeliverFramework) - http.HandleFunc(`/staticFiles/`, StaticFiles.HandlerStaticFiles) - http.HandleFunc(`/next/number`, NumGen.HandlerGetNext) - http.HandleFunc(`/robots.txt`, Robots.HandlerRobots) - http.HandleFunc(`/ICCC`, ICCC.ICCCHandler) + Handlers.AddPublicHandler(`/framework/`, WebContent.HandlerDeliverFramework) + Handlers.AddPublicHandler(`/staticFiles/`, StaticFiles.HandlerStaticFiles) + Handlers.AddPublicHandler(`/next/number`, NumGen.HandlerGetNext) + Handlers.AddPublicHandler(`/robots.txt`, Robots.HandlerRobots) + Handlers.AddPublicHandler(`/ICCC`, ICCC.ICCCHandler) if ConfigurationDB.Read(`MapStaticFiles2Root`) == "true" { Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `The static files are mapped to the root.`) - http.HandleFunc(`/`, StaticFiles.HandlerMapStaticFiles2Root) + Handlers.AddPublicHandler(`/`, StaticFiles.HandlerMapStaticFiles2Root) } Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `Done with registering all system handler.`) diff --git a/System/Start.go b/System/Start.go index 3f9b154..0840b66 100644 --- a/System/Start.go +++ b/System/Start.go @@ -1,22 +1,9 @@ package System import ( - "github.com/SommerEngineering/Ocean/ICCC" - "github.com/SommerEngineering/Ocean/Log" - LM "github.com/SommerEngineering/Ocean/Log/Meta" - "github.com/SommerEngineering/Ocean/Tools" - "net/http" + "github.com/SommerEngineering/Ocean/WebServer" ) func StartAndBlockForever() { - ipAddressPort := Tools.LocalIPAddressAndPort() - - // Tell the whole cluster, that we are up and ready: - data := ICCCStartUpMessage{} - data.IPAddressAndPort = ipAddressPort - ICCC.WriteMessage2All(ICCC.ChannelSYSTEM, `System::Start`, data) - - // Start and block: - Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `Web server is now listening.`, `Configuration for hostname and port.`, ipAddressPort) - http.ListenAndServe(ipAddressPort, nil) + WebServer.Start() } diff --git a/System/ICCCStartUp.go b/WebServer/ICCCStartup.go similarity index 72% rename from System/ICCCStartUp.go rename to WebServer/ICCCStartup.go index 3acee47..58e4895 100644 --- a/System/ICCCStartUp.go +++ b/WebServer/ICCCStartup.go @@ -1,4 +1,4 @@ -package System +package WebServer type ICCCStartUpMessage struct { IPAddressAndPort string diff --git a/WebServer/Init.go b/WebServer/Init.go new file mode 100644 index 0000000..3e769b7 --- /dev/null +++ b/WebServer/Init.go @@ -0,0 +1,34 @@ +package WebServer + +import ( + "github.com/SommerEngineering/Ocean/Handlers" + "github.com/SommerEngineering/Ocean/Log" + LM "github.com/SommerEngineering/Ocean/Log/Meta" + "github.com/SommerEngineering/Ocean/Tools" + "net/http" + "time" +) + +func init() { + + Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `Init the web server now.`) + defer Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `Done init the web server.`) + + serverPublicAddressPort := Tools.LocalIPAddressAndPort() + + serverPublic = &http.Server{} + serverPublic.Addr = serverPublicAddressPort + serverPublic.Handler = Handlers.GetPublicMux() + serverPublic.ReadTimeout = 10 * time.Second + serverPublic.WriteTimeout = 10 * time.Second + serverPublic.MaxHeaderBytes = 1024 + serverPublic.SetKeepAlivesEnabled(true) + + serverAdmin = &http.Server{} + serverAdmin.Addr = serverAdminAddressPort + serverAdmin.Handler = Handlers.GetAdminMux() + serverAdmin.ReadTimeout = 10 * time.Second + serverAdmin.WriteTimeout = 10 * time.Second + serverAdmin.MaxHeaderBytes = 1024 + serverAdmin.SetKeepAlivesEnabled(true) +} diff --git a/WebServer/Start.go b/WebServer/Start.go new file mode 100644 index 0000000..5c0567b --- /dev/null +++ b/WebServer/Start.go @@ -0,0 +1,23 @@ +package WebServer + +import ( + "github.com/SommerEngineering/Ocean/ICCC" + "github.com/SommerEngineering/Ocean/Log" + LM "github.com/SommerEngineering/Ocean/Log/Meta" +) + +func Start() { + if serverPublic != nil { + // Tell the whole cluster, that we are up and ready: + data := ICCCStartUpMessage{} + data.IPAddressAndPort = serverPublicAddressPort + ICCC.WriteMessage2All(ICCC.ChannelSYSTEM, `System::Start`, data) + + Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `Web server is now listening.`, `Configuration for hostname and port.`, serverPublicAddressPort) + go serverPublic.ListenAndServe() + } + + if serverAdmin != nil { + go serverAdmin.ListenAndServe() + } +} diff --git a/WebServer/Variables.go b/WebServer/Variables.go new file mode 100644 index 0000000..e195fb3 --- /dev/null +++ b/WebServer/Variables.go @@ -0,0 +1,14 @@ +package WebServer + +import ( + LM "github.com/SommerEngineering/Ocean/Log/Meta" + "net/http" +) + +var ( + senderName LM.Sender = `System::WebServer` + serverPublic *http.Server = nil + serverAdmin *http.Server = nil + serverPublicAddressPort string = "" + serverAdminAddressPort string = "" +)