7 pub use crate::reader::ConnectionReader;
8 pub use crate::writer::ConnectionWriter;
9 use async_std::net::SocketAddr;
10 use futures::{AsyncRead, AsyncWrite};
11 pub use futures::{SinkExt, StreamExt};
13 pub struct Connection {
14 local_addr: SocketAddr,
15 peer_addr: SocketAddr,
16 reader: ConnectionReader,
17 writer: ConnectionWriter,
23 local_addr: SocketAddr,
24 peer_addr: SocketAddr,
25 read_stream: Box<dyn AsyncRead + Send + Sync + Unpin>,
26 write_stream: Box<dyn AsyncWrite + Send + Sync + Unpin>,
31 reader: ConnectionReader::new(local_addr, peer_addr, read_stream),
32 writer: ConnectionWriter::new(local_addr, peer_addr, write_stream),
36 pub fn local_addr(&self) -> SocketAddr {
37 self.local_addr.clone()
40 pub fn peer_addr(&self) -> SocketAddr {
41 self.peer_addr.clone()
44 pub fn split(self) -> (ConnectionReader, ConnectionWriter) {
45 (self.reader, self.writer)
48 pub fn join(reader: ConnectionReader, writer: ConnectionWriter) -> Self {
50 local_addr: reader.local_addr(),
51 peer_addr: reader.peer_addr(),
57 pub fn reader(&mut self) -> &mut ConnectionReader {
61 pub fn writer(&mut self) -> &mut ConnectionWriter {
65 pub async fn close(self) -> SocketAddr {
66 let peer_addr = self.peer_addr();
69 // self.writer.close().await;