First barebones for problem 5

This commit is contained in:
Bastian Gruber 2023-05-02 14:23:47 +02:00
parent 1b4d5f0eef
commit aeebaff9f7
No known key found for this signature in database
GPG key ID: BE9F8C772B188CBF
3 changed files with 86 additions and 0 deletions

12
problem_05/.gitignore vendored Normal file
View file

@ -0,0 +1,12 @@
# Generated by Cargo
# will have compiled files and executables
/target/
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock
# These are backup files generated by rustfmt
**/*.rs.bk
.idea

13
problem_05/Cargo.toml Normal file
View file

@ -0,0 +1,13 @@
[package]
name = "problem_05"
version = "0.1.0"
edition = "2021"
[[bin]]
name = "server"
path = "bin/server.rs"
[dependencies]
tokio = { version = "1.14.0", features = ["full"] }
tracing = "0.1.37"
tracing-subscriber = "0.3.17"

61
problem_05/bin/server.rs Normal file
View file

@ -0,0 +1,61 @@
use tokio::net::{TcpListener, TcpStream};
use tracing::{info, error};
use std::net::SocketAddr;
use tokio_util::codec::{Framed, LinesCodec};
use tokio::sync::broadcast;
const DEFAULT_IP: &str = "0.0.0.0";
const DEFAULT_PORT: &str = "1222";
const UPSTREAM_IP: &str = "206.189.113.124";
const UPSTREAM_PORT: &str = "16963";
type Error = Box<dyn std::error::Error + Send + Sync>;
type Result<T> = std::result::Result<T, Error>;
enum Events {
ClientRequest(String),
ClientResponse(String),
UpstreamRequest(String),
UpstreamResponse(String),
}
#[tokio::main]
pub async fn main() -> Result<()> {
tracing_subscriber::fmt::try_init()?;
let listener = TcpListener::bind(&format!("{DEFAULT_IP}:{DEFAULT_PORT}")).await?;
let stream = TcpStream::connect(&format!("{UPSTREAM_IP}:{UPSTREAM_PORT}")).await?;
let (sender, receiver) = broadcast::channel(2);
info!("Start TCP server on {DEFAULT_IP}:{DEFAULT_PORT}");
info!("Connect to upstream on {UPSTREAM_IP}:{UPSTREAM_PORT}");
let listener_handle = tokio::spawn(async move {
loop {
let (socket, address) = listener.accept().await?;
tokio::spawn(async move {
info!("New request from: {address}");
let _ = handle_request(socket).await;
});
}
});
let upstream_handle = tokio::spawn({
loop {
}
});
let _ = listener_handle.await;
let _ = upstream_handle.await;
Ok(())
}
pub async fn handle_request(mut socket: TcpStream) -> Result<()> {
let framed = Framed::new(socket, LinesCodec::new());
}