Browse Source

Add some more server code...

master
Georg Hopp 7 years ago
parent
commit
686cbdf330
Signed by: ghopp GPG Key ID: 4C5D226768784538
  1. 60
      main.go

60
main.go

@ -25,14 +25,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package test package test
import ( import (
"context"
"encoding/json" "encoding/json"
"io"
"net/http" "net/http"
"os"
"os/signal"
"strings" "strings"
//"os"
"io"
"syscall"
"gitlab.weird-web-workers.org/golang/logger"
) )
type ApiHandler struct {}
type ApiHandler struct {
log *logger.Logger
}
type version struct { type version struct {
Version string `json:"Version"` Version string `json:"Version"`
@ -40,6 +47,12 @@ type version struct {
BuildTime string `json:"BuildTimestamp"` BuildTime string `json:"BuildTimestamp"`
} }
type Server struct {
server *http.Server
log *logger.Logger
Stop chan bool
}
func (handler *ApiHandler) ServeHTTP( func (handler *ApiHandler) ServeHTTP(
response http.ResponseWriter, response http.ResponseWriter,
request *http.Request, request *http.Request,
@ -65,10 +78,47 @@ func (handler *ApiHandler) ServeHTTP(
} }
} }
func router() {
handler := ApiHandler{}
func NewServer(addr string, log *logger.Logger) (server *Server) {
handler := ApiHandler{log: log}
http.Handle("/api/0.0.1/", http.StripPrefix("/api/0.0.1/", &handler)) http.Handle("/api/0.0.1/", http.StripPrefix("/api/0.0.1/", &handler))
server = &Server{
server: &http.Server{Addr: addr},
log: log,
Stop: make(chan bool),
}
go func() {
server.log.Info("Listening on %s", addr)
if err := server.server.ListenAndServe();
err != http.ErrServerClosed {
logger.Default.LogError(err, "Stop listening")
}
}()
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt, syscall.SIGTERM, syscall.SIGINT)
go func() {
for run, ok := true, true; run && ok; {
select {
case <-interrupt:
server.log.Info("API service Interrupted by signal")
run = false
case run, ok = <-server.Stop:
server.log.Info("API service stopped")
}
}
ctx := context.Background()
if err := server.server.Shutdown(ctx); err != nil {
server.log.LogError(err, "Unclean server shutdown")
} else {
server.log.Info("Server stopped")
}
server.Stop <- true
}()
return
} }
// vim: ts=4 sts=4 sw=4 noet tw=72: // vim: ts=4 sts=4 sw=4 noet tw=72:
Loading…
Cancel
Save