| use axum::{routing::{get, post}, Router}; |
| use std::net::SocketAddr; |
| use tower_http::services::ServeDir; |
| use std::sync::Arc; |
| use tokio::sync::broadcast; |
|
|
| mod agent; |
| mod browser; |
| mod sse; |
| mod ui; |
|
|
| pub struct AppState { |
| pub tx: broadcast::Sender<String>, |
| } |
|
|
| #[tokio::main] |
| async fn main() { |
| tracing_subscriber::fmt::init(); |
| let (tx, _) = broadcast::channel(100); |
| let state = Arc::new(AppState { tx }); |
|
|
| let app = Router::new() |
| .route("/api/chat", post(agent::chat_handler)) |
| .route("/api/stream", get(sse::stream::sse_handler)) |
| .fallback_service(ServeDir::new("./frontend/dist")) |
| .with_state(state); |
|
|
| let addr = SocketAddr::from(([0, 0, 0, 0], 7860)); |
| axum::Server::bind(&addr).serve(app.into_make_service()).await.unwrap(); |
| } |