From d9d4f16c01cf632ae47ced38b19fd4537134c6a2 Mon Sep 17 00:00:00 2001 From: CodeSteak Date: Tue, 7 May 2019 22:43:14 +0200 Subject: [PATCH] implement glue code; Server is now startable Server can now be used. All features except preview and gc should work. --- .gitignore | 3 +++ server/texture-sync-server/src/main.rs | 24 ++++++++++++++++--- .../src/persistency/mod.rs | 18 ++++++++------ .../src/{persistency => }/search/mod.rs | 0 .../{persistency => }/search/query_filter.rs | 0 .../texture-sync-server/src/server_state.rs | 11 +++++++-- 6 files changed, 44 insertions(+), 12 deletions(-) rename server/texture-sync-server/src/{persistency => }/search/mod.rs (100%) rename server/texture-sync-server/src/{persistency => }/search/query_filter.rs (100%) diff --git a/.gitignore b/.gitignore index cd8fa8b..21330ad 100644 --- a/.gitignore +++ b/.gitignore @@ -54,3 +54,6 @@ CMakeLists.txt.user* #IDEA **/.idea **/*.iml + +# TextureSync Server Data Dir +/server/texture-sync-server/data diff --git a/server/texture-sync-server/src/main.rs b/server/texture-sync-server/src/main.rs index b3beb42..4443bce 100644 --- a/server/texture-sync-server/src/main.rs +++ b/server/texture-sync-server/src/main.rs @@ -9,13 +9,31 @@ extern crate lovecraft; extern crate sha2; pub mod model; +pub mod search; pub mod persistency; pub mod protocol; +use protocol::*; mod server_state; -//use server_state::*; +use server_state::*; -fn main() { +use std::path::*; + +fn main() -> std::io::Result<()> { lovecraft::invoke(); - panic!("Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn"); + + let data_path = Path::new("./data"); + println!("loading files from {:?}", data_path); + let server_state = ServerState::new(data_path)?; + + let network_conf = ProtocolConfig::default(); + + println!( + "listening on {}:{}", + network_conf.listen_addr, network_conf.port + ); + + self::protocol::listen_forever(server_state, &network_conf)?; + + Ok(()) } diff --git a/server/texture-sync-server/src/persistency/mod.rs b/server/texture-sync-server/src/persistency/mod.rs index 17088c1..cae8357 100644 --- a/server/texture-sync-server/src/persistency/mod.rs +++ b/server/texture-sync-server/src/persistency/mod.rs @@ -4,10 +4,8 @@ use std::collections::*; use std::io; use std::path::{Path, PathBuf}; -pub use self::search::Query; mod image_convert; mod metadata_file; -mod search; pub type TextureFileResult = Result, TextureFileError>; pub enum TextureFileError { @@ -81,6 +79,9 @@ impl DataStore { } } + store.garbage_collect()?; + store.flush_metadata()?; + Ok(store) } @@ -177,12 +178,15 @@ impl DataStore { unimplemented!(); } - pub fn garbage_collect(&mut self) -> io::Result<()> { - unimplemented!() + pub fn borrow_textures(&self) -> impl Iterator { + self.textures.iter() } - pub fn query(&mut self, _query: &self::search::Query) -> Vec { - unimplemented!(); - // calls self::search::search(... ) + pub fn garbage_collect(&mut self) -> io::Result<()> { + //unimplemented!() + + /// VERY TODO: + eprintln!("WARNING: We are sorry the GC isn't implemented yet :'( "); + Ok(()) } } diff --git a/server/texture-sync-server/src/persistency/search/mod.rs b/server/texture-sync-server/src/search/mod.rs similarity index 100% rename from server/texture-sync-server/src/persistency/search/mod.rs rename to server/texture-sync-server/src/search/mod.rs diff --git a/server/texture-sync-server/src/persistency/search/query_filter.rs b/server/texture-sync-server/src/search/query_filter.rs similarity index 100% rename from server/texture-sync-server/src/persistency/search/query_filter.rs rename to server/texture-sync-server/src/search/query_filter.rs diff --git a/server/texture-sync-server/src/server_state.rs b/server/texture-sync-server/src/server_state.rs index fa0c7a9..0c619e6 100644 --- a/server/texture-sync-server/src/server_state.rs +++ b/server/texture-sync-server/src/server_state.rs @@ -1,6 +1,7 @@ use crate::model::*; use crate::persistency::*; use crate::protocol::*; +use crate::search::*; use std::path::Path; use std::sync::*; @@ -20,8 +21,14 @@ impl ServerState { } impl ProtocolHandler for ServerState { - fn query(&mut self, _query: &[String]) -> ProtocolResult> { - unimplemented!() + fn query(&mut self, query: &[String]) -> ProtocolResult> { + let q = Query::parse(query) + .map_err(|e| ProtocolError::BadRequest(format!("Invalid Query String: {:?}", e)))?; + + let data_store = self.data_store.read().unwrap(); + + let mut textures = data_store.borrow_textures(); + Ok(q.search(&mut textures)) } fn get_texture_by_id(&mut self, id: &str) -> ProtocolResult> {