Skip to content

Commit 4272c07

Browse files
Diego PardoDGPardo
authored andcommitted
116: Decoupling TCP Reader
1 parent dc61738 commit 4272c07

5 files changed

Lines changed: 34 additions & 29 deletions

File tree

crates/hotfix/src/transport.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
mod connection;
2+
pub mod reader;
23
pub mod socket;
34
pub mod writer;
45

crates/hotfix/src/transport/connection.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::transport::socket_reader::ReaderRef;
1+
use crate::transport::reader::ReaderRef;
22
use crate::transport::writer::WriterRef;
33

44
pub struct FixConnection {
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
use tokio::sync::oneshot;
2+
3+
#[derive(Clone, Debug)]
4+
#[allow(dead_code)]
5+
pub struct ReaderMessage;
6+
7+
pub struct ReaderRef {
8+
disconnect_signal: oneshot::Receiver<()>,
9+
}
10+
11+
impl ReaderRef {
12+
pub fn new(disconnect_signal: oneshot::Receiver<()>) -> Self {
13+
Self { disconnect_signal }
14+
}
15+
16+
pub async fn wait_for_disconnect(self) {
17+
self.disconnect_signal
18+
.await
19+
.expect("not to drop signal prematurely");
20+
}
21+
}

crates/hotfix/src/transport/socket.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::{
1111
message::FixMessage,
1212
session::SessionRef,
1313
transport::{
14-
FixConnection, socket_reader::ReaderRef, socket_writer::spawn_socket_writer,
14+
FixConnection, socket_reader::spawn_socket_reader, socket_writer::spawn_socket_writer,
1515
tcp::create_tcp_connection, tls::create_tcp_over_tls_connection,
1616
},
1717
};
@@ -42,7 +42,7 @@ where
4242
let (reader, writer) = tokio::io::split(stream);
4343

4444
let writer_ref = spawn_socket_writer(writer);
45-
let reader_ref = ReaderRef::new(reader, session_ref);
45+
let reader_ref = spawn_socket_reader(reader, session_ref);
4646

4747
FixConnection::new(writer_ref, reader_ref)
4848
}

crates/hotfix/src/transport/socket/socket_reader.rs

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,17 @@ use tracing::debug;
55
use crate::message::FixMessage;
66
use crate::message::parser::Parser;
77
use crate::session::SessionRef;
8+
use crate::transport::reader::ReaderRef;
89

9-
#[derive(Clone, Debug)]
10-
#[allow(dead_code)]
11-
pub struct ReaderMessage;
10+
pub fn spawn_socket_reader(
11+
reader: ReadHalf<impl AsyncRead + Send + 'static>,
12+
session_ref: SessionRef<impl FixMessage>,
13+
) -> ReaderRef {
14+
let (dc_sender, dc_receiver) = oneshot::channel();
15+
let actor = ReaderActor::new(reader, session_ref, dc_sender);
16+
tokio::spawn(run_reader(actor));
1217

13-
pub struct ReaderRef {
14-
disconnect_signal: oneshot::Receiver<()>,
15-
}
16-
17-
impl ReaderRef {
18-
pub fn new<M: FixMessage>(
19-
reader: ReadHalf<impl AsyncRead + Send + 'static>,
20-
session_ref: SessionRef<M>,
21-
) -> Self {
22-
let (dc_sender, dc_receiver) = oneshot::channel();
23-
let actor = ReaderActor::new(reader, session_ref, dc_sender);
24-
tokio::spawn(run_reader(actor));
25-
26-
Self {
27-
disconnect_signal: dc_receiver,
28-
}
29-
}
30-
31-
pub async fn wait_for_disconnect(self) {
32-
self.disconnect_signal
33-
.await
34-
.expect("not to drop signal prematurely");
35-
}
18+
ReaderRef::new(dc_receiver)
3619
}
3720

3821
struct ReaderActor<M, R> {

0 commit comments

Comments
 (0)