From 318ce4a52a005e6eec983385ce0529f7a70a6f0b Mon Sep 17 00:00:00 2001 From: Dessalines Date: Wed, 15 Jan 2020 22:01:14 -0500 Subject: [PATCH] Fix issue with adding multiple instances of chatserver. --- server/.rustfmt.toml | 1 + server/src/main.rs | 6 ++++ server/src/routes/websocket.rs | 20 ++----------- server/src/schema.rs | 52 +++++++++++++++++----------------- server/src/websocket/server.rs | 15 ---------- 5 files changed, 35 insertions(+), 59 deletions(-) diff --git a/server/.rustfmt.toml b/server/.rustfmt.toml index b196eaa2d..b1fce9c9a 100644 --- a/server/.rustfmt.toml +++ b/server/.rustfmt.toml @@ -1 +1,2 @@ tab_spaces = 2 +edition="2018" diff --git a/server/src/main.rs b/server/src/main.rs index 3ac07233e..636182aa4 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -2,11 +2,13 @@ extern crate lemmy_server; #[macro_use] extern crate diesel_migrations; +use actix::prelude::*; use actix_web::*; use diesel::r2d2::{ConnectionManager, Pool}; use diesel::PgConnection; use lemmy_server::routes::{federation, feeds, index, nodeinfo, webfinger, websocket}; use lemmy_server::settings::Settings; +use lemmy_server::websocket::server::*; use std::io; embed_migrations!(); @@ -27,6 +29,9 @@ async fn main() -> io::Result<()> { let conn = pool.get().unwrap(); embedded_migrations::run(&conn).unwrap(); + // Set up websocket server + let server = ChatServer::startup(pool.clone()).start(); + println!( "Starting http server at {}:{}", settings.bind, settings.port @@ -37,6 +42,7 @@ async fn main() -> io::Result<()> { App::new() .wrap(middleware::Logger::default()) .data(pool.clone()) + .data(server.clone()) // The routes .configure(federation::config) .configure(feeds::config) diff --git a/server/src/routes/websocket.rs b/server/src/routes/websocket.rs index f5e24e48c..a68b2bcde 100644 --- a/server/src/routes/websocket.rs +++ b/server/src/routes/websocket.rs @@ -1,27 +1,12 @@ use crate::websocket::server::*; -use crate::Settings; use actix::prelude::*; use actix_web::web; use actix_web::*; use actix_web_actors::ws; -use diesel::r2d2::{ConnectionManager, Pool}; -use diesel::PgConnection; use std::time::{Duration, Instant}; pub fn config(cfg: &mut web::ServiceConfig) { - // TODO couldn't figure out how to get this method to recieve the other pool - let settings = Settings::get(); - let manager = ConnectionManager::::new(&settings.get_database_url()); - let pool = Pool::builder() - .max_size(settings.database.pool_size) - .build(manager) - .unwrap_or_else(|_| panic!("Error connecting to {}", settings.get_database_url())); - - // Start chat server actor in separate thread - let server = ChatServer::startup(pool).start(); - cfg - .data(server) - .service(web::resource("/api/v1/ws").to(chat_route)); + cfg.service(web::resource("/api/v1/ws").to(chat_route)); } /// How often heartbeat pings are sent @@ -38,8 +23,7 @@ async fn chat_route( // TODO not sure if the blocking should be here or not ws::start( WSSession { - // db: db.get_ref().clone(), - cs_addr: chat_server.get_ref().clone(), + cs_addr: chat_server.get_ref().to_owned(), id: 0, hb: Instant::now(), ip: req diff --git a/server/src/schema.rs b/server/src/schema.rs index bba39c305..61957067c 100644 --- a/server/src/schema.rs +++ b/server/src/schema.rs @@ -335,30 +335,30 @@ joinable!(user_mention -> comment (comment_id)); joinable!(user_mention -> user_ (recipient_id)); allow_tables_to_appear_in_same_query!( - category, - comment, - comment_like, - comment_saved, - community, - community_follower, - community_moderator, - community_user_ban, - mod_add, - mod_add_community, - mod_ban, - mod_ban_from_community, - mod_lock_post, - mod_remove_comment, - mod_remove_community, - mod_remove_post, - mod_sticky_post, - password_reset_request, - post, - post_like, - post_read, - post_saved, - site, - user_, - user_ban, - user_mention, + category, + comment, + comment_like, + comment_saved, + community, + community_follower, + community_moderator, + community_user_ban, + mod_add, + mod_add_community, + mod_ban, + mod_ban_from_community, + mod_lock_post, + mod_remove_comment, + mod_remove_community, + mod_remove_post, + mod_sticky_post, + password_reset_request, + post, + post_like, + post_read, + post_saved, + site, + user_, + user_ban, + user_mention, ); diff --git a/server/src/websocket/server.rs b/server/src/websocket/server.rs index 006169dfb..957c5f643 100644 --- a/server/src/websocket/server.rs +++ b/server/src/websocket/server.rs @@ -87,21 +87,6 @@ pub struct ChatServer { db: Pool>, } -// impl Default for ChatServer { -// fn default(nah: String) -> ChatServer { -// // default room -// let rooms = HashMap::new(); - -// ChatServer { -// sessions: HashMap::new(), -// rate_limits: HashMap::new(), -// rooms, -// rng: rand::thread_rng(), -// nah: nah, -// } -// } -// } - impl ChatServer { pub fn startup(db: Pool>) -> ChatServer { // default room