core/src/.fcpv2/types.rs

132 lines
3.6 KiB
Rust
Raw Permalink Normal View History

2021-01-05 17:40:00 +00:00
use async_trait::async_trait;
2021-01-05 13:58:18 +00:00
use std::error::Error;
2021-01-05 17:54:22 +00:00
use std::net::{IpAddr, SocketAddr};
use tokio::io::{self, AsyncBufRead, AsyncReadExt, AsyncWriteExt};
use tokio::net::TcpListener;
use tokio::net::TcpStream;
2021-01-06 04:18:46 +00:00
#[derive(Debug)]
2021-01-05 13:58:18 +00:00
struct Fcp {
connected: bool,
stream: TcpStream,
addr: SocketAddr,
2021-01-05 17:40:00 +00:00
name: String,
2021-01-05 13:58:18 +00:00
}
2021-01-05 17:40:00 +00:00
struct NodeHello {
responce: String,
}
2021-01-05 17:54:22 +00:00
#[async_trait]
2021-01-05 13:58:18 +00:00
trait FcpConnection {
2021-01-05 17:54:22 +00:00
async fn new(addr: &'static str, port: u16, name: String) -> Result<Box<Self>, Box<dyn Error>>;
2021-01-05 17:40:00 +00:00
}
2021-01-05 17:54:22 +00:00
#[async_trait]
2021-01-05 17:40:00 +00:00
impl FcpConnection for Fcp {
2021-01-06 04:18:46 +00:00
async fn new(addr: &'static str, port: u16, name: String) -> Result<Box<Fcp>, Box<dyn Error>> {
2021-01-05 17:40:00 +00:00
let socket = SocketAddr::new(IpAddr::V4(addr.parse().unwrap()), port);
2021-01-06 04:18:46 +00:00
let stream = TcpStream::connect(&socket).await?;
Ok(Box::new(Fcp {
connected: true,
stream: stream,
addr: socket,
name: name,
}))
2021-01-05 17:40:00 +00:00
}
}
#[async_trait]
trait FCP {
2021-01-05 17:54:22 +00:00
async fn client_hello(&mut self) -> io::Result<NodeHello>;
2021-01-05 17:40:00 +00:00
}
#[async_trait]
impl FCP for Fcp {
2021-01-05 17:54:22 +00:00
async fn client_hello(&mut self) -> io::Result<NodeHello> {
let _ = self
.stream
.write_all(("ClientHello\nName=ggg\nExpectedVersion=2.0\nEndMessage\n\n").as_bytes());
2021-01-05 17:40:00 +00:00
let mut buffer = String::new();
2021-01-05 17:54:22 +00:00
match self.stream.read_to_string(&mut buffer).await {
Ok(text) => Ok(NodeHello {
responce: text.to_string(),
}),
Err(e) => Err(e),
}
2021-01-05 17:40:00 +00:00
}
2021-01-05 13:58:18 +00:00
}
2021-01-06 04:18:46 +00:00
pub async fn test() -> io::Result<()> {
println!("WTFAAA");
/*
let fcp = Fcp::new("localhost", 9481, "lol".to_string())
.await
.unwrap();
println!("{:?}", fcp);
*/
let stream = TcpStream::connect("127.0.0.1:9481").await?;
println!("WTF");
Ok(())
}
2021-01-05 13:58:18 +00:00
2021-01-05 17:40:00 +00:00
/*
2021-01-05 13:58:18 +00:00
// TODO add error if freenet not connected
2021-01-05 17:40:00 +00:00
impl FcpConnection for Fcp {
fn new(addr: &'static str, port: u16, name: &'static str) -> Result<&'static Self> {
2021-01-05 13:58:18 +00:00
let socket = SocketAddr::new(IpAddr::V4(addr.parse().unwrap()), port);
match TcpStream::connect(&socket) {
2021-01-05 17:40:00 +00:00
Ok(&mut stream) => {
let _ = stream.write(
(format!(
"ClientHello\nName={}\nExpectedVersion=2.0\nEndMessage\n\n",
name
),)
.as_bytes(),
)?;
/*
* -- Getting Responce -- *
2021-01-05 13:58:18 +00:00
let mut buffer = [0; 1024];
stream.read(&mut buffer).await?;
let responce = String::from_utf8_lossy(&buffer[..]);
println!("response");
2021-01-05 17:40:00 +00:00
*/
Ok(Fcp {
connected: true,
stream: stream,
addr: socket,
name: name,
})
2021-01-05 13:58:18 +00:00
}
2021-01-05 17:40:00 +00:00
Err(e) => {
2021-01-05 13:58:18 +00:00
println!("error: {}", e);
2021-01-05 17:40:00 +00:00
Error::new(io::ErrorKind::Other, e)
2021-01-05 13:58:18 +00:00
}
}
}
}
2021-01-05 17:40:00 +00:00
*/
2021-01-05 13:58:18 +00:00
/*
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
// Connect to a peer
let mut stream = TcpStream::connect("127.0.0.1:9481").await?;
let _ = stream
.write(("ClientHello\nName=ggg\nExpectedVersion=2.0\nEndMessage\n\n").as_bytes())
.await?;
println!("Reading response...");
let mut buffer = [0; 1024];
stream.read(&mut buffer).await?;
let received = String::from_utf8_lossy(&buffer[..]);
print!("<<< {}", received);
let _ = stream.write(
("ClientHello\n
Name=ggg\n
ExpectedVersion=2.0\n
EndMessage\n\n")
.as_bytes(),
);
}
*/