refactor: move some stuff about
This commit is contained in:
parent
350b0911ff
commit
43f4147b2a
1 changed files with 71 additions and 63 deletions
134
src/main.rs
134
src/main.rs
|
|
@ -102,6 +102,7 @@ const SET_PX_RGBA_BIN: u8 = 129;
|
||||||
const SET_PX_W_BIN: u8 = 130;
|
const SET_PX_W_BIN: u8 = 130;
|
||||||
|
|
||||||
const SET_PX_RGB_BIN_LENGTH: usize = 8;
|
const SET_PX_RGB_BIN_LENGTH: usize = 8;
|
||||||
|
const GRID_LENGTH: usize = 1;
|
||||||
|
|
||||||
fn set_pixel_rgba(grids: &mut [FlutGrid<u32>], canvas: u8, x: u16, y: u16, rgb: u32) {
|
fn set_pixel_rgba(grids: &mut [FlutGrid<u32>], canvas: u8, x: u16, y: u16, rgb: u32) {
|
||||||
match grids.get_mut(canvas as usize) {
|
match grids.get_mut(canvas as usize) {
|
||||||
|
|
@ -117,6 +118,75 @@ fn get_pixel(grids: &mut [FlutGrid<u32>], canvas: u8, x: u16, y: u16) -> Option<
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn process_lock<
|
||||||
|
R: AsyncReadExt + std::marker::Unpin,
|
||||||
|
W: AsyncWriteExt + std::marker::Unpin,
|
||||||
|
>(
|
||||||
|
reader: &mut R,
|
||||||
|
writer: &mut W,
|
||||||
|
grids: &mut [FlutGrid<u32>; GRID_LENGTH],
|
||||||
|
) -> io::Result<()> {
|
||||||
|
let amount = reader.read_u16_le().await?;
|
||||||
|
let command = reader.read_u8().await?;
|
||||||
|
let lockmask = reader.read_u16().await?;
|
||||||
|
let mut buf = vec![0; lockmask.count_ones() as usize];
|
||||||
|
let statics = reader.read_exact(&mut buf).await?;
|
||||||
|
|
||||||
|
match command {
|
||||||
|
GET_PX_BIN => todo!("GET pixel lock"),
|
||||||
|
SET_PX_RGB_BIN => {
|
||||||
|
let per = SET_PX_RGB_BIN_LENGTH - statics;
|
||||||
|
let mut j = 0;
|
||||||
|
let mut a;
|
||||||
|
let static_buf: Vec<Option<u8>> = (0..SET_PX_RGB_BIN_LENGTH)
|
||||||
|
.map(|i| match lockmask >> (15 - i) & 1 {
|
||||||
|
1 => {
|
||||||
|
let b = Some(buf[j]);
|
||||||
|
|
||||||
|
j += 1;
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
0 => None,
|
||||||
|
k => panic!("WTF, how is {} not 0 or 1", k),
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
let mut mod_buf: Vec<u8> = vec![0; per];
|
||||||
|
for _ in 0..amount {
|
||||||
|
a = 0;
|
||||||
|
let _ = reader.read_exact(&mut mod_buf).await?;
|
||||||
|
let aa = static_buf
|
||||||
|
.iter()
|
||||||
|
.map(|x| *match x {
|
||||||
|
Some(val) => val,
|
||||||
|
None => {
|
||||||
|
let b = mod_buf[a];
|
||||||
|
a += 1;
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.map(|z| z)
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
match grids.get_mut(aa[0] as usize) {
|
||||||
|
Some(grid) => grid.set(
|
||||||
|
u16::from_le_bytes([aa[1], aa[2]]),
|
||||||
|
u16::from_le_bytes([aa[3], aa[4]]),
|
||||||
|
u32::from_be_bytes([aa[5], aa[6], aa[7], 0]),
|
||||||
|
),
|
||||||
|
None => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SET_PX_RGBA_BIN => todo!("Set rgba lock"),
|
||||||
|
SET_PX_W_BIN => todo!("set w lock"),
|
||||||
|
_ => {
|
||||||
|
eprintln!("not a cmd");
|
||||||
|
return Err(Error::from(ErrorKind::InvalidInput));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
async fn process_msg<
|
async fn process_msg<
|
||||||
R: AsyncReadExt + std::marker::Unpin,
|
R: AsyncReadExt + std::marker::Unpin,
|
||||||
W: AsyncWriteExt + std::marker::Unpin,
|
W: AsyncWriteExt + std::marker::Unpin,
|
||||||
|
|
@ -133,67 +203,7 @@ async fn process_msg<
|
||||||
PX_TEXT => todo!("PX command handling"),
|
PX_TEXT => todo!("PX command handling"),
|
||||||
HELP_BIN => todo!("HELP command message"),
|
HELP_BIN => todo!("HELP command message"),
|
||||||
SIZE_BIN => todo!("SIZE command check and message"),
|
SIZE_BIN => todo!("SIZE command check and message"),
|
||||||
LOCK => {
|
LOCK => process_lock(reader, writer, grids).await,
|
||||||
let amount = reader.read_u16_le().await?;
|
|
||||||
let command = reader.read_u8().await?;
|
|
||||||
let lockmask = reader.read_u16().await?;
|
|
||||||
let mut buf = vec![0; lockmask.count_ones() as usize];
|
|
||||||
let statics = reader.read_exact(&mut buf).await?;
|
|
||||||
|
|
||||||
match command {
|
|
||||||
GET_PX_BIN => todo!("GET pixel lock"),
|
|
||||||
SET_PX_RGB_BIN => {
|
|
||||||
let per = SET_PX_RGB_BIN_LENGTH - statics;
|
|
||||||
let mut j = 0;
|
|
||||||
let mut a;
|
|
||||||
let static_buf: Vec<Option<u8>> = (0..SET_PX_RGB_BIN_LENGTH)
|
|
||||||
.map(|i| match lockmask >> (15 - i) & 1 {
|
|
||||||
1 => {
|
|
||||||
let b = Some(buf[j]);
|
|
||||||
|
|
||||||
j += 1;
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
0 => None,
|
|
||||||
_ => todo!("WTF"),
|
|
||||||
})
|
|
||||||
.collect();
|
|
||||||
let mut mod_buf: Vec<u8> = vec![0; per];
|
|
||||||
for _ in 0..amount {
|
|
||||||
a = 0;
|
|
||||||
let _ = reader.read_exact(&mut mod_buf).await?;
|
|
||||||
let aa = static_buf
|
|
||||||
.iter()
|
|
||||||
.map(|x| *match x {
|
|
||||||
Some(val) => val,
|
|
||||||
None => {
|
|
||||||
let b = mod_buf[a];
|
|
||||||
a += 1;
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.map(|z| z)
|
|
||||||
.collect::<Vec<_>>();
|
|
||||||
match grids.get_mut(aa[0] as usize) {
|
|
||||||
Some(grid) => grid.set(
|
|
||||||
u16::from_le_bytes([aa[1], aa[2]]),
|
|
||||||
u16::from_le_bytes([aa[3], aa[4]]),
|
|
||||||
u32::from_be_bytes([aa[5], aa[6], aa[7], 0]),
|
|
||||||
),
|
|
||||||
None => (),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SET_PX_RGBA_BIN => todo!("Set rgba lock"),
|
|
||||||
SET_PX_W_BIN => todo!("set w lock"),
|
|
||||||
_ => {
|
|
||||||
eprintln!("not a cmd");
|
|
||||||
return Err(Error::from(ErrorKind::InvalidInput));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Ok(());
|
|
||||||
}
|
|
||||||
GET_PX_BIN => {
|
GET_PX_BIN => {
|
||||||
let canvas = reader.read_u8().await?;
|
let canvas = reader.read_u8().await?;
|
||||||
let x = reader.read_u16_le().await?;
|
let x = reader.read_u16_le().await?;
|
||||||
|
|
@ -267,8 +277,6 @@ async fn root() -> &'static str {
|
||||||
return "hiii";
|
return "hiii";
|
||||||
}
|
}
|
||||||
|
|
||||||
const GRID_LENGTH: usize = 1;
|
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> io::Result<()> {
|
async fn main() -> io::Result<()> {
|
||||||
println!("Start initialisation");
|
println!("Start initialisation");
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue