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};
17 use protobuf::Message;
18 use std::convert::TryInto;
20 pub use futures::SinkExt;
21 pub use futures::StreamExt;
22 use protobuf::well_known_types::Any;
24 pub struct StitchConnection {
25 local_addr: SocketAddr,
26 peer_addr: SocketAddr,
27 reader: StitchConnectionReader,
28 writer: StitchConnectionWriter,
32 impl StitchConnection {
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>,
42 reader: StitchConnectionReader::new(local_addr, peer_addr, read_stream),
43 writer: StitchConnectionWriter::new(local_addr, peer_addr, write_stream),
47 pub fn local_addr(&self) -> SocketAddr {
48 self.local_addr.clone()
51 pub fn peer_addr(&self) -> SocketAddr {
52 self.peer_addr.clone()
55 pub fn split(self) -> (StitchConnectionReader, StitchConnectionWriter) {
56 (self.reader, self.writer)
59 pub fn join(reader: StitchConnectionReader, writer: StitchConnectionWriter) -> Self {
61 local_addr: reader.local_addr(),
62 peer_addr: reader.peer_addr(),
68 pub fn reader(&mut self) -> &mut StitchConnectionReader {
72 pub fn writer(&mut self) -> &mut StitchConnectionWriter {
76 pub async fn close(self) -> SocketAddr {
77 let peer_addr = self.peer_addr();
80 // self.writer.close().await;