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 web;
use session::{Session, SessionConfig};
use session::Session;
pub fn serve(project_path: &PathBuf, port: Option<u64>) {
let server_id = rand::random::<u64>();
@ -22,13 +22,9 @@ pub fn serve(project_path: &PathBuf, port: Option<u64>) {
},
};
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 {

View file

@ -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<RwLock<VfsSession>>,
@ -102,9 +102,9 @@ pub struct 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 {
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) {

View file

@ -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<String, Partition>,
}
/// Stub trait for middleware
trait Middleware {
}
pub struct Session {
config: SessionConfig,
project: Project,
vfs_session: Arc<RwLock<VfsSession>>,
rbx_session: Arc<RwLock<RbxSession>>,
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);

View file

@ -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<String, FileItem>,
}
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<FileItem, ()> {
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<FileItem, ()> {
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<FileItem, ()> {
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);