diff --git a/server/src/commands/serve.rs b/server/src/commands/serve.rs index 210f52f4..de918ec8 100644 --- a/server/src/commands/serve.rs +++ b/server/src/commands/serve.rs @@ -6,7 +6,7 @@ use rand; use project::Project; use web; -use session::{Session, SessionConfig}; +use session::Session; pub fn serve(project_path: &PathBuf, port: Option) { let server_id = rand::random::(); @@ -22,13 +22,9 @@ pub fn serve(project_path: &PathBuf, port: Option) { }, }; - let config = SessionConfig { - partitions: project.partitions.clone(), - }; + println!("Using project {:#?}", project); - println!("Using session config {:#?}", config); - - let mut session = Session::new(config.clone()); + let mut session = Session::new(project.clone()); session.start(); let web_config = web::WebConfig { diff --git a/server/src/rbx_session.rs b/server/src/rbx_session.rs index c74b2330..4bfa1254 100644 --- a/server/src/rbx_session.rs +++ b/server/src/rbx_session.rs @@ -3,11 +3,11 @@ use std::sync::{Arc, RwLock}; use file_route::FileRoute; use id::{Id, get_id}; -use partition::Partition; -use rbx::{RbxInstance, RbxTree}; -use session::SessionConfig; -use vfs_session::{VfsSession, FileItem, FileChange}; use message_session::{Message, MessageSession}; +use partition::Partition; +use project::Project; +use rbx::{RbxInstance, RbxTree}; +use vfs_session::{VfsSession, FileItem, FileChange}; // TODO: Rethink data structure and insertion/update behavior. Maybe break some // pieces off into a new object? @@ -84,7 +84,7 @@ fn file_to_instances( } pub struct RbxSession { - config: SessionConfig, + project: Project, vfs_session: Arc>, @@ -102,9 +102,9 @@ pub struct RbxSession { } impl RbxSession { - pub fn new(config: SessionConfig, vfs_session: Arc>, message_session: MessageSession) -> RbxSession { + pub fn new(project: Project, vfs_session: Arc>, message_session: MessageSession) -> RbxSession { RbxSession { - config, + project, vfs_session, message_session, partition_instances: HashMap::new(), @@ -117,7 +117,7 @@ impl RbxSession { let vfs_session_arc = self.vfs_session.clone(); let vfs_session = vfs_session_arc.read().unwrap(); - for partition in self.config.partitions.values() { + for partition in self.project.partitions.values() { let route = FileRoute { partition: partition.name.clone(), route: Vec::new(), @@ -145,7 +145,7 @@ impl RbxSession { match change { FileChange::Created(route) | FileChange::Updated(route) => { let file_item = vfs_session.get_by_route(route).unwrap(); - let partition = self.config.partitions.get(&route.partition).unwrap(); + let partition = self.project.partitions.get(&route.partition).unwrap(); let parent_id = match route.parent() { Some(parent_route) => match self.instances_by_route.get(&parent_route) { @@ -187,7 +187,7 @@ impl RbxSession { } let file_item = vfs_session.get_by_route(to_route).unwrap(); - let partition = self.config.partitions.get(&to_route.partition).unwrap(); + let partition = self.project.partitions.get(&to_route.partition).unwrap(); let parent_id = match to_route.parent() { Some(parent_route) => match self.instances_by_route.get(&parent_route) { diff --git a/server/src/session.rs b/server/src/session.rs index 6f493260..efa6042b 100644 --- a/server/src/session.rs +++ b/server/src/session.rs @@ -1,24 +1,18 @@ -use std::collections::HashMap; use std::sync::{mpsc, Arc, RwLock}; use std::thread; -use partition::Partition; -use partition_watcher::PartitionWatcher; -use rbx_session::RbxSession; use message_session::MessageSession; +use partition_watcher::PartitionWatcher; +use project::Project; +use rbx_session::RbxSession; use vfs_session::VfsSession; -#[derive(Debug, Clone, PartialEq)] -pub struct SessionConfig { - pub partitions: HashMap, -} - /// Stub trait for middleware trait Middleware { } pub struct Session { - config: SessionConfig, + project: Project, vfs_session: Arc>, rbx_session: Arc>, message_session: MessageSession, @@ -26,17 +20,17 @@ pub struct Session { } impl Session { - pub fn new(config: SessionConfig) -> Session { + pub fn new(project: Project) -> Session { let message_session = MessageSession::new(); - let vfs_session = Arc::new(RwLock::new(VfsSession::new(config.clone()))); - let rbx_session = Arc::new(RwLock::new(RbxSession::new(config.clone(), vfs_session.clone(), message_session.clone()))); + let vfs_session = Arc::new(RwLock::new(VfsSession::new(project.clone()))); + let rbx_session = Arc::new(RwLock::new(RbxSession::new(project.clone(), vfs_session.clone(), message_session.clone()))); Session { vfs_session, rbx_session, watchers: Vec::new(), message_session, - config, + project, } } @@ -53,7 +47,7 @@ impl Session { let (tx, rx) = mpsc::channel(); - for partition in self.config.partitions.values() { + for partition in self.project.partitions.values() { let watcher = PartitionWatcher::start_new(partition.clone(), tx.clone()); self.watchers.push(watcher); diff --git a/server/src/vfs_session.rs b/server/src/vfs_session.rs index 3a60cfbe..c4dc3e0b 100644 --- a/server/src/vfs_session.rs +++ b/server/src/vfs_session.rs @@ -4,7 +4,7 @@ use std::fs::{self, File}; use std::mem; use file_route::FileRoute; -use session::SessionConfig; +use project::Project; /// Represents a file or directory that has been read from the filesystem. #[derive(Debug, Clone)] @@ -37,22 +37,22 @@ pub enum FileChange { } pub struct VfsSession { - pub config: SessionConfig, + pub project: Project, /// The in-memory files associated with each partition. pub partition_files: HashMap, } impl VfsSession { - pub fn new(config: SessionConfig) -> VfsSession { + pub fn new(project: Project) -> VfsSession { VfsSession { - config: config, + project, partition_files: HashMap::new(), } } pub fn read_partitions(&mut self) { - for partition_name in self.config.partitions.keys() { + for partition_name in self.project.partitions.keys() { let route = FileRoute { partition: partition_name.clone(), route: Vec::new(), @@ -175,7 +175,7 @@ impl VfsSession { } fn read(&self, route: &FileRoute) -> Result { - let partition_path = &self.config.partitions.get(&route.partition) + let partition_path = &self.project.partitions.get(&route.partition) .ok_or(())?.path; let path = route.to_path_buf(partition_path); @@ -192,7 +192,7 @@ impl VfsSession { } fn read_file(&self, route: &FileRoute) -> Result { - let partition_path = &self.config.partitions.get(&route.partition) + let partition_path = &self.project.partitions.get(&route.partition) .ok_or(())?.path; let path = route.to_path_buf(partition_path); @@ -211,7 +211,7 @@ impl VfsSession { } fn read_directory(&self, route: &FileRoute) -> Result { - let partition_path = &self.config.partitions.get(&route.partition) + let partition_path = &self.project.partitions.get(&route.partition) .ok_or(())?.path; let path = route.to_path_buf(partition_path);