diff --git a/doc/grobdesign/client/Class_Client.png b/doc/grobdesign/client/Class_Client.png new file mode 100644 index 0000000..79b1ccc Binary files /dev/null and b/doc/grobdesign/client/Class_Client.png differ diff --git a/doc/grobdesign/client/Class_Client.xml b/doc/grobdesign/client/Class_Client.xml new file mode 100644 index 0000000..59aa1ec --- /dev/null +++ b/doc/grobdesign/client/Class_Client.xml @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/doc/grobdesign/client/online_visual_paradigm.txt b/doc/grobdesign/client/online_visual_paradigm.txt new file mode 100644 index 0000000..be22008 --- /dev/null +++ b/doc/grobdesign/client/online_visual_paradigm.txt @@ -0,0 +1,4 @@ + +eMail: ilovemicrosoft@doublemail.de + +password: 6994 diff --git a/doc/grobdesign/server/server_architektur.rs b/doc/grobdesign/server/server_architektur.rs new file mode 100644 index 0000000..72617d3 --- /dev/null +++ b/doc/grobdesign/server/server_architektur.rs @@ -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, + 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 = Result; + 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>; + + fn get_texture_by_id(&mut self, id: String) -> ProtocolResult>; + + fn get_texture_by_name(&mut self, id: String) -> ProtocolResult>; + + fn get_texture_file(&mut self, hash: Sha256) -> ProtocolResult>; + + fn get_texture_preview(&mut self, hash: Sha256) -> ProtocolResult>; + + fn replace_texture( + &mut self, + delete: Option, + insert: Option, + insert_texture_data: Option>, + ) -> ProtocolResult; + } + + 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> , TextureFileError> + pub enum TextureFileError { + NotFound, + IOError(io::Error), + ImgError(::image::Error), + } + + pub struct DataStore { + // private attributes + // may change + data_dir: PathBuf, + texture: Vec, + preview_cache: HashMap<(TextureFormat, Sha256), Arc>>, + } + + impl DataStore { + pub fn new(path: &Path) -> io::Result { + unimplemented!() + } + + pub fn garbage_collect(&mut self) -> io::Result<()> { + unimplemented!() + } + + pub fn query(&mut self, query: &self::search::Query) -> Vec { + 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, + } + + pub type QueryParserResult = Result; + pub enum QuerySyntaxError { + UnknownFilter, + } + + impl Query { + pub fn parse(input: &[String]) -> QueryParserResult { + unimplemented!() + } + } + + pub fn search(input: &[Texture], query: &Query) -> Vec { + 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> { + 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> { + unimplemented!() + } + + fn get_texture_by_id(&mut self, id: String) -> ProtocolResult> { + unimplemented!() + } + + fn get_texture_by_name(&mut self, id: String) -> ProtocolResult> { + unimplemented!() + } + + fn get_texture_file(&mut self, hash: Sha256) -> ProtocolResult>> { + unimplemented!() + } + + fn get_texture_preview(&mut self, hash: Sha256) -> ProtocolResult>> { + unimplemented!() + } + + fn replace_texture( + &mut self, + delete: Option, + insert: Option, + insert_texture_data: Option>, + ) -> ProtocolResult { + unimplemented!() + } + } + + pub fn main() { + unimplemented!() + } +}