highscore-server/src/main.v

68 lines
1.3 KiB
V

module main
import vweb
import db.sqlite
import time
import os
struct App {
vweb.Context
mut:
config shared Config
is_admin bool
pub mut:
db sqlite.DB
}
fn main() {
mut app := &App{}
mut app_config := Config{}
lock app.config {
app.config = load_config() or { panic('Could not load config file: ' + err.msg()) }
app_config = app.config.copy()
}
if !os.exists(app_config.db_path) {
println('Creating database file at ' + app_config.db_path)
mut file := os.create(app_config.db_path) or { panic(err) }
file.close()
}
app.db = sqlite.connect(app_config.db_path) or {
println('Database error!')
panic(err)
}
app.create_tables()
// orm does not yet return Results
// if sqlite.is_error(sql_code) {
// println('Could not create tables!')
// panic('Error code ' + sql_code.str())
// }
mut host := '::'
if app_config.host.len != 0 {
host = app_config.host
}
// Handle graceful shutdown for Docker
os.signal_opt(os.Signal.int, app.shutdown) or { panic(err) }
os.signal_opt(os.Signal.term, app.shutdown) or { panic(err) }
vweb.run_at(app, vweb.RunParams{
host: host
port: app_config.port
family: .ip6
}) or { panic(err) }
}
fn (mut app App) shutdown(sig os.Signal) {
app.db.close() or { panic(err) }
println('Shut down database gracefully')
println('Exiting...')
time.sleep(1e+9) // Sleep one second
exit(0)
}