Port Session objects to use Project instead of SessionConfig

This commit is contained in:
Lucien Greathouse 2018-06-05 00:07:15 -07:00
parent 0a05ab4d69
commit bfda025a97
4 changed files with 30 additions and 40 deletions

View file

@ -6,7 +6,7 @@ use rand;
use project::Project; use project::Project;
use web; use web;
use session::{Session, SessionConfig}; use session::Session;
pub fn serve(project_path: &PathBuf, port: Option<u64>) { pub fn serve(project_path: &PathBuf, port: Option<u64>) {
let server_id = rand::random::<u64>(); let server_id = rand::random::<u64>();
@ -22,13 +22,9 @@ pub fn serve(project_path: &PathBuf, port: Option<u64>) {
}, },
}; };
let config = SessionConfig { println!("Using project {:#?}", project);
partitions: project.partitions.clone(),
};
println!("Using session config {:#?}", config); let mut session = Session::new(project.clone());
let mut session = Session::new(config.clone());
session.start(); session.start();
let web_config = web::WebConfig { let web_config = web::WebConfig {

View file

@ -3,11 +3,11 @@ use std::sync::{Arc, RwLock};
use file_route::FileRoute; use file_route::FileRoute;
use id::{Id, get_id}; 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 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 // TODO: Rethink data structure and insertion/update behavior. Maybe break some
// pieces off into a new object? // pieces off into a new object?
@ -84,7 +84,7 @@ fn file_to_instances(
} }
pub struct RbxSession { pub struct RbxSession {
config: SessionConfig, project: Project,
vfs_session: Arc<RwLock<VfsSession>>, vfs_session: Arc<RwLock<VfsSession>>,
@ -102,9 +102,9 @@ pub struct RbxSession {
} }
impl RbxSession { impl RbxSession {
pub fn new(config: SessionConfig, vfs_session: Arc<RwLock<VfsSession>>, message_session: MessageSession) -> RbxSession { pub fn new(project: Project, vfs_session: Arc<RwLock<VfsSession>>, message_session: MessageSession) -> RbxSession {
RbxSession { RbxSession {
config, project,
vfs_session, vfs_session,
message_session, message_session,
partition_instances: HashMap::new(), partition_instances: HashMap::new(),
@ -117,7 +117,7 @@ impl RbxSession {
let vfs_session_arc = self.vfs_session.clone(); let vfs_session_arc = self.vfs_session.clone();
let vfs_session = vfs_session_arc.read().unwrap(); 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 { let route = FileRoute {
partition: partition.name.clone(), partition: partition.name.clone(),
route: Vec::new(), route: Vec::new(),
@ -145,7 +145,7 @@ impl RbxSession {
match change { match change {
FileChange::Created(route) | FileChange::Updated(route) => { FileChange::Created(route) | FileChange::Updated(route) => {
let file_item = vfs_session.get_by_route(route).unwrap(); 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() { let parent_id = match route.parent() {
Some(parent_route) => match self.instances_by_route.get(&parent_route) { 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 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() { let parent_id = match to_route.parent() {
Some(parent_route) => match self.instances_by_route.get(&parent_route) { Some(parent_route) => match self.instances_by_route.get(&parent_route) {

View file

@ -1,24 +1,18 @@
use std::collections::HashMap;
use std::sync::{mpsc, Arc, RwLock}; use std::sync::{mpsc, Arc, RwLock};
use std::thread; use std::thread;
use partition::Partition;
use partition_watcher::PartitionWatcher;
use rbx_session::RbxSession;
use message_session::MessageSession; use message_session::MessageSession;
use partition_watcher::PartitionWatcher;
use project::Project;
use rbx_session::RbxSession;
use vfs_session::VfsSession; use vfs_session::VfsSession;
#[derive(Debug, Clone, PartialEq)]
pub struct SessionConfig {
pub partitions: HashMap<String, Partition>,
}
/// Stub trait for middleware /// Stub trait for middleware
trait Middleware { trait Middleware {
} }
pub struct Session { pub struct Session {
config: SessionConfig, project: Project,
vfs_session: Arc<RwLock<VfsSession>>, vfs_session: Arc<RwLock<VfsSession>>,
rbx_session: Arc<RwLock<RbxSession>>, rbx_session: Arc<RwLock<RbxSession>>,
message_session: MessageSession, message_session: MessageSession,
@ -26,17 +20,17 @@ pub struct Session {
} }
impl Session { impl Session {
pub fn new(config: SessionConfig) -> Session { pub fn new(project: Project) -> Session {
let message_session = MessageSession::new(); let message_session = MessageSession::new();
let vfs_session = Arc::new(RwLock::new(VfsSession::new(config.clone()))); let vfs_session = Arc::new(RwLock::new(VfsSession::new(project.clone())));
let rbx_session = Arc::new(RwLock::new(RbxSession::new(config.clone(), vfs_session.clone(), message_session.clone()))); let rbx_session = Arc::new(RwLock::new(RbxSession::new(project.clone(), vfs_session.clone(), message_session.clone())));
Session { Session {
vfs_session, vfs_session,
rbx_session, rbx_session,
watchers: Vec::new(), watchers: Vec::new(),
message_session, message_session,
config, project,
} }
} }
@ -53,7 +47,7 @@ impl Session {
let (tx, rx) = mpsc::channel(); 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()); let watcher = PartitionWatcher::start_new(partition.clone(), tx.clone());
self.watchers.push(watcher); self.watchers.push(watcher);

View file

@ -4,7 +4,7 @@ use std::fs::{self, File};
use std::mem; use std::mem;
use file_route::FileRoute; use file_route::FileRoute;
use session::SessionConfig; use project::Project;
/// Represents a file or directory that has been read from the filesystem. /// Represents a file or directory that has been read from the filesystem.
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
@ -37,22 +37,22 @@ pub enum FileChange {
} }
pub struct VfsSession { pub struct VfsSession {
pub config: SessionConfig, pub project: Project,
/// The in-memory files associated with each partition. /// The in-memory files associated with each partition.
pub partition_files: HashMap<String, FileItem>, pub partition_files: HashMap<String, FileItem>,
} }
impl VfsSession { impl VfsSession {
pub fn new(config: SessionConfig) -> VfsSession { pub fn new(project: Project) -> VfsSession {
VfsSession { VfsSession {
config: config, project,
partition_files: HashMap::new(), partition_files: HashMap::new(),
} }
} }
pub fn read_partitions(&mut self) { 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 { let route = FileRoute {
partition: partition_name.clone(), partition: partition_name.clone(),
route: Vec::new(), route: Vec::new(),
@ -175,7 +175,7 @@ impl VfsSession {
} }
fn read(&self, route: &FileRoute) -> Result<FileItem, ()> { fn read(&self, route: &FileRoute) -> Result<FileItem, ()> {
let partition_path = &self.config.partitions.get(&route.partition) let partition_path = &self.project.partitions.get(&route.partition)
.ok_or(())?.path; .ok_or(())?.path;
let path = route.to_path_buf(partition_path); let path = route.to_path_buf(partition_path);
@ -192,7 +192,7 @@ impl VfsSession {
} }
fn read_file(&self, route: &FileRoute) -> Result<FileItem, ()> { fn read_file(&self, route: &FileRoute) -> Result<FileItem, ()> {
let partition_path = &self.config.partitions.get(&route.partition) let partition_path = &self.project.partitions.get(&route.partition)
.ok_or(())?.path; .ok_or(())?.path;
let path = route.to_path_buf(partition_path); let path = route.to_path_buf(partition_path);
@ -211,7 +211,7 @@ impl VfsSession {
} }
fn read_directory(&self, route: &FileRoute) -> Result<FileItem, ()> { fn read_directory(&self, route: &FileRoute) -> Result<FileItem, ()> {
let partition_path = &self.config.partitions.get(&route.partition) let partition_path = &self.project.partitions.get(&route.partition)
.ok_or(())?.path; .ok_or(())?.path;
let path = route.to_path_buf(partition_path); let path = route.to_path_buf(partition_path);