move diagram files around
This commit is contained in:
		
							
								
								
									
										245
									
								
								doc/grobdesign/server/server_architektur.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										245
									
								
								doc/grobdesign/server/server_architektur.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,245 @@
 | 
			
		||||
// main author: Robin Willmann
 | 
			
		||||
// date : see git.
 | 
			
		||||
// WIP, changes welcome
 | 
			
		||||
 | 
			
		||||
extern crate image;
 | 
			
		||||
 | 
			
		||||
pub mod model {
 | 
			
		||||
    pub struct Sha256(pub [u8; 64]);
 | 
			
		||||
 | 
			
		||||
    pub struct Texture {
 | 
			
		||||
        pub id: String,
 | 
			
		||||
        pub name: String,
 | 
			
		||||
        pub tags: Vec<String>,
 | 
			
		||||
        pub format: TextureFormat,
 | 
			
		||||
        pub resolution: (usize, usize),
 | 
			
		||||
        pub texture_hash: Sha256,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub enum TextureFormat {
 | 
			
		||||
        PNG,
 | 
			
		||||
        JPG,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub mod protocol {
 | 
			
		||||
 | 
			
		||||
    use crate::model::*;
 | 
			
		||||
 | 
			
		||||
    use std::io;
 | 
			
		||||
 | 
			
		||||
    pub enum ReplaceTextureStatus {
 | 
			
		||||
        // Call Again With Texture Binary
 | 
			
		||||
        NeedTextureData,
 | 
			
		||||
        // Done.
 | 
			
		||||
        Ok,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub type ProtocolResult<T> = Result<T, ProtocolError>;
 | 
			
		||||
    pub enum ProtocolError {
 | 
			
		||||
        BadRequest(String),
 | 
			
		||||
        FileNotFound(String),
 | 
			
		||||
        Conflict(String),
 | 
			
		||||
        InternalServerError(std::io::Error),
 | 
			
		||||
        NotImplemented,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub trait ProtocolHandler: Send + Sync {
 | 
			
		||||
        fn query(&mut self, query: &[String]) -> ProtocolResult<Vec<Texture>>;
 | 
			
		||||
 | 
			
		||||
        fn get_texture_by_id(&mut self, id: String) -> ProtocolResult<Option<Texture>>;
 | 
			
		||||
 | 
			
		||||
        fn get_texture_by_name(&mut self, id: String) -> ProtocolResult<Option<Texture>>;
 | 
			
		||||
 | 
			
		||||
        fn get_texture_file(&mut self, hash: Sha256) -> ProtocolResult<Vec<u8>>;
 | 
			
		||||
 | 
			
		||||
        fn get_texture_preview(&mut self, hash: Sha256) -> ProtocolResult<Vec<u8>>;
 | 
			
		||||
 | 
			
		||||
        fn replace_texture(
 | 
			
		||||
            &mut self,
 | 
			
		||||
            delete: Option<Texture>,
 | 
			
		||||
            insert: Option<Texture>,
 | 
			
		||||
            insert_texture_data: Option<Vec<u8>>,
 | 
			
		||||
        ) -> ProtocolResult<ReplaceTextureStatus>;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub struct ProtocolConfig {
 | 
			
		||||
        pub port: u16,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn listen_forever(handler: &ProtocolHandler) -> io::Result<()> {
 | 
			
		||||
        unimplemented!()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub mod persistency {
 | 
			
		||||
 | 
			
		||||
    use crate::model::*;
 | 
			
		||||
 | 
			
		||||
    use std::collections::HashMap;
 | 
			
		||||
    use std::io;
 | 
			
		||||
    use std::path::{Path, PathBuf};
 | 
			
		||||
    use std::sync::Arc;
 | 
			
		||||
    
 | 
			
		||||
    pub type TextureFileResult = Result< Arc<Vec<u8>> , TextureFileError>
 | 
			
		||||
    pub enum TextureFileError {
 | 
			
		||||
        NotFound,
 | 
			
		||||
        IOError(io::Error),
 | 
			
		||||
        ImgError(::image::Error),
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub struct DataStore {
 | 
			
		||||
        // private attributes
 | 
			
		||||
        // may change
 | 
			
		||||
        data_dir: PathBuf,
 | 
			
		||||
        texture: Vec<Texture>,
 | 
			
		||||
        preview_cache: HashMap<(TextureFormat, Sha256), Arc<Vec<u8>>>,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    impl DataStore {
 | 
			
		||||
        pub fn new(path: &Path) -> io::Result<DataStore> {
 | 
			
		||||
            unimplemented!()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        pub fn garbage_collect(&mut self) -> io::Result<()> {
 | 
			
		||||
            unimplemented!()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        pub fn query(&mut self, query: &self::search::Query) -> Vec<Texture> {
 | 
			
		||||
            unimplemented!();
 | 
			
		||||
            // calls self::search::search(... )
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// returns true if successful
 | 
			
		||||
        pub fn delete(&mut self, tex: &Texture) -> bool {
 | 
			
		||||
            unimplemented!();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        pub fn insert(&mut self, tex: Texture) -> bool {
 | 
			
		||||
            unimplemented!();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        pub fn by_name<'a>(&'a self, name: &str) -> &'a Texture {
 | 
			
		||||
            unimplemented!();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        pub fn by_id<'a, 'b>(&'a self, id: &'b str) -> &'a Texture {
 | 
			
		||||
            unimplemented!();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        pub fn has_hash(&self, hash: &Sha256) -> bool {
 | 
			
		||||
            unimplemented!();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        pub fn get_texture_file(&mut self, hash: &Sha256) -> TextureFileResult {
 | 
			
		||||
            unimplemented!();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        pub fn get_texture_preview(&mut self, hash: &Sha256) -> TextureFileResult {
 | 
			
		||||
            unimplemented!();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    pub use self::search::Query;
 | 
			
		||||
 | 
			
		||||
    mod search {
 | 
			
		||||
 | 
			
		||||
        use crate::model::*;
 | 
			
		||||
 | 
			
		||||
        pub struct Query {
 | 
			
		||||
            filters: Vec<QueryFilterModifier>,
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        pub type QueryParserResult = Result<Query, QuerySyntaxError>;
 | 
			
		||||
        pub enum QuerySyntaxError {
 | 
			
		||||
            UnknownFilter,
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        impl Query {
 | 
			
		||||
            pub fn parse(input: &[String]) -> QueryParserResult {
 | 
			
		||||
                unimplemented!()
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        pub fn search(input: &[Texture], query: &Query) -> Vec<Texture> {
 | 
			
		||||
            unimplemented!()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //private
 | 
			
		||||
        enum QueryFilterModifier {
 | 
			
		||||
            None(QueryFilter),
 | 
			
		||||
            Not(QueryFilter),
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //private
 | 
			
		||||
        enum QueryFilter {
 | 
			
		||||
            TagName(String),
 | 
			
		||||
            InName(String),
 | 
			
		||||
            MinResolution(usize),
 | 
			
		||||
            BeforeDate { year: u16, month: u16, day: u16 },
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub mod image_convert {
 | 
			
		||||
        use crate::model::*;
 | 
			
		||||
 | 
			
		||||
        pub struct ConvertConfig {
 | 
			
		||||
            pub desired_size: (usize, usize),
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        pub fn generate_preview(
 | 
			
		||||
            input: &[u8],
 | 
			
		||||
            format: TextureFormat,
 | 
			
		||||
            config: &ConvertConfig,
 | 
			
		||||
        ) -> ::image::ImageResult<Vec<u8>> {
 | 
			
		||||
            unimplemented!()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub mod main {
 | 
			
		||||
 | 
			
		||||
    use crate::model::*;
 | 
			
		||||
    use crate::protocol::*;
 | 
			
		||||
 | 
			
		||||
    use std::sync::Arc;
 | 
			
		||||
 | 
			
		||||
    struct ServerState {
 | 
			
		||||
        // private attributes
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    impl ProtocolHandler for ServerState {
 | 
			
		||||
        fn query(&mut self, query: &[String]) -> ProtocolResult<Vec<Texture>> {
 | 
			
		||||
            unimplemented!()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        fn get_texture_by_id(&mut self, id: String) -> ProtocolResult<Option<Texture>> {
 | 
			
		||||
            unimplemented!()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        fn get_texture_by_name(&mut self, id: String) -> ProtocolResult<Option<Texture>> {
 | 
			
		||||
            unimplemented!()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        fn get_texture_file(&mut self, hash: Sha256) -> ProtocolResult<Arc<Vec<u8>>> {
 | 
			
		||||
            unimplemented!()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        fn get_texture_preview(&mut self, hash: Sha256) -> ProtocolResult<Arc<Vec<u8>>> {
 | 
			
		||||
            unimplemented!()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        fn replace_texture(
 | 
			
		||||
            &mut self,
 | 
			
		||||
            delete: Option<Texture>,
 | 
			
		||||
            insert: Option<Texture>,
 | 
			
		||||
            insert_texture_data: Option<Vec<u8>>,
 | 
			
		||||
        ) -> ProtocolResult<ReplaceTextureStatus> {
 | 
			
		||||
            unimplemented!()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn main() {
 | 
			
		||||
        unimplemented!()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user