Files
backend/src/main.rs
2025-01-19 22:08:10 +03:00

52 lines
1.6 KiB
Rust

use std::sync::Arc;
use axum::{routing::{post, get},Router};
use bb8::Pool;
use bb8_postgres::PostgresConnectionManager;
use tokio_postgres::NoTls;
use axum::serve;
//
// Бэкенд модули
//
mod launcher;
mod minecraft_session;
mod web;
//
// Запуск бэкенд сервера
//
#[tokio::main]
async fn main() {
// БД
let manager = PostgresConnectionManager::new_from_stringlike(
"host=127.0.0.1 port=16458 user=dev dbname=punkcraft",
NoTls,
).unwrap();
let pool = Pool::builder()
.max_size(16)
.build(manager)
.await
.unwrap();
let shared_pool = Arc::new(pool);
// Маршрутизация
let app = Router::new()
// launcher
.route("/punkcraft/session/auth", post(launcher::auth::from_password))
.route("/punkcraft/session/auth/token", post(launcher::auth::from_token))
// minecraft_session
.route("/punkcraft/session/join", post(minecraft_session::join))
.route("/punkcraft/session/hasJoined", get(minecraft_session::has_joined))
.route("/punkcraft/session/profile", get(minecraft_session::profile))
.route("/textures/skin/{filename}", get(|path| minecraft_session::serve_texture("assets/session_textures/skin", path)))
.route("/textures/cape/{filename}", get(|path| minecraft_session::serve_texture("assets/session_textures/cape", path)))
// web
.route("/punkcraft/session/register", post(web::register::register))
.with_state(shared_pool);
let listener = tokio::net::TcpListener::bind("127.0.0.1:3001").await.unwrap();
serve(listener, app).await.unwrap();
}