shotgun/main.go

61 lines
1.4 KiB
Go
Raw Normal View History

2024-01-27 14:02:10 -06:00
package main
import (
2024-02-01 08:26:27 -06:00
"context"
2024-02-02 12:57:18 -06:00
"log/slog"
2024-01-27 14:02:10 -06:00
"net/http"
2024-02-02 12:51:28 -06:00
"os"
2024-01-27 14:02:10 -06:00
"github.com/go-chi/chi/v5"
2024-02-03 10:21:06 -06:00
"github.com/go-chi/chi/v5/middleware"
2024-02-01 08:26:27 -06:00
"gitlab.com/zephyrtronium/sq"
2024-02-02 17:35:36 -06:00
"nhooyr.io/websocket"
2024-01-27 14:02:10 -06:00
"git.sunturtle.xyz/studio/shotgun/lobby"
2024-02-01 21:02:30 -06:00
"git.sunturtle.xyz/studio/shotgun/player"
2024-01-27 14:02:10 -06:00
"git.sunturtle.xyz/studio/shotgun/serve"
2024-02-01 08:26:27 -06:00
_ "modernc.org/sqlite"
2024-01-27 14:02:10 -06:00
)
2024-02-02 12:51:28 -06:00
var (
addr = os.Getenv("SHOTGUN_HTTP")
public = os.Getenv("SHOTGUN_PUBLIC")
2024-02-02 18:29:07 -06:00
dsn = os.Getenv("SHOTGUN_DB")
2024-02-02 12:51:28 -06:00
)
2024-01-27 14:02:10 -06:00
func main() {
2024-02-02 18:29:07 -06:00
db, err := sq.Open("sqlite", dsn)
2024-02-01 08:26:27 -06:00
if err != nil {
panic(err)
}
2024-02-02 18:29:07 -06:00
if err := db.Ping(context.Background()); err != nil {
2024-02-01 21:02:30 -06:00
panic(err)
}
2024-02-02 18:29:07 -06:00
if len(os.Args) > 1 && os.Args[1] == "init" {
if err := player.InitSessions(context.Background(), db); err != nil {
panic(err)
}
if err := player.InitUsers(context.Background(), db); err != nil {
panic(err)
}
return
2024-02-01 21:02:30 -06:00
}
s := Server{
l: lobby.New(),
2024-02-02 18:29:07 -06:00
creds: db,
sessions: db,
2024-02-02 17:35:36 -06:00
pp: map[player.ID]*websocket.Conn{},
j: map[lobby.GameID]chan person{},
2024-02-01 21:02:30 -06:00
}
2024-01-27 14:02:10 -06:00
r := chi.NewRouter()
2024-02-01 21:02:30 -06:00
r.Post("/user/register", s.Register)
2024-02-01 20:40:59 -06:00
r.Post("/user/login", s.Login)
2024-02-02 18:29:07 -06:00
r.With(serve.WithSession(db)).Get("/user/me", s.Me)
r.With(serve.WithSession(db)).Get("/queue", s.Queue)
2024-02-03 10:21:06 -06:00
r.With(middleware.Compress(5, "text/html", "text/javascript", "text/css")).Method("GET", "/*", http.FileServer(http.Dir(public)))
2024-02-02 12:57:18 -06:00
slog.Info("listening", "addr", addr, "public", public)
2024-02-02 12:51:28 -06:00
http.ListenAndServe(addr, r)
2024-01-27 14:02:10 -06:00
}