create api structures
This commit is contained in:
parent
3146d1364b
commit
0a34a0b210
1
src/api/handler.rs
Normal file
1
src/api/handler.rs
Normal file
|
@ -0,0 +1 @@
|
||||||
|
use rusqlite;
|
3
src/api/mod.rs
Normal file
3
src/api/mod.rs
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
pub mod request;
|
||||||
|
pub mod response;
|
||||||
|
|
63
src/api/request.rs
Normal file
63
src/api/request.rs
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
use fcpv2::types::SSK;
|
||||||
|
use serde_json::Result;
|
||||||
|
use serde_derive::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
pub struct Address {
|
||||||
|
street: String,
|
||||||
|
city: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Debug)]
|
||||||
|
pub enum RequestType {
|
||||||
|
CreateInstance,
|
||||||
|
StartApp,
|
||||||
|
StopApp,
|
||||||
|
SendMessage,
|
||||||
|
LoadUsers,
|
||||||
|
LoadMessages,
|
||||||
|
AddUser,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
struct CreateInstance {
|
||||||
|
req_type: RequestType,
|
||||||
|
name: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
struct StartApp {
|
||||||
|
req_type: RequestType,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
struct StopApp {
|
||||||
|
req_type: RequestType,
|
||||||
|
}
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
struct SendMessage {
|
||||||
|
req_type: RequestType,
|
||||||
|
user_id: u32,
|
||||||
|
message: String,
|
||||||
|
}
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
struct LoadUsers {
|
||||||
|
req_type: RequestType,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
struct LoadMessages {
|
||||||
|
req_type: RequestType,
|
||||||
|
user_id: u32,
|
||||||
|
count: u8,
|
||||||
|
start_index: u8,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
struct AddUser {
|
||||||
|
req_type: RequestType,
|
||||||
|
sign_key: String,
|
||||||
|
insert_key: String,
|
||||||
|
}
|
||||||
|
|
1
src/api/request_handler.rs
Normal file
1
src/api/request_handler.rs
Normal file
|
@ -0,0 +1 @@
|
||||||
|
use
|
27
src/api/response.rs
Normal file
27
src/api/response.rs
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
|
||||||
|
use serde_derive::{Deserialize, Serialize};
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
enum ResponseType{
|
||||||
|
Error,
|
||||||
|
NewMessage,
|
||||||
|
UserList,
|
||||||
|
NewUser,
|
||||||
|
FetchedMessages,
|
||||||
|
InstanceCreated,
|
||||||
|
InstanceAccepted,
|
||||||
|
|
||||||
|
}
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
enum ErrorType{
|
||||||
|
WrongKey
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
struct AppError{
|
||||||
|
res_type: ResponseType,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Status of last requested action. Like `Create Instance` or `LoadUsers`
|
||||||
|
struct ActionStatus{
|
||||||
|
|
||||||
|
}
|
1
src/api/types.rs
Normal file
1
src/api/types.rs
Normal file
|
@ -0,0 +1 @@
|
||||||
|
pub use super::request_types;
|
|
@ -44,13 +44,14 @@ async fn connect_to_client(server_sender: SP, client_receiver: RP) -> io::Result
|
||||||
let addr = stream
|
let addr = stream
|
||||||
.peer_addr()
|
.peer_addr()
|
||||||
.expect("connected streams should have a peer address");
|
.expect("connected streams should have a peer address");
|
||||||
println!("Peer address: {}", addr);
|
log::info!("Peer address: {}", addr);
|
||||||
|
|
||||||
let ws = accept_async(stream)
|
let ws = accept_async(stream)
|
||||||
.await
|
.await
|
||||||
.expect("err during the ws handshake");
|
.expect("err during the ws handshake");
|
||||||
|
|
||||||
|
log::info!("connected to: {}", addr);
|
||||||
let (sender, receiver) = ws.split();
|
let (sender, receiver) = ws.split();
|
||||||
println!("connected to: {}", addr);
|
|
||||||
|
|
||||||
let t1 = task::spawn(connection_for_sending(receiver, server_sender));
|
let t1 = task::spawn(connection_for_sending(receiver, server_sender));
|
||||||
connection_for_receiving(sender, client_receiver, client_repeater).await?;
|
connection_for_receiving(sender, client_receiver, client_repeater).await?;
|
||||||
|
@ -65,18 +66,19 @@ async fn connection_for_receiving(
|
||||||
client_receiver: RP,
|
client_receiver: RP,
|
||||||
server_sender: SP,
|
server_sender: SP,
|
||||||
) -> io::Result<()> {
|
) -> io::Result<()> {
|
||||||
|
log::info!("Connection for receiving launched");
|
||||||
while let Ok(res) = client_receiver.recv() {
|
while let Ok(res) = client_receiver.recv() {
|
||||||
//TODO call client get after receiving NodeHello
|
//TODO call client get after receiving NodeHello
|
||||||
if res.message.lines().next() == Some("NodeHello") {
|
if res.message.lines().next() == Some("NodeHello") {
|
||||||
let server_sender = server_sender.clone();
|
let server_sender = server_sender.clone();
|
||||||
task::spawn(request_repeater(server_sender)).await?;
|
task::spawn(request_repeater(server_sender)).await?;
|
||||||
println!("HEY NODE HELLO \n {}", res.message);
|
log::info!("Client received: \n {}", res.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
sender
|
sender
|
||||||
.send(Message::Text(String::from(res.message).to_owned()))
|
.send(Message::Text(String::from(res.message).to_owned()))
|
||||||
.await
|
.await
|
||||||
.expect("ooops");
|
.expect("couldn't send Message");
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -85,29 +87,32 @@ async fn connection_for_sending(
|
||||||
mut receiver: SplitStream<WebSocketStream<TcpStream>>,
|
mut receiver: SplitStream<WebSocketStream<TcpStream>>,
|
||||||
server_sender: SP,
|
server_sender: SP,
|
||||||
) -> io::Result<()> {
|
) -> io::Result<()> {
|
||||||
|
log::info!("Connection for sending launched");
|
||||||
let mut new_msg = receiver.next();
|
let mut new_msg = receiver.next();
|
||||||
loop {
|
loop {
|
||||||
match new_msg.await {
|
match new_msg.await {
|
||||||
Some(msg) => {
|
Some(msg) => {
|
||||||
let jsoned = msg.unwrap();
|
let jsoned = msg.expect("Falied to unwrap gotted message");
|
||||||
|
log::info!("The message is: {:?}", &jsoned);
|
||||||
|
//TODO handle_request(jsoned, server_sender,);
|
||||||
let res: serde_json::Result<FrontMsg> =
|
let res: serde_json::Result<FrontMsg> =
|
||||||
serde_json::from_str(jsoned.to_text().unwrap());
|
serde_json::from_str(jsoned.to_text().expect("Falied to parse JSON"));
|
||||||
if let Ok(received_msg) = res {
|
if let Ok(received_msg) = res {
|
||||||
let msg = received_msg.message;
|
let msg = received_msg.message;
|
||||||
db::start_db().unwrap();
|
//db::start_db().expect("Failed to start db");
|
||||||
|
|
||||||
server_sender.send(PackedMessage { message: msg }).unwrap();
|
server_sender.send(PackedMessage { message: msg }).expect("Falied to send message");
|
||||||
/* message example
|
/* message example
|
||||||
{
|
{
|
||||||
"user_id": 123456789,
|
"user_id": 123456789,
|
||||||
"receiver_id": 123456789,
|
"receiver_id": 123456789,
|
||||||
"message": "hey dude",
|
"message": "STARTAPP!",
|
||||||
"time": "Tue Oct 13 2020 18:31:22 GMT+0300 (Eastern European Summer Time)"
|
"time": "Tue Oct 13 2020 18:31:22 GMT+0300 (Eastern European Summer Time)"
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
} else {
|
} else {
|
||||||
println!("seems, that messsage formatted wrong");
|
log::info!("seems, that messsage formatted wrong");
|
||||||
println!("{:?}", res);
|
log::info!("{:?}", res);
|
||||||
}
|
}
|
||||||
|
|
||||||
new_msg = receiver.next();
|
new_msg = receiver.next();
|
||||||
|
|
|
@ -33,14 +33,15 @@ async fn server_responce_getter(mut receiver: OwnedReadHalf, client_sender: SP)
|
||||||
match receiver.read(&mut buffer).await {
|
match receiver.read(&mut buffer).await {
|
||||||
Ok(_) => {
|
Ok(_) => {
|
||||||
let received = String::from_utf8_lossy(&buffer[..]);
|
let received = String::from_utf8_lossy(&buffer[..]);
|
||||||
println!("received {}", received);
|
log::info!("received {}", received);
|
||||||
client_sender
|
client_sender
|
||||||
.send(PackedMessage {
|
.send(PackedMessage {
|
||||||
message: received.to_string(),
|
message: received.to_string(),
|
||||||
})
|
})
|
||||||
.unwrap();
|
.expect("Falied to send message to client thread");
|
||||||
|
log::info!("Sended to client!");
|
||||||
}
|
}
|
||||||
Err(e) => println!("Error: {} ", e),
|
Err(e) => log::error!("Error: {} ", e),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ pub async fn to_server_sender(mut sender: OwnedWriteHalf, server_receiver: RP) -
|
||||||
} else if res.message.lines().next() == Some("ClientGet") {
|
} else if res.message.lines().next() == Some("ClientGet") {
|
||||||
let _ = sender.write(res.message.as_bytes()).await?;
|
let _ = sender.write(res.message.as_bytes()).await?;
|
||||||
} else {
|
} else {
|
||||||
//println!("{:?}", res.message);
|
//log::info!("{:?}", res.message);
|
||||||
let key = SSK::parse("KSK@msg23.txt").unwrap();
|
let key = SSK::parse("KSK@msg23.txt").unwrap();
|
||||||
let cp = ClientPut::new_default(key, "msg23.txt", "hello", &res.message[..]).convert();
|
let cp = ClientPut::new_default(key, "msg23.txt", "hello", &res.message[..]).convert();
|
||||||
let _ = sender.write(cp.as_bytes()).await;
|
let _ = sender.write(cp.as_bytes()).await;
|
||||||
|
|
|
@ -25,7 +25,7 @@ pub async fn request_repeater(ss: SP) -> io::Result<()> {
|
||||||
// ),
|
// ),
|
||||||
}) {
|
}) {
|
||||||
Ok(_) => {}
|
Ok(_) => {}
|
||||||
Err(e) => println!("{:?}", e),
|
Err(e) => log::error!("{:?}", e),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
mod chat;
|
mod chat;
|
||||||
pub mod db;
|
pub mod db;
|
||||||
|
pub mod api;
|
||||||
pub mod encrypting;
|
pub mod encrypting;
|
||||||
|
|
||||||
pub mod fcpv2;
|
pub mod fcpv2;
|
||||||
pub use chat::front_conn;
|
pub use chat::front_conn;
|
||||||
|
|
49
src/main.rs
49
src/main.rs
|
@ -1,6 +1,7 @@
|
||||||
mod chat;
|
mod chat;
|
||||||
mod db;
|
mod db;
|
||||||
mod encrypting;
|
mod encrypting;
|
||||||
|
mod api;
|
||||||
use async_std::io;
|
use async_std::io;
|
||||||
use chat::front_conn::listen_client;
|
use chat::front_conn::listen_client;
|
||||||
use chat::serv_conn::listen_server;
|
use chat::serv_conn::listen_server;
|
||||||
|
@ -47,50 +48,8 @@ use std::{
|
||||||
|
|
||||||
fn main() -> io::Result<()> {
|
fn main() -> io::Result<()> {
|
||||||
SimpleLogger::new().init().unwrap();
|
SimpleLogger::new().init().unwrap();
|
||||||
let conn = db::start_db().unwrap();
|
|
||||||
/*
|
|
||||||
users::add_user(db::types::User{
|
|
||||||
id: 9349,
|
|
||||||
name: "Nick".to_string(),
|
|
||||||
sign_key: "string".to_string(),
|
|
||||||
insert_key: fcpv2::types::SSK::parse("SSK@Rgt0qM8D24DltliV2-JE9tYLcrgGAKeDwkz41I3JBPs,p~c8c7FXcJjhcf2vA-Xm0Mjyw1o~xn7L2-T8zlBA1IU").unwrap(),
|
|
||||||
messages_count: 1,
|
|
||||||
}, &conn);
|
|
||||||
let time: chrono::DateTime<chrono::offset::FixedOffset> =
|
|
||||||
chrono::DateTime::parse_from_rfc3339("2021-03-18T04:22:42.501Z").unwrap();
|
|
||||||
db::messages::add_message(
|
|
||||||
db::types::Message {
|
|
||||||
user_id: 9349,
|
|
||||||
id: 4,
|
|
||||||
date: time.naive_utc(),
|
|
||||||
message: "HI?".to_string(),
|
|
||||||
},
|
|
||||||
&conn,
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
db::messages::add_message(
|
|
||||||
db::types::Message {
|
|
||||||
user_id: 9349,
|
|
||||||
id: 5,
|
|
||||||
date: time.naive_utc(),
|
|
||||||
message: "I AM NICK!".to_string(),
|
|
||||||
},
|
|
||||||
&conn,
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
db::messages::add_message(
|
|
||||||
db::types::Message {
|
|
||||||
user_id: 9349,
|
|
||||||
id: 6,
|
|
||||||
date: time.naive_utc(),
|
|
||||||
message: "I'LL FIND that".to_string(),
|
|
||||||
},
|
|
||||||
&conn,
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let messages = db::messages::select_message_by_id(9349, 3, &conn).unwrap();
|
let db = db::start_db();
|
||||||
*/
|
|
||||||
|
|
||||||
let (to_server_sender, server_receiver): (Sender<PackedMessage>, Receiver<PackedMessage>) =
|
let (to_server_sender, server_receiver): (Sender<PackedMessage>, Receiver<PackedMessage>) =
|
||||||
mpsc::channel();
|
mpsc::channel();
|
||||||
|
@ -115,7 +74,7 @@ fn main() -> io::Result<()> {
|
||||||
|
|
||||||
t.join().expect("failed client thread").unwrap();
|
t.join().expect("failed client thread").unwrap();
|
||||||
});
|
});
|
||||||
server_thread.join().unwrap();
|
server_thread.join().expect("failed to unrap server thread");
|
||||||
client_thread.join().unwrap();
|
client_thread.join().expect("failed to unrap client thread");
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue