beginnings of page functions, and server shutdown gracefully

This commit is contained in:
2025-09-17 23:07:42 -06:00
parent 877f364e71
commit 34b6abb92e
2 changed files with 44 additions and 6 deletions
+27 -6
View File
@@ -11,6 +11,12 @@
package main
import (
"context"
"net/http"
"os"
"os/signal"
"time"
"git.erbosoft.com/amy/amsterdam/config"
"git.erbosoft.com/amy/amsterdam/ui"
"github.com/labstack/echo-contrib/session"
@@ -28,10 +34,7 @@ func setupEcho() *echo.Echo {
e.Use(session.Middleware(ui.SessionStore))
e.GET("/img/*", ui.AmWrap(ui.AmServeImage))
e.GET("/", ui.AmWrap(func(ctxt ui.AmContext) (string, any, error) {
ctxt.VarMap().Set("amsterdam_pageTitle", "My Front Page")
return "framed_template", "top.jet", nil
}))
e.GET("/", ui.AmWrap(TopPage))
return e
}
@@ -43,7 +46,25 @@ func main() {
ui.SetupTemplates()
ui.SetupSessionManager()
// Set up Echo and start it. Won't return.
// Set up Echo.
e := setupEcho()
e.Logger.Fatal(e.Start(":1323"))
// Set up to trap SIGINT and shut down gracefully
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
defer stop()
// Start server
go func() {
if err := e.Start(":1323"); err != nil && err != http.ErrServerClosed {
e.Logger.Fatalf("shutting down the server: %v", err)
}
}()
// Wait for the interrupt signal and then gracefully shut the server down.
<-ctx.Done()
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
if err := e.Shutdown(ctx); err != nil {
e.Logger.Fatal(err)
}
}
+17
View File
@@ -0,0 +1,17 @@
/*
* Amsterdam Web Communities System
* Copyright (c) 2025 Erbosoft Metaverse Design Solutions, All Rights Reserved
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
// Package main contains the high-level Amsterdam logic.
package main
import "git.erbosoft.com/amy/amsterdam/ui"
func TopPage(ctxt ui.AmContext) (string, any, error) {
ctxt.VarMap().Set("amsterdam_pageTitle", "My Front Page")
return "framed_template", "top.jet", nil
}