]> git.lizzy.rs Git - connect-rs.git/blob - src/lib.rs
rename stitch-net to connect
[connect-rs.git] / src / lib.rs
1 pub mod schema;
2 pub mod tcp;
3 // @todo pub mod tls;
4 mod reader;
5 mod writer;
6
7 pub use crate::reader::StitchConnectionReader;
8 use crate::schema::StitchMessage;
9 pub use crate::writer::StitchConnectionWriter;
10 use async_channel::RecvError;
11 use async_std::net::SocketAddr;
12 use async_std::pin::Pin;
13 use bytes::{Buf, BytesMut};
14 use futures::task::{Context, Poll};
15 use futures::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt, Sink, Stream};
16 use log::*;
17 use protobuf::Message;
18 use std::convert::TryInto;
19
20 pub use futures::SinkExt;
21 pub use futures::StreamExt;
22 use protobuf::well_known_types::Any;
23
24 pub struct StitchConnection {
25     local_addr: SocketAddr,
26     peer_addr: SocketAddr,
27     reader: StitchConnectionReader,
28     writer: StitchConnectionWriter,
29 }
30
31 #[allow(dead_code)]
32 impl StitchConnection {
33     pub(crate) fn new(
34         local_addr: SocketAddr,
35         peer_addr: SocketAddr,
36         read_stream: Box<dyn AsyncRead + Send + Sync + Unpin>,
37         write_stream: Box<dyn AsyncWrite + Send + Sync + Unpin>,
38     ) -> Self {
39         Self {
40             local_addr,
41             peer_addr,
42             reader: StitchConnectionReader::new(local_addr, peer_addr, read_stream),
43             writer: StitchConnectionWriter::new(local_addr, peer_addr, write_stream),
44         }
45     }
46
47     pub fn local_addr(&self) -> SocketAddr {
48         self.local_addr.clone()
49     }
50
51     pub fn peer_addr(&self) -> SocketAddr {
52         self.peer_addr.clone()
53     }
54
55     pub fn split(self) -> (StitchConnectionReader, StitchConnectionWriter) {
56         (self.reader, self.writer)
57     }
58
59     pub fn join(reader: StitchConnectionReader, writer: StitchConnectionWriter) -> Self {
60         Self {
61             local_addr: reader.local_addr(),
62             peer_addr: reader.peer_addr(),
63             reader,
64             writer,
65         }
66     }
67
68     pub fn reader(&mut self) -> &mut StitchConnectionReader {
69         &mut self.reader
70     }
71
72     pub fn writer(&mut self) -> &mut StitchConnectionWriter {
73         &mut self.writer
74     }
75
76     pub async fn close(self) -> SocketAddr {
77         let peer_addr = self.peer_addr();
78
79         drop(self.reader);
80         // self.writer.close().await;
81         drop(self.writer);
82
83         return peer_addr;
84     }
85 }