提交 56aa8552 authored 作者: Serhij S's avatar Serhij S

session_id

上级 a0d89363
......@@ -42,4 +42,5 @@ trait Communicator {
fn write(&self, buf: &[u8]) -> Result<(), std::io::Error>;
fn read_exact(&self, buf: &mut [u8]) -> Result<(), std::io::Error>;
fn protocol(&self) -> Protocol;
fn session_id(&self) -> usize;
}
......@@ -9,6 +9,8 @@ use serial::SystemPort;
use std::io;
use std::io::{Read, Write};
use std::str::FromStr;
use std::sync::atomic::AtomicUsize;
use std::sync::atomic::Ordering;
use std::sync::Arc;
use std::time::{Duration, Instant};
......@@ -127,6 +129,7 @@ pub struct Serial {
frame_delay: Duration,
busy: Mutex<()>,
params: Parameters,
session_id: AtomicUsize,
}
#[derive(Default)]
......@@ -142,10 +145,14 @@ impl Communicator for Serial {
fn lock(&self) -> MutexGuard<()> {
self.busy.lock()
}
fn session_id(&self) -> usize {
self.session_id.load(Ordering::Relaxed)
}
fn reconnect(&self) {
let mut port = self.port.lock();
port.system_port.take();
port.last_frame.take();
self.session_id.fetch_add(1, Ordering::Relaxed);
}
fn write(&self, buf: &[u8]) -> std::result::Result<(), std::io::Error> {
let mut port = self
......@@ -199,6 +206,7 @@ impl Serial {
frame_delay,
busy: <_>::default(),
params,
session_id: <_>::default(),
}
.into())
}
......
......@@ -6,6 +6,7 @@ use parking_lot::{Mutex, MutexGuard};
use std::io::{Read, Write};
use std::net::TcpStream;
use std::net::{SocketAddr, ToSocketAddrs};
use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::Arc;
use std::time::Duration;
......@@ -21,6 +22,7 @@ pub struct Tcp {
stream: Mutex<Option<TcpStream>>,
timeout: Duration,
busy: Mutex<()>,
session_id: AtomicUsize,
}
#[allow(clippy::module_name_repetitions)]
......@@ -39,8 +41,12 @@ impl Communicator for Tcp {
fn lock(&self) -> MutexGuard<()> {
self.busy.lock()
}
fn session_id(&self) -> usize {
self.session_id.load(Ordering::Relaxed)
}
fn reconnect(&self) {
self.stream.lock().take();
self.session_id.fetch_add(1, Ordering::Relaxed);
}
fn write(&self, buf: &[u8]) -> Result<(), std::io::Error> {
let mut stream = self.get_stream()?;
......@@ -76,6 +82,7 @@ impl Tcp {
stream: <_>::default(),
busy: <_>::default(),
timeout,
session_id: <_>::default(),
}
.into())
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论