forked from jmug/stoatchat
43 lines
1.2 KiB
Rust
43 lines
1.2 KiB
Rust
use std::env;
|
|
|
|
use async_std::net::TcpListener;
|
|
use revolt_presence::clear_region;
|
|
|
|
#[macro_use]
|
|
extern crate log;
|
|
|
|
pub mod config;
|
|
pub mod events;
|
|
|
|
mod database;
|
|
mod websocket;
|
|
|
|
#[async_std::main]
|
|
async fn main() {
|
|
// Configure requirements for Bonfire.
|
|
revolt_config::configure!(events);
|
|
database::connect().await;
|
|
|
|
// Clean up the current region information.
|
|
let no_clear_region = env::var("NO_CLEAR_PRESENCE").unwrap_or_else(|_| "0".into()) == "1";
|
|
if !no_clear_region {
|
|
clear_region(None).await;
|
|
}
|
|
|
|
// Setup a TCP listener to accept WebSocket connections on.
|
|
// By default, we bind to port 14703 on all interfaces.
|
|
let bind = env::var("HOST").unwrap_or_else(|_| "0.0.0.0:14703".into());
|
|
info!("Listening on host {bind}");
|
|
let try_socket = TcpListener::bind(bind).await;
|
|
let listener = try_socket.expect("Failed to bind");
|
|
|
|
// Start accepting new connections and spawn a client for each connection.
|
|
while let Ok((stream, addr)) = listener.accept().await {
|
|
async_std::task::spawn(async move {
|
|
info!("User connected from {addr:?}");
|
|
websocket::client(database::get_db(), stream, addr).await;
|
|
info!("User disconnected from {addr:?}");
|
|
});
|
|
}
|
|
}
|