mirror of
https://github.com/dcarrillo/whatismyip.git
synced 2025-07-03 06:39:26 +00:00
Initial server handling refactor (#9)
This commit is contained in:
101
server/server.go
Normal file
101
server/server.go
Normal file
@ -0,0 +1,101 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"github.com/dcarrillo/whatismyip/internal/setting"
|
||||
"github.com/dcarrillo/whatismyip/models"
|
||||
"golang.org/x/net/context"
|
||||
)
|
||||
|
||||
type Server interface {
|
||||
Start()
|
||||
Stop()
|
||||
}
|
||||
|
||||
type Factory struct {
|
||||
tcpServer *TCPServer
|
||||
tlsServer *TLSServer
|
||||
quicServer *QuicServer
|
||||
}
|
||||
|
||||
func Setup(ctx context.Context, handler http.Handler) *Factory {
|
||||
var tcpServer TCPServer
|
||||
var tlsServer TLSServer
|
||||
var quicServer QuicServer
|
||||
|
||||
if setting.App.BindAddress != "" {
|
||||
tcpServer = NewTCPServer(ctx, &handler)
|
||||
}
|
||||
|
||||
if setting.App.TLSAddress != "" {
|
||||
tlsServer = NewTLSServer(ctx, &handler)
|
||||
if setting.App.EnableHTTP3 {
|
||||
quicServer = NewQuicServer(ctx, &tlsServer)
|
||||
}
|
||||
}
|
||||
|
||||
return &Factory{
|
||||
tcpServer: &tcpServer,
|
||||
tlsServer: &tlsServer,
|
||||
quicServer: &quicServer,
|
||||
}
|
||||
}
|
||||
|
||||
func (w *Factory) Run() {
|
||||
w.start()
|
||||
log.Printf("Starting server handler...")
|
||||
w.Watcher()
|
||||
}
|
||||
|
||||
func (w *Factory) Watcher() {
|
||||
signalChan := make(chan os.Signal, 3)
|
||||
signal.Notify(signalChan, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM)
|
||||
var s os.Signal
|
||||
|
||||
for {
|
||||
s = <-signalChan
|
||||
|
||||
if s == syscall.SIGHUP {
|
||||
w.stop()
|
||||
models.CloseDBs()
|
||||
models.Setup(setting.App.GeodbPath.City, setting.App.GeodbPath.ASN)
|
||||
w.start()
|
||||
} else {
|
||||
log.Printf("Shutting down...")
|
||||
w.stop()
|
||||
models.CloseDBs()
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (w *Factory) start() {
|
||||
if w.tcpServer != nil {
|
||||
w.tcpServer.Start()
|
||||
}
|
||||
|
||||
if w.tlsServer != nil {
|
||||
w.tlsServer.Start()
|
||||
if w.quicServer != nil {
|
||||
w.quicServer.Start()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (w *Factory) stop() {
|
||||
if w.tcpServer != nil {
|
||||
w.tcpServer.Stop()
|
||||
}
|
||||
|
||||
if w.tlsServer != nil {
|
||||
if w.quicServer != nil {
|
||||
w.quicServer.Stop()
|
||||
}
|
||||
w.tlsServer.Stop()
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user