finish request_handler function
This commit is contained in:
parent
9ef832a332
commit
f46404eb7e
|
@ -1,6 +1,5 @@
|
||||||
use super::response::User;
|
use super::response::User;
|
||||||
use super::response::UserList;
|
use super::response::UserList;
|
||||||
use std::time::{SystemTime};
|
|
||||||
use super::{
|
use super::{
|
||||||
request::*,
|
request::*,
|
||||||
response::{AppStatus, ResponseType},
|
response::{AppStatus, ResponseType},
|
||||||
|
@ -9,27 +8,29 @@ use crate::chat::types::PackedMessage;
|
||||||
use crate::chat::types::SP;
|
use crate::chat::types::SP;
|
||||||
use crate::db::{self, messages, types, users};
|
use crate::db::{self, messages, types, users};
|
||||||
use async_std::io::Result;
|
use async_std::io::Result;
|
||||||
use fcpv2::client::fcp_types::ClientPut;
|
use fcpv2::client::fcp_types::{ClientPut, ClientHello};
|
||||||
use fcpv2::types::{
|
use fcpv2::types::{
|
||||||
traits::{FcpParser, FcpRequest},
|
traits::{FcpParser, FcpRequest},
|
||||||
SSK,
|
SSK,
|
||||||
};
|
};
|
||||||
use rusqlite::Connection;
|
use rusqlite::Connection;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
|
use std::time::SystemTime;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::db::types::Id;
|
use crate::db::types::Id;
|
||||||
|
|
||||||
pub fn start_app(request: StartAppReq, server_sender: &SP) -> Result<()> {
|
pub fn start_app(request: StartAppReq, server_sender: SP) -> Result<()> {
|
||||||
|
server_sender.send(PackedMessage::ToFreenet(ClientHello::new("start_app_request".to_string(), 2.0).convert())).unwrap();
|
||||||
Ok(())
|
Ok(())
|
||||||
//sending *JSON*, what everything is OK
|
//sending *JSON*, what everything is OK
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn stop_app(request: StopAppReq, conn: &Connection, server_sender: &SP) -> Result<()> {
|
pub fn stop_app(request: StopAppReq, conn: &Connection, server_sender: SP) -> Result<()> {
|
||||||
std::process::exit(0)
|
std::process::exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn load_users(request: LoadUsersReq, conn: &Connection, server_sender: &SP) -> Result<()> {
|
pub fn load_users(request: LoadUsersReq, conn: &Connection, server_sender: SP) -> Result<()> {
|
||||||
let jsoned_users: Vec<_> = users::load_all_users(conn)
|
let jsoned_users: Vec<_> = users::load_all_users(conn)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
@ -42,13 +43,13 @@ pub fn load_users(request: LoadUsersReq, conn: &Connection, server_sender: &SP)
|
||||||
let _ = server_sender.send(PackedMessage::ToClient(users)).unwrap();
|
let _ = server_sender.send(PackedMessage::ToClient(users)).unwrap();
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
pub fn send_message(request: SendMessageReq, conn: &Connection, server_sender: &SP) -> Result<()> {
|
pub fn send_message(request: SendMessageReq, conn: &Connection, server_sender: SP) -> Result<()> {
|
||||||
if let Ok(user_data) = db::users::get_user_by_id(request.user_id, conn) {
|
if let Ok(user_data) = db::users::get_user_by_id(request.user_id, conn) {
|
||||||
// Add message to DB
|
// Add message to DB
|
||||||
let key = user_data.insert_key;
|
let key = user_data.insert_key;
|
||||||
let identifier = &user_data.id.0.to_string()[..];
|
let identifier = &user_data.id.0.to_string()[..];
|
||||||
let message_id :u32 = user_data.messages_count;
|
let message_id: u32 = user_data.messages_count;
|
||||||
let db_message = db::types::Message{
|
let db_message = db::types::Message {
|
||||||
id: message_id,
|
id: message_id,
|
||||||
date: chrono::offset::Local::now(),
|
date: chrono::offset::Local::now(),
|
||||||
user_id: Id(uuid::Uuid::parse_str(identifier).unwrap()),
|
user_id: Id(uuid::Uuid::parse_str(identifier).unwrap()),
|
||||||
|
@ -77,11 +78,7 @@ pub fn send_message(request: SendMessageReq, conn: &Connection, server_sender: &
|
||||||
//sending FCP request
|
//sending FCP request
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn load_messages(
|
pub fn load_messages(request: LoadMessagesReq, conn: &Connection, server_sender: SP) -> Result<()> {
|
||||||
request: LoadMessagesReq,
|
|
||||||
conn: &Connection,
|
|
||||||
server_sender: &SP,
|
|
||||||
) -> Result<()> {
|
|
||||||
let messages = db::messages::select_n_last_messages(
|
let messages = db::messages::select_n_last_messages(
|
||||||
request.user_id,
|
request.user_id,
|
||||||
request.start_index,
|
request.start_index,
|
||||||
|
@ -96,7 +93,7 @@ pub fn load_messages(
|
||||||
//sending *JSON*
|
//sending *JSON*
|
||||||
}
|
}
|
||||||
// Adding user to DB
|
// Adding user to DB
|
||||||
pub fn add_user(request: AddUserReq, conn: &Connection, server_sender: &SP) -> Result<()> {
|
pub fn add_user(request: AddUserReq, conn: &Connection, server_sender: SP) -> Result<()> {
|
||||||
let user = db::types::User {
|
let user = db::types::User {
|
||||||
id: db::types::Id(Uuid::new_v4()),
|
id: db::types::Id(Uuid::new_v4()),
|
||||||
name: request.name,
|
name: request.name,
|
||||||
|
|
|
@ -6,48 +6,60 @@ use serde_json::Result;
|
||||||
type Id = crate::db::types::Id;
|
type Id = crate::db::types::Id;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct CreateInstance;
|
pub struct CreateInstance;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct SendMessage;
|
pub struct SendMessage;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct LoadUsers;
|
pub struct LoadUsers;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct LoadMessages;
|
pub struct LoadMessages;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct AddUser;
|
pub struct AddUser;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct StartApp;
|
pub struct StartApp;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct StopApp;
|
pub struct StopApp;
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct CreateInstanceReq {
|
pub struct CreateInstanceReq {
|
||||||
pub req_type: CreateInstance,
|
pub req_type: CreateInstance,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Debug, PartialEq)]
|
#[derive(Deserialize, Serialize, Debug, PartialEq)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct StartAppReq {
|
pub struct StartAppReq {
|
||||||
pub req_type: StartApp,
|
pub req_type: StartApp,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Debug, PartialEq)]
|
#[derive(Deserialize,Serialize, Debug, PartialEq)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct StopAppReq {
|
pub struct StopAppReq {
|
||||||
pub(crate) req_type: StopApp,
|
pub(crate) req_type: StopApp,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct LoadUsersReq {
|
pub struct LoadUsersReq {
|
||||||
pub req_type: LoadUsers,
|
pub req_type: LoadUsers,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct SendMessageReq {
|
pub struct SendMessageReq {
|
||||||
pub req_type: SendMessage,
|
pub req_type: SendMessage,
|
||||||
pub user_id: Id,
|
pub user_id: Id,
|
||||||
|
@ -55,6 +67,7 @@ pub struct SendMessageReq {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct LoadMessagesReq {
|
pub struct LoadMessagesReq {
|
||||||
pub req_type: LoadMessages,
|
pub req_type: LoadMessages,
|
||||||
pub user_id: Id,
|
pub user_id: Id,
|
||||||
|
@ -63,9 +76,28 @@ pub struct LoadMessagesReq {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct AddUserReq {
|
pub struct AddUserReq {
|
||||||
pub req_type: AddUser,
|
pub req_type: AddUser,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub sign_key: String,
|
pub sign_key: String,
|
||||||
pub insert_key: String,
|
pub insert_key: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn request_StoppApp_are_correct() {
|
||||||
|
let json: &str = "{'reqType':'StopApp'}";
|
||||||
|
//log::info!("{} and {}", json, tjsn);
|
||||||
|
//assert_eq!(jsoned, StopAppReq{req_type: StopApp});
|
||||||
|
//assert_eq!(json,tjsn);
|
||||||
|
}
|
||||||
|
#[test]
|
||||||
|
fn request_StartApp_are_correct() {}
|
||||||
|
#[test]
|
||||||
|
fn request_LoadUsers_are_correct() {}
|
||||||
|
#[test]
|
||||||
|
fn request_SendMessage_are_correct() {}
|
||||||
|
#[test]
|
||||||
|
fn request_LoadMessages_are_correct() {}
|
||||||
|
#[test]
|
||||||
|
fn request_AddUser_are_correct() {}
|
||||||
|
|
|
@ -11,32 +11,29 @@ use rusqlite::Connection;
|
||||||
use serde_json::from_str;
|
use serde_json::from_str;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
// server_sender sending data to server thread;
|
// server_sender sending data to server thread;
|
||||||
pub async fn request_selector(json: String, server_sender: &SP, conn: &Connection) -> Result<()> {
|
pub fn request_selector(json: String, server_sender: SP, conn: &Connection) -> Result<()> {
|
||||||
// if let Ok(res) = from_str::<CreateInstanceReq>(&json) {
|
// if let Ok(res) = from_str::<CreateInstanceReq>(&json) {
|
||||||
//TODO v0.3 Add Instances return Ok(());
|
//TODO v0.3 Add Instances return Ok(());
|
||||||
// }
|
// }
|
||||||
|
log::info!("matching request...");
|
||||||
|
|
||||||
if let Ok(res) = from_str::<StartAppReq>(&json) {
|
if let Ok(res) = from_str::<StartAppReq>(&json) {
|
||||||
handlers::start_app(res, server_sender)?
|
handlers::start_app(res, server_sender.clone())?
|
||||||
}
|
} else if let Ok(res) = from_str::<StopAppReq>(&json) {
|
||||||
if let Ok(res) = from_str::<StopAppReq>(&json) {
|
handlers::stop_app(res, conn, server_sender.clone())?
|
||||||
handlers::stop_app(res, conn, server_sender)?
|
} else if let Ok(res) = from_str::<LoadUsersReq>(&json) {
|
||||||
}
|
handlers::load_users(res, conn, server_sender.clone())?
|
||||||
if let Ok(res) = from_str::<LoadUsersReq>(&json) {
|
} else if let Ok(res) = from_str::<SendMessageReq>(&json) {
|
||||||
handlers::load_users(res, conn, server_sender)?
|
handlers::send_message(res, conn, server_sender.clone())?
|
||||||
}
|
} else if let Ok(res) = from_str::<LoadMessagesReq>(&json) {
|
||||||
if let Ok(res) = from_str::<SendMessageReq>(&json) {
|
handlers::load_messages(res, conn, server_sender.clone())?
|
||||||
handlers::send_message(res, conn, server_sender)?
|
} else if let Ok(res) = from_str::<AddUserReq>(&json) {
|
||||||
}
|
match handlers::add_user(res, conn, server_sender.clone()) {
|
||||||
if let Ok(res) = from_str::<LoadMessagesReq>(&json) {
|
Ok(_) => return Ok(()),
|
||||||
handlers::load_messages(res, conn, server_sender)?
|
|
||||||
}
|
|
||||||
if let Ok(res) = from_str::<AddUserReq>(&json) {
|
|
||||||
match handlers::add_user(res, conn, server_sender) {
|
|
||||||
Ok(_) => {},
|
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
// Sending error to user, because failed to add user
|
// Sending error to user, because failed to add user
|
||||||
let _ = server_sender
|
let _ = server_sender
|
||||||
|
.clone()
|
||||||
.send(PackedMessage::ToClient(
|
.send(PackedMessage::ToClient(
|
||||||
json!(AppError {
|
json!(AppError {
|
||||||
res_type: ErrorType::FailedToAddUser
|
res_type: ErrorType::FailedToAddUser
|
||||||
|
@ -44,11 +41,15 @@ pub async fn request_selector(json: String, server_sender: &SP, conn: &Connectio
|
||||||
.to_string(),
|
.to_string(),
|
||||||
))
|
))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
return Ok(());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
log::error!("{}\n is wrong formatted", json)
|
||||||
}
|
}
|
||||||
|
|
||||||
Err(async_std::io::Error::new(
|
Err(async_std::io::Error::new(
|
||||||
async_std::io::ErrorKind::InvalidData,
|
async_std::io::ErrorKind::InvalidData,
|
||||||
"Wrong request",
|
serde_json::to_string(&StartAppReq{req_type: StartApp}).unwrap(),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,13 +91,14 @@ async fn connection_for_receiving(
|
||||||
.await
|
.await
|
||||||
.expect("Couldn't send message");
|
.expect("Couldn't send message");
|
||||||
}
|
}
|
||||||
PackedMessage::FromFreenet(response) => {sender
|
PackedMessage::FromFreenet(response) => {
|
||||||
|
sender
|
||||||
// TODO freenet_response_handler
|
// TODO freenet_response_handler
|
||||||
.send(Message::Text(response))
|
.send(Message::Text(response))
|
||||||
.await
|
.await
|
||||||
.expect("Couldn't send messge");
|
.expect("Couldn't send messge");
|
||||||
}
|
}
|
||||||
_ => {},
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -113,7 +114,14 @@ async fn connection_for_sending(
|
||||||
loop {
|
loop {
|
||||||
if let Some(msg) = new_msg.await {
|
if let Some(msg) = new_msg.await {
|
||||||
let jsoned = msg.expect("Falied to unwrap gotted message");
|
let jsoned = msg.expect("Falied to unwrap gotted message");
|
||||||
request_selector(jsoned.to_string(), &server_sender, &conn);
|
log::info!("new request");
|
||||||
|
match request_selector(jsoned.to_string(), server_sender.clone(), &conn) {
|
||||||
|
Ok(_) => {}
|
||||||
|
Err(e) => {
|
||||||
|
log::error!("{}", e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
let res: serde_json::Result<FrontMsg> =
|
let res: serde_json::Result<FrontMsg> =
|
||||||
serde_json::from_str(jsoned.to_text().expect("Falied to parse JSON"));
|
serde_json::from_str(jsoned.to_text().expect("Falied to parse JSON"));
|
||||||
|
@ -139,7 +147,10 @@ async fn connection_for_sending(
|
||||||
new_msg = receiver.next();
|
new_msg = receiver.next();
|
||||||
} else {
|
} else {
|
||||||
{
|
{
|
||||||
break;
|
return Err(async_std::io::Error::new(
|
||||||
|
async_std::io::ErrorKind::InvalidData,
|
||||||
|
"failed to unwrap message",
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,7 @@ use std::sync::mpsc::{Receiver, Sender};
|
||||||
// }
|
// }
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
|
||||||
pub enum PackedMessage {
|
pub enum PackedMessage {
|
||||||
ToFreenet(String),
|
ToFreenet(String),
|
||||||
FromFreenet(String),
|
FromFreenet(String),
|
||||||
|
|
Loading…
Reference in a new issue