1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use async_trait::{async_trait};
use cyfs_base::*;
use crate::{
    stream::{StreamProviderSelector}
};
use super::super::{action::*};

pub enum ConnectStreamState {
    Connecting1, 
    PreEstablish,
    Connecting2,  
    Establish, 
    Closed
}

pub type DynConnectStreamAction = Box<dyn ConnectStreamAction>;

#[async_trait]
pub trait ConnectStreamAction: BuildTunnelAction {
    fn clone_as_connect_stream_action(&self) -> DynConnectStreamAction;
    fn as_any(&self) -> &dyn std::any::Any;
    fn state(&self) -> ConnectStreamState;
    async fn wait_pre_establish(&self) -> ConnectStreamState;
    async fn continue_connect(&self) -> BuckyResult<StreamProviderSelector>;
}