mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-10-23 05:51:39 +00:00
Port Session objects to use Project instead of SessionConfig
This commit is contained in:
parent
0a05ab4d69
commit
bfda025a97
4 changed files with 30 additions and 40 deletions
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue