From 5bd76268438e5352f55e56fb8d120572f39b5660 Mon Sep 17 00:00:00 2001 From: Jonas Zeunert Date: Mon, 30 Dec 2024 15:41:58 +0100 Subject: [PATCH] First naive implementation of tcp server. Not working right now --- flutr.rs | 23 +++++++++++++++++++++++ src/flutr.rs | 26 ++++++++++++++++++++++++++ src/main.rs | 29 +++++++++++++++++++++-------- src/pixelmsgs.rs | 18 ++++++++++++++++++ 4 files changed, 88 insertions(+), 8 deletions(-) create mode 100644 flutr.rs create mode 100644 src/flutr.rs create mode 100644 src/pixelmsgs.rs diff --git a/flutr.rs b/flutr.rs new file mode 100644 index 0000000..0242d91 --- /dev/null +++ b/flutr.rs @@ -0,0 +1,23 @@ +pub struct FlutR { + stream: TcpStream, + msgs: PixelMsgs, +} + +impl FlutR { + fn new(host: Host, port: u16, msgs: PixelMsgs) -> Result { + let stream = TcpStream::connect(format!("{host}:{port}"))?; + Ok(FlutR { stream, msgs }) + } + + fn flut(&mut self) { + for msg in self.msgs.clone() { + dbg!(&msg); + let result = self.stream.write(msg.as_str().as_bytes()); + match result { + Ok(_) => (), + Err(err) => eprintln!("{err}"), + } + let _ = self.stream.flush(); + } + } +} diff --git a/src/flutr.rs b/src/flutr.rs new file mode 100644 index 0000000..b4c9cd7 --- /dev/null +++ b/src/flutr.rs @@ -0,0 +1,26 @@ +use crate::pixelmsgs::PixelMsgs; +use std::{io::Write, net::TcpStream}; + +pub struct FlutR { + stream: TcpStream, + msgs: PixelMsgs, +} + +impl FlutR { + pub fn new(host: Host, port: u16, msgs: PixelMsgs) -> Result { + let stream = TcpStream::connect(format!("{host}:{port}"))?; + Ok(FlutR { stream, msgs }) + } + + pub fn flut(&mut self) { + for msg in self.msgs.clone() { + dbg!(&msg); + let result = self.stream.write(msg.as_str().as_bytes()); + match result { + Ok(_) => (), + Err(err) => eprintln!("{err}"), + } + let _ = self.stream.flush(); + } + } +} diff --git a/src/main.rs b/src/main.rs index 77628df..5be82d9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,17 +1,22 @@ use address::Host; use std::path::PathBuf; -use image::{ImageReader, Rgb}; +use image::ImageReader; use clap::Parser; -type Pixel<'a> = (u32, u32, &'a Rgb); +mod flutr; +mod pixelmsgs; + +use flutr::FlutR; +use pixelmsgs::Add; +use pixelmsgs::PixelMsgs; #[derive(Parser, Debug)] #[command(version, about, long_about = None)] struct Args { image_path: PathBuf, - addr: Host, + host: Host, #[arg(short, long, default_value_t = 1234)] port: u16, @@ -20,7 +25,16 @@ struct Args { fn main() { let args = Args::parse(); - let image_result = parse_image(&args.image_path); + let pixel_msgs = parse_image_to_msgs(&args.image_path); + + let mut flutr = FlutR::new(args.host, args.port, pixel_msgs).unwrap(); + flutr.flut(); +} + +fn parse_image_to_msgs(path: &PathBuf) -> PixelMsgs { + let mut result = PixelMsgs::default(); + + let image_result = parse_image(path); let image = match image_result { Ok(img) => img, @@ -29,12 +43,11 @@ fn main() { let rgb_image = image.into_rgb8(); for pixel in rgb_image.enumerate_pixels() { - write_pixel(pixel); + result.add(pixel); } - //println!("{:?}", &image); -} -fn write_pixel(pixel: Pixel) {} + result +} fn parse_image(path: &PathBuf) -> Result { ImageReader::open(path)?.with_guessed_format()?.decode() diff --git a/src/pixelmsgs.rs b/src/pixelmsgs.rs new file mode 100644 index 0000000..9013928 --- /dev/null +++ b/src/pixelmsgs.rs @@ -0,0 +1,18 @@ +use image::Rgb; + +pub type PixelMsgs = Vec; + +pub trait Add { + fn add(&mut self, item: (u32, u32, &Rgb)); +} + +impl Add for PixelMsgs { + fn add(&mut self, item: (u32, u32, &Rgb)) { + let color: &Rgb = item.2; + let r = color.0[0]; + let g = color.0[1]; + let b = color.0[2]; + let msg = format!("PX {} {} {r:02x}{g:02x}{b:02x}", item.0, item.1); + self.push(msg); + } +}