issue_179 #180

Merged
vtolstov merged 6 commits from devstigneev/micro-server-http:issue_179 into master 2024-03-08 23:05:32 +03:00
2 changed files with 56 additions and 16 deletions
Showing only changes of commit 1d5142d619 - Show all commits

24
.gitignore vendored Normal file
View File

@ -0,0 +1,24 @@
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
bin
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Dependency directories (remove the comment below to include it)
# vendor/
# Go workspace file
go.work
# General
.DS_Store
.idea
.vscode

22
http.go
View File

@ -408,7 +408,7 @@ func (h *Server) Start() error {
h.Unlock() h.Unlock()
var handler http.Handler var handler http.Handler
var srvFunc func(net.Listener) error //var srvFunc func(net.Listener) error
// nolint: nestif // nolint: nestif
if h.opts.Context != nil { if h.opts.Context != nil {
@ -451,6 +451,7 @@ func (h *Server) Start() error {
fn := handler fn := handler
var hs *http.Server
if h.opts.Context != nil { if h.opts.Context != nil {
if mwf, ok := h.opts.Context.Value(middlewareKey{}).([]func(http.Handler) http.Handler); ok && len(mwf) > 0 { if mwf, ok := h.opts.Context.Value(middlewareKey{}).([]func(http.Handler) http.Handler); ok && len(mwf) > 0 {
// wrap the handler func // wrap the handler func
@ -458,12 +459,22 @@ func (h *Server) Start() error {
fn = mwf[i-1](fn) fn = mwf[i-1](fn)
} }
} }
if hs, ok := h.opts.Context.Value(serverKey{}).(*http.Server); ok && hs != nil { var ok bool
if hs, ok = h.opts.Context.Value(serverKey{}).(*http.Server); ok && hs != nil {
hs.Handler = fn hs.Handler = fn
srvFunc = hs.Serve //srvFunc = hs.Serve
} else {
hs = &http.Server{Handler: fn}
} }
} }
go func() {
if cerr := hs.Serve(ts); cerr != nil && !errors.Is(cerr, net.ErrClosed) {
h.opts.Logger.Error(h.opts.Context, cerr)
}
}()
/*
if srvFunc != nil { if srvFunc != nil {
go func() { go func() {
if cerr := srvFunc(ts); cerr != nil && !errors.Is(cerr, net.ErrClosed) { if cerr := srvFunc(ts); cerr != nil && !errors.Is(cerr, net.ErrClosed) {
@ -478,6 +489,8 @@ func (h *Server) Start() error {
}() }()
} }
*/
go func() { go func() {
t := new(time.Ticker) t := new(time.Ticker)
@ -536,6 +549,9 @@ func (h *Server) Start() error {
config.Logger.Errorf(config.Context, "Server deregister error: %s", err) config.Logger.Errorf(config.Context, "Server deregister error: %s", err)
} }
// err ignore and empty cotnext
hs.Shutdown(context.Background())
ch <- ts.Close() ch <- ts.Close()
}() }()