some fixes

This commit is contained in:
Daniella 2023-10-01 22:20:30 +02:00
parent 6f7f24016e
commit af4f1d85ec
Signed by: TudbuT
GPG key ID: 7D63D5634B7C417F
3 changed files with 15 additions and 6 deletions

View file

@ -1,7 +1,7 @@
use std::{
collections::HashMap,
io::{Read, Write},
net::{Shutdown, TcpStream},
net::TcpStream,
thread,
time::{Duration, SystemTime},
vec,
@ -65,7 +65,7 @@ fn connect(params: &ClientParams) -> Connection {
);
}
}
serial.set_timeout(Duration::from_millis(10000)).unwrap();
serial.set_timeout(Duration::from_millis(600000)).unwrap();
return Connection::new_serial(serial);
}
Connection::new_tcp(TcpStream::connect((params.server_ip, params.server_port)).unwrap())

View file

@ -16,6 +16,7 @@ pub struct Connection {
set_nonblocking_thunk: fn(NonNull<()>, bool) -> io::Result<()>,
close_thunk: fn(NonNull<()>) -> io::Result<()>,
is_nb: bool,
is_serial: bool,
}
impl Write for Connection {
@ -23,7 +24,7 @@ impl Write for Connection {
self.as_write().write_vectored(bufs)
}
fn write_all(&mut self, mut buf: &[u8]) -> io::Result<()> {
fn write_all(&mut self, buf: &[u8]) -> io::Result<()> {
self.as_write().write_all(buf)
}
@ -103,6 +104,7 @@ impl Connection {
data.cast::<TcpStream>().as_ref().shutdown(Shutdown::Both)
},
is_nb: false,
is_serial: false,
}
}
pub fn new_serial<T: SerialPort + 'static>(serial: T) -> Self {
@ -113,7 +115,7 @@ impl Connection {
set_nonblocking_thunk: |data, nb| unsafe {
data.cast::<T>()
.as_mut()
.set_timeout(Duration::from_millis(if nb { 1 } else { 10000 }))
.set_timeout(Duration::from_millis(if nb { 0 } else { 600000 }))
.map_err(|_| {
io::Error::new(io::ErrorKind::ConnectionAborted, "serial port went down")
})
@ -121,6 +123,7 @@ impl Connection {
// no need to close this.
close_thunk: |_data| Ok(()),
is_nb: false,
is_serial: true,
}
}
fn as_read(&mut self) -> &mut (dyn Read) {
@ -129,6 +132,9 @@ impl Connection {
fn as_write(&mut self) -> &mut (dyn Write) {
&mut self.readwrite
}
pub fn is_nonblocking(&self) -> bool {
self.is_nb
}
pub fn set_nonblocking(&mut self, nonblocking: bool) -> io::Result<()> {
self.is_nb = nonblocking;
(self.set_nonblocking_thunk)(self.data, nonblocking)
@ -136,4 +142,8 @@ impl Connection {
pub fn close(&self) -> io::Result<()> {
(self.close_thunk)(self.data)
}
pub fn is_serial(&self) -> bool {
self.is_serial
}
}

View file

@ -1,7 +1,6 @@
use std::{
io::{Error, Read},
io::{ErrorKind, Write},
net::TcpStream,
time::SystemTime,
};
@ -101,7 +100,7 @@ impl SocketAdapter {
return Ok(());
}
match {
self.internal.set_nonblocking(true)?;
self.internal.set_nonblocking(!self.internal.is_serial())?;
let r = self
.internal
.write(&self.write[self.written..self.written + self.to_write]);