Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
edeae23bf1
|
|||
a038b86147
|
|||
ede0b99d3a
|
|||
d04ce18eb0
|
@@ -3,8 +3,10 @@ package ginext
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/rs/zerolog/log"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/mathext"
|
||||
"net"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -65,16 +67,47 @@ func NewEngine(allowCors bool, ginDebug bool, timeout time.Duration) *GinWrapper
|
||||
return wrapper
|
||||
}
|
||||
|
||||
func (w *GinWrapper) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
|
||||
func (w *GinWrapper) ListenAndServeHTTP(addr string, postInit func(port string)) (chan error, *http.Server) {
|
||||
|
||||
if w.ginDebug {
|
||||
w.debugPrintRoutes()
|
||||
w.DebugPrintRoutes()
|
||||
|
||||
httpserver := &http.Server{
|
||||
Addr: addr,
|
||||
Handler: w.engine,
|
||||
}
|
||||
|
||||
w.engine.ServeHTTP(writer, request)
|
||||
errChan := make(chan error)
|
||||
|
||||
go func() {
|
||||
|
||||
ln, err := net.Listen("tcp", httpserver.Addr)
|
||||
if err != nil {
|
||||
errChan <- err
|
||||
return
|
||||
}
|
||||
|
||||
_, port, err := net.SplitHostPort(ln.Addr().String())
|
||||
if err != nil {
|
||||
errChan <- err
|
||||
return
|
||||
}
|
||||
|
||||
log.Info().Str("address", httpserver.Addr).Msg("HTTP-Server started on http://localhost:" + port)
|
||||
|
||||
if postInit != nil {
|
||||
postInit(port) // the net.Listener a few lines above is at this point actually already buffering requests
|
||||
}
|
||||
|
||||
errChan <- httpserver.Serve(ln)
|
||||
}()
|
||||
|
||||
return errChan, httpserver
|
||||
}
|
||||
|
||||
func (w *GinWrapper) debugPrintRoutes() {
|
||||
func (w *GinWrapper) DebugPrintRoutes() {
|
||||
if !w.ginDebug {
|
||||
return
|
||||
}
|
||||
|
||||
lines := make([][4]string, 0)
|
||||
|
||||
@@ -85,8 +118,8 @@ func (w *GinWrapper) debugPrintRoutes() {
|
||||
line := [4]string{
|
||||
spec.Method,
|
||||
spec.URL,
|
||||
strings.Join(spec.Middlewares, " --> "),
|
||||
spec.Method,
|
||||
strings.Join(spec.Middlewares, " -> "),
|
||||
spec.Handler,
|
||||
}
|
||||
|
||||
lines = append(lines, line)
|
||||
@@ -99,8 +132,8 @@ func (w *GinWrapper) debugPrintRoutes() {
|
||||
|
||||
for _, line := range lines {
|
||||
|
||||
fmt.Printf("Gin-Route: [%s] @ %s --> %s --> %s",
|
||||
langext.StrPadRight(line[0], " ", pad[0]),
|
||||
fmt.Printf("Gin-Route: %s %s --> %s --> %s\n",
|
||||
langext.StrPadRight("["+line[0]+"]", " ", pad[0]+2),
|
||||
langext.StrPadRight(line[1], " ", pad[1]),
|
||||
langext.StrPadRight(line[2], " ", pad[2]),
|
||||
langext.StrPadRight(line[3], " ", pad[3]))
|
||||
|
@@ -123,12 +123,23 @@ func (w *GinWrapper) NoRoute(handler WHandlerFunc) {
|
||||
|
||||
func nameOfFunction(f any) string {
|
||||
|
||||
n := runtime.FuncForPC(reflect.ValueOf(f).Pointer()).Name()
|
||||
fname := runtime.FuncForPC(reflect.ValueOf(f).Pointer()).Name()
|
||||
|
||||
split := strings.Split(n, "/")
|
||||
split := strings.Split(fname, "/")
|
||||
if len(split) == 0 {
|
||||
return ""
|
||||
}
|
||||
|
||||
return split[len(split)-1]
|
||||
fname = split[len(split)-1]
|
||||
|
||||
// https://stackoverflow.com/a/32925345/1761622
|
||||
if strings.HasSuffix(fname, "-fm") {
|
||||
fname = fname[:len(fname)-len("-fm")]
|
||||
}
|
||||
|
||||
if strings.HasSuffix(fname, ".func1") {
|
||||
fname = fname[:len(fname)-len(".func1")]
|
||||
}
|
||||
|
||||
return fname
|
||||
}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
package goext
|
||||
|
||||
const GoextVersion = "0.0.201"
|
||||
const GoextVersion = "0.0.205"
|
||||
|
||||
const GoextVersionTimestamp = "2023-07-24T18:22:36+0200"
|
||||
const GoextVersionTimestamp = "2023-07-24T18:47:48+0200"
|
||||
|
Reference in New Issue
Block a user