feat: add logging support
This commit is contained in:
@@ -1,55 +1,8 @@
|
||||
use crate::message::{Message, MessageHandler};
|
||||
use crate::peer::PeerOperation;
|
||||
use crate::types::{File, FileSearchResult};
|
||||
use crate::utils::zlib::deflate;
|
||||
use std::collections::HashMap;
|
||||
use crate::types::FileSearchResult;
|
||||
use std::sync::mpsc::Sender;
|
||||
|
||||
fn decompress_buffer(buffer: &[u8]) -> Result<Vec<u8>, String> {
|
||||
deflate(buffer)
|
||||
}
|
||||
impl FileSearchResult {
|
||||
pub fn new_from_message(message: &mut Message) -> Self {
|
||||
let pointer = message.get_pointer();
|
||||
let size = message.get_size();
|
||||
let data: Vec<u8> = message.get_slice(pointer, size);
|
||||
let deflated = decompress_buffer(&data).unwrap();
|
||||
let mut message = Message::new_with_data(deflated);
|
||||
|
||||
let username = message.read_string();
|
||||
let token = message.read_raw_hex_str(4);
|
||||
let n_files = message.read_int32();
|
||||
let mut files: Vec<File> = Vec::new();
|
||||
for _ in 0..n_files {
|
||||
message.read_int8();
|
||||
let name = message.read_string();
|
||||
let size = message.read_int32();
|
||||
message.read_int32();
|
||||
message.read_string();
|
||||
let n_attribs = message.read_int32();
|
||||
let mut attribs: HashMap<i32, i32> = HashMap::new();
|
||||
|
||||
for _ in 0..n_attribs {
|
||||
attribs.insert(message.read_int32(), message.read_int32());
|
||||
}
|
||||
files.push(File {
|
||||
username: username.clone(),
|
||||
name,
|
||||
size,
|
||||
attribs,
|
||||
});
|
||||
}
|
||||
let slots = message.read_int8();
|
||||
let speed = message.read_int32();
|
||||
|
||||
Self {
|
||||
token,
|
||||
files,
|
||||
slots,
|
||||
speed,
|
||||
}
|
||||
}
|
||||
}
|
||||
pub struct FileSearchResponse;
|
||||
impl MessageHandler<PeerOperation> for FileSearchResponse {
|
||||
fn get_code(&self) -> u8 {
|
||||
@@ -85,7 +38,7 @@ fn test_new_from_message() {
|
||||
message.set_pointer(8);
|
||||
|
||||
let file_search = FileSearchResult::new_from_message(&mut message);
|
||||
assert_eq!(file_search.token, "6d2b9434");
|
||||
assert_eq!(file_search.token, 23);
|
||||
assert_eq!(file_search.files.len(), 2);
|
||||
let file = &file_search.files[0];
|
||||
assert_eq!(
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
use crate::{
|
||||
message::{server::MessageFactory, Message, MessageHandler},
|
||||
peer::PeerOperation,
|
||||
};
|
||||
use std::sync::mpsc::Sender;
|
||||
|
||||
pub struct GetShareFileList;
|
||||
impl MessageHandler<PeerOperation> for GetShareFileList {
|
||||
fn get_code(&self) -> u8 {
|
||||
4
|
||||
}
|
||||
fn handle(&self, _message: &mut Message, sender: Sender<PeerOperation>) {
|
||||
let message = MessageFactory::build_shared_folders_message(100, 800);
|
||||
|
||||
sender.send(PeerOperation::SendMessage(message)).unwrap();
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,6 @@
|
||||
pub mod file_search_response;
|
||||
pub mod get_share_file_list;
|
||||
pub mod transfer_request;
|
||||
pub mod upload_failed;
|
||||
|
||||
pub use self::file_search_response::*;
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
use crate::{
|
||||
message::{Message, MessageHandler},
|
||||
peer::PeerOperation,
|
||||
types::Transfer,
|
||||
};
|
||||
use std::sync::mpsc::Sender;
|
||||
|
||||
pub struct TransferRequest;
|
||||
impl MessageHandler<PeerOperation> for TransferRequest {
|
||||
fn get_code(&self) -> u8 {
|
||||
40
|
||||
}
|
||||
fn handle(&self, message: &mut Message, sender: Sender<PeerOperation>) {
|
||||
let transfer = Transfer::new_from_message(message);
|
||||
|
||||
sender
|
||||
.send(PeerOperation::TransferRequest(transfer))
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
use crate::{
|
||||
message::{Message, MessageHandler},
|
||||
peer::PeerOperation,
|
||||
types::UploadFailed,
|
||||
};
|
||||
use std::sync::mpsc::Sender;
|
||||
|
||||
pub struct UploadFailedHandler;
|
||||
impl MessageHandler<PeerOperation> for UploadFailedHandler {
|
||||
fn get_code(&self) -> u8 {
|
||||
46
|
||||
}
|
||||
fn handle(&self, message: &mut Message, sender: Sender<PeerOperation>) {
|
||||
let upload_failed = UploadFailed::new_from_message(message);
|
||||
info!("Upload failed for ${}", upload_failed.filename);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user