add Server Diagram to grobdesign.fodt ; fix file layout
| 
		 Before Width: | Height: | Size: 71 KiB  | 
@ -1 +0,0 @@
 | 
			
		||||
<vpwebdiagram>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</vpwebdiagram>
 | 
			
		||||
@ -1,4 +0,0 @@
 | 
			
		||||
 
 | 
			
		||||
eMail: ilovemicrosoft@doublemail.de
 | 
			
		||||
 | 
			
		||||
password: 6994
 | 
			
		||||
@ -1,245 +0,0 @@
 | 
			
		||||
// 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!()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								doc/grobdesign/server/package.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 38 KiB  | 
							
								
								
									
										111
									
								
								doc/grobdesign/server/package.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,111 @@
 | 
			
		||||
<svg width="1337" height="1019" version="1.1" baseProfile="full" viewbox="0 0 1337 1019" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" style="font-weight:bold; font-size:12pt; font-family:'Calibri', Helvetica, sans-serif;;stroke-width:3;stroke-linejoin:round;stroke-linecap:round"><path d="M161 209.9 L13.5 284.5 L13.5 837.5 L13.5 837.5 L81 859.7 L81 859.7 " style="stroke:#33322E;fill:none;stroke-dasharray:6 6;"></path>
 | 
			
		||||
<path d="M66.7 860.6 L74.7 857.6 L70 850.5 L81 859.7 Z" style="stroke:#33322E;fill:#33322E;stroke-dasharray:none;"></path>
 | 
			
		||||
<path d="M301 264.5 L301 284.5 L301 304.5 L301 304.5 " style="stroke:#33322E;fill:none;stroke-dasharray:6 6;"></path>
 | 
			
		||||
<path d="M295.7 291.2 L301 297.8 L306.3 291.2 L301 304.5 Z" style="stroke:#33322E;fill:#33322E;stroke-dasharray:none;"></path>
 | 
			
		||||
<path d="M441 170.1 L956.5 284.5 L956.5 327 L956.5 327 " style="stroke:#33322E;fill:none;stroke-dasharray:6 6;"></path>
 | 
			
		||||
<path d="M951.2 313.7 L956.5 320.3 L961.8 313.7 L956.5 327 Z" style="stroke:#33322E;fill:#33322E;stroke-dasharray:none;"></path>
 | 
			
		||||
<path d="M301 817.5 L301 837.5 L301 857.5 L301 857.5 " style="stroke:#33322E;fill:none;stroke-dasharray:6 6;"></path>
 | 
			
		||||
<path d="M295.7 844.2 L301 850.8 L306.3 844.2 L301 857.5 Z" style="stroke:#33322E;fill:#33322E;stroke-dasharray:none;"></path>
 | 
			
		||||
<path d="M956.5 795 L956.5 837.5 L521 900.3 L521 900.3 " style="stroke:#33322E;fill:none;stroke-dasharray:6 6;"></path>
 | 
			
		||||
<path d="M533.4 893.1 L527.6 899.3 L535 903.7 L521 900.3 Z" style="stroke:#33322E;fill:#33322E;stroke-dasharray:none;"></path>
 | 
			
		||||
<rect x="81.5" y="888.5" height="118" width="440" style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></rect>
 | 
			
		||||
<path d="M81.5 888.5 L81.5 857.5 L145 857.5 L145 888.5 Z" style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="89.5" y="879" style="font-weight:normal;">model</text>
 | 
			
		||||
<path d="M81.5 888.5 L521.5 888.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<rect x="94.5" y="901.5" height="92" width="159" style="stroke:#33322E;fill:#fdf6e3;stroke-dasharray:none;"></rect>
 | 
			
		||||
<text x="112.3" y="923" style="">«enumeration»</text>
 | 
			
		||||
<text x="102.8" y="938" style="">+ TextureFormat</text>
 | 
			
		||||
<path d="M94.5 947.5 L253.5 947.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="102.5" y="969" style="font-weight:normal;">JPEG</text>
 | 
			
		||||
<text x="102.5" y="984" style="font-weight:normal;">PNG</text>
 | 
			
		||||
<rect x="293.5" y="916.5" height="62" width="102" style="stroke:#33322E;fill:#fdf6e3;stroke-dasharray:none;"></rect>
 | 
			
		||||
<text x="301.8" y="938" style="">+ Texture</text>
 | 
			
		||||
<path d="M293.5 947.5 L395.5 947.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="301.5" y="969" style="font-weight:normal;">...</text>
 | 
			
		||||
<rect x="435.5" y="916.5" height="62" width="73" style="stroke:#33322E;fill:#fdf6e3;stroke-dasharray:none;"></rect>
 | 
			
		||||
<text x="443.5" y="938" style="">Sha256</text>
 | 
			
		||||
<path d="M435.5 947.5 L508.5 947.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="443.5" y="969" style="font-weight:normal;">...</text>
 | 
			
		||||
<rect x="588.5" y="358.5" height="437" width="736" style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></rect>
 | 
			
		||||
<path d="M588.5 358.5 L588.5 327.5 L709 327.5 L709 358.5 Z" style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="596.5" y="349" style="font-weight:normal;">persistency</text>
 | 
			
		||||
<path d="M588.5 358.5 L1324.5 358.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<rect x="601.5" y="451.5" height="62" width="121" style="stroke:#33322E;fill:#fdf6e3;stroke-dasharray:none;"></rect>
 | 
			
		||||
<text x="609.8" y="473" style="">+ DataStore</text>
 | 
			
		||||
<path d="M601.5 482.5 L722.5 482.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="609.5" y="504" style="font-weight:normal;">...</text>
 | 
			
		||||
<rect x="762.5" y="402.5" height="190" width="223" style="stroke:#33322E;fill:#fdf6e3;stroke-dasharray:none;"></rect>
 | 
			
		||||
<path d="M762.5 402.5 L762.5 371.5 L835.5 371.5 L835.5 402.5 Z" style="stroke:#33322E;fill:#fdf6e3;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="770.5" y="393" style="font-weight:normal;">result</text>
 | 
			
		||||
<path d="M762.5 402.5 L985.5 402.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<rect x="775.5" y="415.5" height="62" width="197" style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></rect>
 | 
			
		||||
<text x="783.8" y="437" style="">+ TextureFileResult</text>
 | 
			
		||||
<path d="M775.5 446.5 L972.5 446.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="783.5" y="468" style="font-weight:normal;">...</text>
 | 
			
		||||
<rect x="780.5" y="517.5" height="62" width="187" style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></rect>
 | 
			
		||||
<text x="788.5" y="539" style="">+ TextureFileError</text>
 | 
			
		||||
<path d="M780.5 548.5 L967.5 548.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="788.5" y="570" style="font-weight:normal;">...</text>
 | 
			
		||||
<rect x="1025.5" y="453.5" height="88" width="109" style="stroke:#33322E;fill:#fdf6e3;stroke-dasharray:none;"></rect>
 | 
			
		||||
<path d="M1025.5 453.5 L1025.5 422.5 L1098.5 422.5 L1098.5 453.5 Z" style="stroke:#33322E;fill:#fdf6e3;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="1033.5" y="444" style="font-weight:normal;">search</text>
 | 
			
		||||
<path d="M1025.5 453.5 L1134.5 453.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<rect x="1038.5" y="466.5" height="62" width="83" style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></rect>
 | 
			
		||||
<text x="1046.8" y="488" style="">+ Query</text>
 | 
			
		||||
<path d="M1038.5 497.5 L1121.5 497.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="1046.5" y="519" style="font-weight:normal;">...</text>
 | 
			
		||||
<rect x="848.5" y="663.5" height="119" width="463" style="stroke:#33322E;fill:#fdf6e3;stroke-dasharray:none;"></rect>
 | 
			
		||||
<path d="M848.5 663.5 L848.5 632.5 L988 632.5 L988 663.5 Z" style="stroke:#33322E;fill:#fdf6e3;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="856.5" y="654" style="font-weight:normal;">image_convert</text>
 | 
			
		||||
<path d="M848.5 663.5 L1311.5 663.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<rect x="861.5" y="676.5" height="62" width="159" style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></rect>
 | 
			
		||||
<text x="869.8" y="698" style="">+ ConvertConfig</text>
 | 
			
		||||
<path d="M861.5 707.5 L1020.5 707.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="869.5" y="729" style="font-weight:normal;">...</text>
 | 
			
		||||
<path d="M848.5 751.5 L1311.5 751.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="856.5" y="773" style="font-weight:normal;">+ generate_preview(input, format, config) : ...</text>
 | 
			
		||||
<rect x="53.5" y="335.5" height="482" width="495" style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></rect>
 | 
			
		||||
<path d="M53.5 335.5 L53.5 304.5 L145.5 304.5 L145.5 335.5 Z" style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="61.5" y="326" style="font-weight:normal;">protocol</text>
 | 
			
		||||
<path d="M53.5 335.5 L548.5 335.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<rect x="66.5" y="479.5" height="62" width="178" style="stroke:#33322E;fill:#fdf6e3;stroke-dasharray:none;"></rect>
 | 
			
		||||
<text x="74.8" y="501" style="font-weight:normal;font-style:italic;">+ ProtocolHandler</text>
 | 
			
		||||
<path d="M66.5 510.5 L244.5 510.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="74.5" y="532" style="font-weight:normal;">...</text>
 | 
			
		||||
<rect x="71.5" y="711.5" height="62" width="168" style="stroke:#33322E;fill:#fdf6e3;stroke-dasharray:none;"></rect>
 | 
			
		||||
<text x="79.5" y="733" style="">+ ProtocolConfig</text>
 | 
			
		||||
<path d="M71.5 742.5 L239.5 742.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="79.5" y="764" style="font-weight:normal;">...</text>
 | 
			
		||||
<rect x="284.5" y="379.5" height="292" width="251" style="stroke:#33322E;fill:#fdf6e3;stroke-dasharray:none;"></rect>
 | 
			
		||||
<path d="M284.5 379.5 L284.5 348.5 L357.5 348.5 L357.5 379.5 Z" style="stroke:#33322E;fill:#fdf6e3;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="292.5" y="370" style="font-weight:normal;">result</text>
 | 
			
		||||
<path d="M284.5 379.5 L535.5 379.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<rect x="326.5" y="392.5" height="62" width="168" style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></rect>
 | 
			
		||||
<text x="334.5" y="414" style="">+ ProtocolResult</text>
 | 
			
		||||
<path d="M326.5 423.5 L494.5 423.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="334.5" y="445" style="font-weight:normal;">...</text>
 | 
			
		||||
<rect x="330.5" y="494.5" height="62" width="159" style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></rect>
 | 
			
		||||
<text x="338.8" y="516" style="">+ ProtocolError</text>
 | 
			
		||||
<path d="M330.5 525.5 L489.5 525.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="338.5" y="547" style="font-weight:normal;">...</text>
 | 
			
		||||
<rect x="297.5" y="596.5" height="62" width="225" style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></rect>
 | 
			
		||||
<text x="305.5" y="618" style="">+ ReplaceTextureStatus</text>
 | 
			
		||||
<path d="M297.5 627.5 L522.5 627.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="305.5" y="649" style="font-weight:normal;">...</text>
 | 
			
		||||
<path d="M53.5 786.5 L548.5 786.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="61.5" y="808" style="font-weight:normal;">+ listen_forever(handler : &ProtocolHandler) : ...</text>
 | 
			
		||||
<rect x="161.5" y="44.5" height="220" width="280" style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></rect>
 | 
			
		||||
<path d="M161.5 44.5 L161.5 13.5 L215.5 13.5 L215.5 44.5 Z" style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="169.5" y="35" style="font-weight:normal;">main</text>
 | 
			
		||||
<path d="M161.5 44.5 L441.5 44.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<path d="M301.5 119.5 L301.5 139.5 L301.5 159.5 L301.5 159.5 " style="stroke:#33322E;fill:none;stroke-dasharray:6 6;"></path>
 | 
			
		||||
<rect x="241.5" y="57.5" height="62" width="121" style="stroke:#33322E;fill:#fdf6e3;stroke-dasharray:none;"></rect>
 | 
			
		||||
<text x="249.8" y="79" style="">ServerState</text>
 | 
			
		||||
<path d="M241.5 88.5 L362.5 88.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="249.5" y="110" style="font-weight:normal;">...</text>
 | 
			
		||||
<path d="M174.5 159.5 L420.5 159.5 L428.5 167.5 L428.5 220.5 L174.5 220.5 L174.5 159.5 Z" style="stroke:#33322E;fill:#fdf6e3;stroke-dasharray:none;"></path>
 | 
			
		||||
<path d="M420.5 159.5 L420.5 167.5 L428.5 167.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="182.5" y="196" style="font-weight:normal;">implements</text>
 | 
			
		||||
<text x="182.5" y="211" style="font-weight:normal;">protocol::ProtocolHandler</text>
 | 
			
		||||
<path d="M161.5 233.5 L441.5 233.5" style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
 | 
			
		||||
<text x="169.5" y="255" style="font-weight:normal;">+ main()</text></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 11 KiB  | 
							
								
								
									
										73
									
								
								doc/grobdesign/server/package.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,73 @@
 | 
			
		||||
// http://www.nomnoml.com/
 | 
			
		||||
#direction: TD
 | 
			
		||||
 | 
			
		||||
[<package> model|
 | 
			
		||||
    [ «enumeration»
 | 
			
		||||
      + TextureFormat
 | 
			
		||||
    | 
 | 
			
		||||
      JPEG 
 | 
			
		||||
      PNG
 | 
			
		||||
    ]
 | 
			
		||||
    [+ Texture|...]
 | 
			
		||||
    [Sha256|...]
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[<package> persistency |
 | 
			
		||||
	
 | 
			
		||||
    [+ DataStore|...]
 | 
			
		||||
    
 | 
			
		||||
    [<package> result|
 | 
			
		||||
      [+ TextureFileResult|...]
 | 
			
		||||
      [+ TextureFileError|...]
 | 
			
		||||
 | 
			
		||||
      [+ TextureFileResult|...] -/- [+ TextureFileError]
 | 
			
		||||
    ]
 | 
			
		||||
    
 | 
			
		||||
    [<package> search|
 | 
			
		||||
    	[+ Query|...]
 | 
			
		||||
    ]
 | 
			
		||||
    
 | 
			
		||||
    [<package> image_convert|
 | 
			
		||||
    	[+ ConvertConfig|...]
 | 
			
		||||
        |
 | 
			
		||||
        + generate_preview(input, format, config) : ...
 | 
			
		||||
    ]
 | 
			
		||||
    
 | 
			
		||||
    [search] -/- [image_convert]
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[<package> protocol| 
 | 
			
		||||
	[<abstract> + ProtocolHandler|...]
 | 
			
		||||
    [+ ProtocolConfig|...] 
 | 
			
		||||
    
 | 
			
		||||
    [+ ProtocolHandler] -/- [+ ProtocolConfig] 
 | 
			
		||||
    
 | 
			
		||||
    [<package> result|
 | 
			
		||||
      [+ ProtocolResult|...] 
 | 
			
		||||
      [+ ProtocolError|...] 
 | 
			
		||||
      [+ ReplaceTextureStatus|...]
 | 
			
		||||
 | 
			
		||||
      [+ ProtocolResult] -/- [+ ProtocolError] 
 | 
			
		||||
      [+ ProtocolError]  -/- [+ ReplaceTextureStatus]
 | 
			
		||||
    ]
 | 
			
		||||
    |
 | 
			
		||||
    + listen_forever(handler : &ProtocolHandler) : ...
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[<package> main|
 | 
			
		||||
	[ServerState|...] -- [<note> 
 | 
			
		||||
      implements 
 | 
			
		||||
      protocol::ProtocolHandler
 | 
			
		||||
    ]
 | 
			
		||||
    |
 | 
			
		||||
    + main() 
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[main] --> [model]
 | 
			
		||||
[main] --> [protocol]
 | 
			
		||||
[main] --> [persistency]
 | 
			
		||||
 | 
			
		||||
[protocol] --> [model]
 | 
			
		||||
[persistency] --> [model]
 | 
			
		||||
 | 
			
		||||