2021-01-15 21:44:25 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2021-07-08 02:22:34 +00:00
|
|
|
_ "embed"
|
2021-01-15 21:44:25 +00:00
|
|
|
"github.com/valyala/fasthttp"
|
|
|
|
"log"
|
2021-03-10 05:00:31 +00:00
|
|
|
"os"
|
2021-07-24 14:01:51 +00:00
|
|
|
"os/signal"
|
|
|
|
"strconv"
|
2021-01-15 21:44:25 +00:00
|
|
|
"time"
|
2022-03-30 19:13:35 +00:00
|
|
|
"tytanium/constants"
|
|
|
|
"tytanium/global"
|
|
|
|
"tytanium/logger"
|
|
|
|
"tytanium/middleware"
|
2021-01-15 21:44:25 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
s := &fasthttp.Server{
|
2021-09-12 20:18:32 +00:00
|
|
|
ErrorHandler: nil,
|
|
|
|
// yo what da fuck
|
2021-09-08 23:37:19 +00:00
|
|
|
Handler: middleware.HandleCORS(middleware.LimitPath(middleware.HandleHTTPRequest)),
|
2021-01-15 21:44:25 +00:00
|
|
|
HeaderReceived: nil,
|
|
|
|
ContinueHandler: nil,
|
2021-09-14 04:59:45 +00:00
|
|
|
Concurrency: global.Configuration.Server.Concurrency,
|
2021-01-15 21:44:25 +00:00
|
|
|
DisableKeepalive: false,
|
2022-03-23 03:15:29 +00:00
|
|
|
ReadTimeout: time.Millisecond * time.Duration(global.Configuration.Server.ReadTimeout),
|
|
|
|
WriteTimeout: time.Millisecond * time.Duration(global.Configuration.Server.WriteTimeout),
|
2021-01-15 21:44:25 +00:00
|
|
|
TCPKeepalive: false,
|
|
|
|
TCPKeepalivePeriod: 0,
|
2022-03-23 03:15:29 +00:00
|
|
|
MaxRequestBodySize: int(global.Configuration.Storage.MaxSize) + constants.RequestMaxBodySizePadding,
|
2021-01-15 21:44:25 +00:00
|
|
|
ReduceMemoryUsage: false,
|
|
|
|
GetOnly: false,
|
2022-03-23 03:15:29 +00:00
|
|
|
DisablePreParseMultipartForm: true,
|
2021-01-15 21:44:25 +00:00
|
|
|
LogAllErrors: false,
|
|
|
|
DisableHeaderNamesNormalizing: false,
|
2022-03-23 03:15:29 +00:00
|
|
|
NoDefaultServerHeader: true,
|
|
|
|
NoDefaultDate: true,
|
|
|
|
NoDefaultContentType: true,
|
2021-01-15 21:44:25 +00:00
|
|
|
KeepHijackedConns: false,
|
|
|
|
}
|
|
|
|
|
2022-03-23 03:15:29 +00:00
|
|
|
portAsString := strconv.Itoa(global.Configuration.Server.Port)
|
|
|
|
log.Println("Server is listening for new requests on port " + portAsString)
|
|
|
|
|
|
|
|
if global.Configuration.Logging.Enabled {
|
2022-03-30 19:13:35 +00:00
|
|
|
logger.InfoLogger.Printf("Server online, port %s, version %s", portAsString, constants.Version)
|
2022-03-23 03:15:29 +00:00
|
|
|
}
|
2021-07-24 14:01:51 +00:00
|
|
|
|
|
|
|
stop := make(chan os.Signal)
|
|
|
|
signal.Notify(stop, os.Interrupt)
|
|
|
|
|
|
|
|
go func() {
|
2021-09-08 23:37:19 +00:00
|
|
|
if err := s.ListenAndServe(":" + portAsString); err != nil {
|
2021-07-24 14:01:51 +00:00
|
|
|
log.Fatalf("Listen error: %v\n", err)
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
|
|
|
<-stop
|
2022-03-30 19:13:35 +00:00
|
|
|
log.Println("Server is shutting down, please wait")
|
2022-03-23 03:15:29 +00:00
|
|
|
logger.InfoLogger.Println("Server started graceful shutdown")
|
2021-07-24 14:01:51 +00:00
|
|
|
|
|
|
|
if err := s.Shutdown(); err != nil {
|
2022-03-23 03:15:29 +00:00
|
|
|
logger.ErrorLogger.Printf("Server failed to shut down gracefully: %v", err)
|
2021-07-24 14:01:51 +00:00
|
|
|
log.Fatalf("Failed to shutdown gracefully: %v\n", err)
|
2021-01-15 21:44:25 +00:00
|
|
|
}
|
|
|
|
|
2022-03-30 19:13:35 +00:00
|
|
|
log.Println("Shut down. See you next time!")
|
2022-03-23 03:15:29 +00:00
|
|
|
logger.InfoLogger.Println("Server shut down successfully")
|
2021-07-24 14:01:51 +00:00
|
|
|
os.Exit(0)
|
2021-01-15 21:44:25 +00:00
|
|
|
}
|