mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-25 15:16:07 +00:00
Cleanup old modules and create more focused code
This commit is contained in:
1
server/Cargo.lock
generated
1
server/Cargo.lock
generated
@@ -698,7 +698,6 @@ version = "0.5.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)",
|
"env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"log 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"notify 4.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"notify 4.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ serde_json = "1.0"
|
|||||||
notify = "4.0"
|
notify = "4.0"
|
||||||
rand = "0.4"
|
rand = "0.4"
|
||||||
regex = "1.0"
|
regex = "1.0"
|
||||||
lazy_static = "1.0"
|
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
env_logger = "0.5"
|
env_logger = "0.5"
|
||||||
rbx-tree = { git = "https://github.com/LPGhatguy/rbx-tree.git" }
|
rbx-tree = { git = "https://github.com/LPGhatguy/rbx-tree.git" }
|
||||||
|
|||||||
@@ -4,10 +4,20 @@ extern crate env_logger;
|
|||||||
|
|
||||||
extern crate librojo;
|
extern crate librojo;
|
||||||
|
|
||||||
use std::path::{Path, PathBuf};
|
use std::{
|
||||||
use std::process;
|
path::{Path, PathBuf},
|
||||||
|
process,
|
||||||
|
env,
|
||||||
|
};
|
||||||
|
|
||||||
use librojo::pathext::canonicalish;
|
fn make_path_absolute(value: &Path) -> PathBuf {
|
||||||
|
if value.is_absolute() {
|
||||||
|
PathBuf::from(value)
|
||||||
|
} else {
|
||||||
|
let current_dir = env::current_dir().unwrap();
|
||||||
|
current_dir.join(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
env_logger::Builder::from_default_env()
|
env_logger::Builder::from_default_env()
|
||||||
@@ -36,7 +46,7 @@ fn main() {
|
|||||||
("init", sub_matches) => {
|
("init", sub_matches) => {
|
||||||
let sub_matches = sub_matches.unwrap();
|
let sub_matches = sub_matches.unwrap();
|
||||||
let project_path = Path::new(sub_matches.value_of("PATH").unwrap_or("."));
|
let project_path = Path::new(sub_matches.value_of("PATH").unwrap_or("."));
|
||||||
let full_path = canonicalish(project_path);
|
let full_path = make_path_absolute(project_path);
|
||||||
|
|
||||||
librojo::commands::init(&full_path);
|
librojo::commands::init(&full_path);
|
||||||
},
|
},
|
||||||
@@ -44,7 +54,7 @@ fn main() {
|
|||||||
let sub_matches = sub_matches.unwrap();
|
let sub_matches = sub_matches.unwrap();
|
||||||
|
|
||||||
let project_path = match sub_matches.value_of("PROJECT") {
|
let project_path = match sub_matches.value_of("PROJECT") {
|
||||||
Some(v) => canonicalish(PathBuf::from(v)),
|
Some(v) => make_path_absolute(Path::new(v)),
|
||||||
None => std::env::current_dir().unwrap(),
|
None => std::env::current_dir().unwrap(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
use std::sync::atomic::{AtomicUsize, Ordering};
|
|
||||||
|
|
||||||
/// A unique identifier, not guaranteed to be generated in any order.
|
|
||||||
pub type Id = usize;
|
|
||||||
|
|
||||||
lazy_static! {
|
|
||||||
static ref LAST_ID: AtomicUsize = AtomicUsize::new(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Generate a new ID, which has no defined ordering.
|
|
||||||
pub fn get_id() -> Id {
|
|
||||||
LAST_ID.fetch_add(1, Ordering::SeqCst)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn it_gives_unique_numbers() {
|
|
||||||
let a = get_id();
|
|
||||||
let b = get_id();
|
|
||||||
|
|
||||||
assert!(a != b);
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
#[macro_use] extern crate lazy_static;
|
|
||||||
#[macro_use] extern crate log;
|
#[macro_use] extern crate log;
|
||||||
#[macro_use] extern crate rouille;
|
#[macro_use] extern crate rouille;
|
||||||
#[macro_use] extern crate serde_derive;
|
#[macro_use] extern crate serde_derive;
|
||||||
@@ -16,7 +15,6 @@ extern crate tempfile;
|
|||||||
// pub mod roblox_studio;
|
// pub mod roblox_studio;
|
||||||
pub mod commands;
|
pub mod commands;
|
||||||
pub mod message_queue;
|
pub mod message_queue;
|
||||||
pub mod pathext;
|
|
||||||
pub mod project;
|
pub mod project;
|
||||||
pub mod rbx_session;
|
pub mod rbx_session;
|
||||||
pub mod session;
|
pub mod session;
|
||||||
@@ -24,6 +22,3 @@ pub mod session_id;
|
|||||||
pub mod vfs;
|
pub mod vfs;
|
||||||
pub mod web;
|
pub mod web;
|
||||||
pub mod web_util;
|
pub mod web_util;
|
||||||
|
|
||||||
// TODO: Remove
|
|
||||||
pub mod id;
|
|
||||||
@@ -1,19 +1,37 @@
|
|||||||
use std::collections::HashMap;
|
use std::{
|
||||||
use std::sync::{mpsc, RwLock, Mutex};
|
collections::HashMap,
|
||||||
|
sync::{
|
||||||
|
mpsc,
|
||||||
|
atomic::{AtomicUsize, Ordering},
|
||||||
|
RwLock,
|
||||||
|
Mutex,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
use id::{Id, get_id};
|
use rbx_tree::RbxId;
|
||||||
|
|
||||||
|
/// A unique identifier, not guaranteed to be generated in any order.
|
||||||
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||||
|
pub struct ListenerId(usize);
|
||||||
|
|
||||||
|
/// Generate a new ID, which has no defined ordering.
|
||||||
|
pub fn get_listener_id() -> ListenerId {
|
||||||
|
static LAST_ID: AtomicUsize = AtomicUsize::new(0);
|
||||||
|
|
||||||
|
ListenerId(LAST_ID.fetch_add(1, Ordering::SeqCst))
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
#[serde(tag = "type")]
|
#[serde(tag = "type")]
|
||||||
pub enum Message {
|
pub enum Message {
|
||||||
InstanceChanged {
|
InstanceChanged {
|
||||||
id: Id,
|
id: RbxId,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct MessageQueue {
|
pub struct MessageQueue {
|
||||||
messages: RwLock<Vec<Message>>,
|
messages: RwLock<Vec<Message>>,
|
||||||
message_listeners: Mutex<HashMap<Id, mpsc::Sender<()>>>,
|
message_listeners: Mutex<HashMap<ListenerId, mpsc::Sender<()>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MessageQueue {
|
impl MessageQueue {
|
||||||
@@ -39,8 +57,8 @@ impl MessageQueue {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn subscribe(&self, sender: mpsc::Sender<()>) -> Id {
|
pub fn subscribe(&self, sender: mpsc::Sender<()>) -> ListenerId {
|
||||||
let id = get_id();
|
let id = get_listener_id();
|
||||||
|
|
||||||
{
|
{
|
||||||
let mut message_listeners = self.message_listeners.lock().unwrap();
|
let mut message_listeners = self.message_listeners.lock().unwrap();
|
||||||
@@ -50,7 +68,7 @@ impl MessageQueue {
|
|||||||
id
|
id
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn unsubscribe(&self, id: Id) {
|
pub fn unsubscribe(&self, id: ListenerId) {
|
||||||
{
|
{
|
||||||
let mut message_listeners = self.message_listeners.lock().unwrap();
|
let mut message_listeners = self.message_listeners.lock().unwrap();
|
||||||
message_listeners.remove(&id);
|
message_listeners.remove(&id);
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
use std::env::current_dir;
|
|
||||||
use std::path::{Path, PathBuf};
|
|
||||||
|
|
||||||
/// Turns the path into an absolute one, using the current working directory if
|
|
||||||
/// necessary.
|
|
||||||
pub fn canonicalish<T: AsRef<Path>>(value: T) -> PathBuf {
|
|
||||||
let cwd = current_dir().unwrap();
|
|
||||||
|
|
||||||
absoluteify(&cwd, value)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Converts the given path to be absolute if it isn't already using a given
|
|
||||||
/// root.
|
|
||||||
fn absoluteify<A, B>(root: A, value: B) -> PathBuf
|
|
||||||
where
|
|
||||||
A: AsRef<Path>,
|
|
||||||
B: AsRef<Path>,
|
|
||||||
{
|
|
||||||
let root = root.as_ref();
|
|
||||||
let value = value.as_ref();
|
|
||||||
|
|
||||||
if value.is_absolute() {
|
|
||||||
PathBuf::from(value)
|
|
||||||
} else {
|
|
||||||
root.join(value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -28,11 +28,6 @@ impl RbxSession {
|
|||||||
construct_initial_tree(&project, &temp_vfs)
|
construct_initial_tree(&project, &temp_vfs)
|
||||||
};
|
};
|
||||||
|
|
||||||
{
|
|
||||||
use serde_json;
|
|
||||||
println!("{}", serde_json::to_string(&tree).unwrap());
|
|
||||||
}
|
|
||||||
|
|
||||||
RbxSession {
|
RbxSession {
|
||||||
tree,
|
tree,
|
||||||
paths_to_ids,
|
paths_to_ids,
|
||||||
@@ -43,15 +38,15 @@ impl RbxSession {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn path_created_or_updated(&mut self, path: &Path) {
|
pub fn path_created_or_updated(&mut self, path: &Path) {
|
||||||
println!("Path changed: {}", path.display());
|
info!("Path changed: {}", path.display());
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn path_removed(&mut self, path: &Path) {
|
pub fn path_removed(&mut self, path: &Path) {
|
||||||
println!("Path removed: {}", path.display());
|
info!("Path removed: {}", path.display());
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn path_renamed(&mut self, from_path: &Path, to_path: &Path) {
|
pub fn path_renamed(&mut self, from_path: &Path, to_path: &Path) {
|
||||||
println!("Path renamed from {} to {}", from_path.display(), to_path.display());
|
info!("Path renamed from {} to {}", from_path.display(), to_path.display());
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_tree(&self) -> &RbxTree {
|
pub fn get_tree(&self) -> &RbxTree {
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ impl Session {
|
|||||||
let vfs_temp = vfs.lock().unwrap();
|
let vfs_temp = vfs.lock().unwrap();
|
||||||
|
|
||||||
for root in vfs_temp.get_roots() {
|
for root in vfs_temp.get_roots() {
|
||||||
println!("Watching {}", root.display());
|
info!("Watching path {}", root.display());
|
||||||
|
|
||||||
let (watch_tx, watch_rx) = mpsc::channel();
|
let (watch_tx, watch_rx) = mpsc::channel();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user