/* Copyright (C) 2019 John Goerzen . */ use crate::ser::*; use crate::xb::*; use crate::xbpacket::*; use crate::xbrx::*; use bytes::*; use crossbeam_channel; use std::io; use std::io::{Read, Write}; pub fn stdin_processor( dest: u64, maxframesize: usize, sender: crossbeam_channel::Sender, ) -> io::Result<()> { let stdin = io::stdin(); let mut br = io::BufReader::new(stdin); let mut buf = vec![0u8; maxframesize - 1]; loop { let res = br.read(&mut buf)?; if res == 0 { // EOF sender.send(XBTX::Shutdown).unwrap(); return Ok(()); } sender .send(XBTX::TXData( XBDestAddr::U64(dest), Bytes::copy_from_slice(&buf[0..res]), )) .unwrap(); } } pub fn stdout_processor(xbreframer: &mut XBReframer, ser: &mut XBSerReader) -> io::Result<()> { let mut stdout = io::stdout(); loop { let (_fromu64, _fromu16, payload) = xbreframer.rxframe(ser); stdout.write_all(&payload)?; stdout.flush()?; } }