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

session_id

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