1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
//! MarticsMemDataBases - Client Side
//! Pure libs

use MMDB_Server::*;
pub use ClientMain::serverconnection;
pub mod ClientMain {
    use std::io::*;
    use std::string;
    use super::*;

    /// ## Introductions
    /// Connection protocol of MMDB_Server
    /// ## Examples
    /// ```
    /// use MMDB_Client::*;
    /// let mut connection = serverconnection::new("127.0.0.1:2274","8uuuhh7tu876ruuiii");
    /// connection.insert("82jsk","83ns,qk");
    /// connection.get("82jsk");
    /// connection.save();
    /// ```
    pub struct serverconnection {
        addr: String,
        pwd: String,
        cpwd: String,
    }

    impl serverconnection {
        fn new(addr: String, pwd: String) -> serverconnection {
            serverconnection{addr,pwd: pwd.clone(),cpwd: "MMDB/0.1.0/CLIENT PASSWORD -KEEP-ALIVE- /PASSWORD CRYPTED:".to_string() + &crypt(pwd.clone().to_string(),"MMDB/0.1.0/DEFAULT PASSWORD CRYPTER -O4UHRWO3IT4UY4WOTIUEHRILEUDSD-  /DEFAULT/".to_string()),}
        }
        fn insert(self, key: String, value: String) {
            let mut stream = std::net::TcpStream::connect(self.addr).unwrap();
            let mut writer = std::io::BufWriter::new(&stream);
            let mut reader = std::io::BufReader::new(&stream);
            writer.write_all(crypt("MMDB/0.1.0/CLIENT CONNECT -KEEP-ALIVE- /ASK FOR CONNECT".to_string().clone(),self.cpwd.clone()).as_bytes());
            writer.flush();
            let mut BUF = String::new();
            reader.read_to_string(&mut BUF);
            BUF = decrypt(BUF,self.cpwd.clone());
            if BUF != "MMDB/0.1.0/SERVER ACCEPT -KEEP-ALIVE- /ACCEPT CONNECT -HEADER- /ASK FOR PASSWORD" {
                eprintln!("Failed to connect!");
                std::process::exit(-1);
            }
            writer.write_all(crypt(self.cpwd.clone(),self.cpwd.clone()).as_bytes());
            reader.read_to_string(&mut BUF);
            BUF = decrypt(BUF,self.cpwd.clone());
            if BUF != "MMDB/0.1.0/SERVER ACCEPT -KEEP-ALIVE- /ACCEPT VERIFY -HEADER- /" {
                eprintln!("Wrong password!");
                std::process::exit(-1);
            }
            writer.write_all(crypt(("MMDB/0.1.0/CLIENT/SET -KEEP-ALIVE- /SET KV PAIR..KV PAIR:".to_string().clone() + &key.clone() + &value.clone()).to_string().clone(),self.cpwd.clone()).as_bytes());
            writer.flush();
            reader.read_to_string(&mut BUF);
            BUF = decrypt(BUF,self.cpwd.clone());
            if BUF != "MMDB/0.1.0/SERVER ACCEPT -KEEP-ALIVE- /ANSWER FOR ASKING SET KV PAIRS..OK" {
                eprintln!("Insert failed!");
                std::process::exit(-1);
            }
            writer.write_all(crypt("MMDB/0.1.0/CLIENT DISCONNECT -KEEP-ALIVE- /DISCONNECT".to_string().clone(),self.cpwd.clone()).as_bytes());
            writer.flush();
            reader.read_to_string(&mut BUF);
            BUF = decrypt(BUF,self.cpwd.clone());
            if BUF != "MMDB/0.1.0/SERVER DISCONNECT -DISCONNECT- /DISCONNECT" {
                eprintln!("Unkown error!");
                std::process::exit(-1);
            }
        }
        fn get(self,key:String) -> String{
            let mut stream = std::net::TcpStream::connect(self.addr).unwrap();
            let mut writer = std::io::BufWriter::new(&stream);
            let mut reader = std::io::BufReader::new(&stream);
            writer.write_all(crypt("MMDB/0.1.0/CLIENT CONNECT -KEEP-ALIVE- /ASK FOR CONNECT".to_string().clone(),self.cpwd.clone()).as_bytes());
            writer.flush();
            let mut BUF = String::new();
            reader.read_to_string(&mut BUF);
            BUF = decrypt(BUF,self.cpwd.clone());
            if BUF != "MMDB/0.1.0/SERVER ACCEPT -KEEP-ALIVE- /ACCEPT CONNECT -HEADER- /ASK FOR PASSWORD" {
                eprintln!("Failed to connect!");
                std::process::exit(-1);
            }
            writer.write_all(crypt(self.cpwd.clone(),self.cpwd.clone()).as_bytes());
            reader.read_to_string(&mut BUF);
            BUF = decrypt(BUF,self.cpwd.clone());
            if BUF != "MMDB/0.1.0/SERVER ACCEPT -KEEP-ALIVE- /ACCEPT VERIFY -HEADER- /" {
                eprintln!("Wrong password!");
                std::process::exit(-1);
            }
            writer.write_all(crypt(("MMDB/0.1.0/CLIENT GET -KEEP-ALIVE- /ASK FOR VAL..KEY:".to_string().clone() + key.clone().as_str()),self.cpwd.clone()).as_bytes());
            writer.flush();
            reader.read_to_string(&mut BUF);
            BUF = decrypt(BUF,self.cpwd.clone());
            let mut split = BUF.split(':');
            split.next();
            let mut BUF_ = String::new();
            reader.read_to_string(&mut BUF_);
            BUF_ = decrypt(BUF_,self.cpwd.clone());
            if BUF != "MMDB/0.1.0/SERVER DISCONNECT -DISCONNECT- /DISCONNECT" {
                eprintln!("Unkown error!");
                std::process::exit(-1);
            }
            split.next().unwrap().to_string().clone()
        }
        fn save(self){
            let mut stream = std::net::TcpStream::connect(self.addr).unwrap();
            let mut writer = std::io::BufWriter::new(&stream);
            let mut reader = std::io::BufReader::new(&stream);
            writer.write_all(crypt("MMDB/0.1.0/CLIENT CONNECT -KEEP-ALIVE- /ASK FOR CONNECT".to_string().clone(),self.cpwd.clone()).as_bytes());
            writer.flush();
            let mut BUF = String::new();
            reader.read_to_string(&mut BUF);
            BUF = decrypt(BUF,self.cpwd.clone());
            if BUF != "MMDB/0.1.0/SERVER ACCEPT -KEEP-ALIVE- /ACCEPT CONNECT -HEADER- /ASK FOR PASSWORD" {
                eprintln!("Failed to connect!");
                std::process::exit(-1);
            }
            writer.write_all(crypt(self.cpwd.clone(),self.cpwd.clone()).as_bytes());
            reader.read_to_string(&mut BUF);
            BUF = decrypt(BUF,self.cpwd.clone());
            if BUF != "MMDB/0.1.0/SERVER ACCEPT -KEEP-ALIVE- /ACCEPT VERIFY -HEADER- /" {
                eprintln!("Wrong password!");
                std::process::exit(-1);
            }
            writer.write_all(crypt("MMDB/0.1.0/CLIENT -KEEP-ALIVE- /SAVE".to_string().clone(),self.cpwd.clone()).as_bytes());
            writer.flush();
            reader.read_to_string(&mut BUF);
            BUF = decrypt(BUF,self.cpwd.clone());
            if BUF != "MMDB/0.1.0/SERVER ACCEPT -KEEP-ALIVE- /ANSWER FOR SAVING BATABASES..OK" {
                eprintln!("Failed to save!");
                std::process::exit(-1);
            }
            writer.write_all(crypt("MMDB/0.1.0/CLIENT DISCONNECT -KEEP-ALIVE- /DISCONNECT".to_string().clone(),self.cpwd.clone()).as_bytes());
            writer.flush();
            reader.read_to_string(&mut BUF);
            BUF = decrypt(BUF,self.cpwd.clone());
            if BUF != "MMDB/0.1.0/SERVER DISCONNECT -DISCONNECT- /DISCONNECT" {
                eprintln!("Unkown error!");
                std::process::exit(-1);
            }
        }
    }
}