ugly_smart_lib 0.1.1

jonny's ugly smart lib for Rust
Documentation
//! src/net_params.rs

use crate::net_pub::{INetCallBack, ServiceType};
use crate::smart_pub::StdArc;

type CallBackType<T> = Box<StdArc<dyn INetCallBack<T>>>;

pub trait ITcpConnectionParams<CallBackType> {
    fn handle_ref(&self) -> &String;
    fn handle_inner(&self) -> String;

    #[allow(dead_code)]
    /// 获取回调
    fn call_back_ref(&self) -> &CallBackType;
    fn call_back_inner(&self) -> CallBackType;

    fn service_type(&self) -> ServiceType;

    fn address_inner(&self) -> String;
    fn address_ref(&self) -> &String;
}

#[derive(Debug, Clone)]
pub struct STcpClientParams {
    pub connection_addr: String,
    pub call_back: CallBackType<Vec<u8>>,
    pub extra_params: String,
}

impl ITcpConnectionParams<CallBackType<Vec<u8>>> for STcpClientParams {
    fn handle_ref(&self) -> &String {
        &self.extra_params
    }

    fn handle_inner(&self) -> String {
        self.extra_params.clone()
    }

    fn call_back_ref(&self) -> &CallBackType<Vec<u8>> {
        &self.call_back
    }

    fn call_back_inner(&self) -> CallBackType<Vec<u8>> {
        self.call_back.clone()
    }

    fn service_type(&self) -> ServiceType {
        ServiceType::Client
    }

    fn address_inner(&self) -> String {
        self.connection_addr.clone()
    }

    fn address_ref(&self) -> &String {
        &self.connection_addr
    }
}

#[derive(Debug, Clone)]
pub struct STcpServerParams {
    pub connection_addr: String,
    pub call_back: CallBackType<Vec<u8>>,
    pub extra_params: String,
}

impl ITcpConnectionParams<CallBackType<Vec<u8>>> for STcpServerParams {
    fn handle_ref(&self) -> &String {
        &self.extra_params
    }

    fn handle_inner(&self) -> String {
        self.extra_params.clone()
    }

    fn call_back_ref(&self) -> &CallBackType<Vec<u8>> {
        &self.call_back
    }

    fn call_back_inner(&self) -> CallBackType<Vec<u8>> {
        self.call_back.clone()
    }

    fn service_type(&self) -> ServiceType {
        ServiceType::Server
    }

    fn address_inner(&self) -> String {
        self.connection_addr.clone()
    }

    fn address_ref(&self) -> &String {
        &self.connection_addr
    }
}

#[derive(Debug, Clone)]
/// 连接参数
pub struct SConnectionParams {
    pub call_back: CallBackType<Vec<u8>>,
    pub serv_type: ServiceType,
    pub extra_params: String,
}

impl ITcpConnectionParams<CallBackType<Vec<u8>>> for SConnectionParams {
    fn handle_ref(&self) -> &String {
        &self.extra_params
    }

    fn handle_inner(&self) -> String {
        self.extra_params.clone()
    }

    fn call_back_ref(&self) -> &CallBackType<Vec<u8>> {
        &self.call_back
    }

    fn call_back_inner(&self) -> CallBackType<Vec<u8>> {
        self.call_back.clone()
    }

    fn service_type(&self) -> ServiceType {
        self.serv_type
    }

    fn address_inner(&self) -> String {
        String::new()
    }

    fn address_ref(&self) -> &String {
        const DEFAULT_ADDR: &'static String = &String::new();
        DEFAULT_ADDR
    }
}

pub trait IUdpConnectionParams<CallBackType> {
    fn handle_ref(&self) -> &String;
    fn handle_inner(&self) -> String;

    #[allow(dead_code)]
    /// 获取回调
    fn call_back_ref(&self) -> &CallBackType;
    fn call_back_inner(&self) -> CallBackType;

    fn service_type(&self) -> ServiceType;

    fn local_address_inner(&self) -> String;
    fn local_address_ref(&self) -> &String;

    fn remote_address_inner(&self) -> String;
    fn remote_address_ref(&self) -> &String;
}

#[derive(Clone)]
pub struct SUdpConnectionParams {
    pub call_back: CallBackType<(String, Vec<u8>)>,
    pub serv_type: ServiceType,
    pub extra_params: String,
    pub remote_addr: String,
}

impl IUdpConnectionParams<CallBackType<(String, Vec<u8>)>> for SUdpConnectionParams {
    fn handle_ref(&self) -> &String {
        &self.extra_params
    }

    fn handle_inner(&self) -> String {
        self.extra_params.clone()
    }

    fn call_back_ref(&self) -> &CallBackType<(String, Vec<u8>)> {
        &self.call_back
    }

    fn call_back_inner(&self) -> CallBackType<(String, Vec<u8>)> {
        self.call_back.clone()
    }

    fn service_type(&self) -> ServiceType {
        self.serv_type
    }

    fn remote_address_inner(&self) -> String {
        self.remote_addr.clone()
    }

    fn remote_address_ref(&self) -> &String {
        &self.remote_addr
    }

    fn local_address_inner(&self) -> String {
        String::new()
    }

    fn local_address_ref(&self) -> &String {
        const DEFAULT_ADDR: &'static String = &String::new();
        DEFAULT_ADDR
    }
}

#[derive(Debug)]
pub struct SUdpClientParams {
    pub call_back: CallBackType<(String, Vec<u8>)>,
    pub extra_params: String,
    pub remote_addr: String,
    pub local_addr: String,
}

impl IUdpConnectionParams<CallBackType<(String, Vec<u8>)>> for SUdpClientParams {
    fn handle_ref(&self) -> &String {
        &self.extra_params
    }

    fn handle_inner(&self) -> String {
        self.extra_params.clone()
    }

    fn call_back_ref(&self) -> &CallBackType<(String, Vec<u8>)> {
        &self.call_back
    }

    fn call_back_inner(&self) -> CallBackType<(String, Vec<u8>)> {
        self.call_back.clone()
    }

    fn service_type(&self) -> ServiceType {
        ServiceType::Client
    }

    fn remote_address_inner(&self) -> String {
        self.remote_addr.clone()
    }

    fn remote_address_ref(&self) -> &String {
        &self.remote_addr
    }

    fn local_address_inner(&self) -> String {
        self.local_addr.clone()
    }

    fn local_address_ref(&self) -> &String {
        &self.local_addr
    }
}

#[derive(Debug)]
pub struct SUdpServerParams {
    pub call_back: CallBackType<(String, Vec<u8>)>,
    pub extra_params: String,
    pub local_addr: String,
}

impl IUdpConnectionParams<CallBackType<(String, Vec<u8>)>> for SUdpServerParams {
    fn handle_ref(&self) -> &String {
        &self.extra_params
    }

    fn handle_inner(&self) -> String {
        self.extra_params.clone()
    }

    fn call_back_ref(&self) -> &CallBackType<(String, Vec<u8>)> {
        &self.call_back
    }

    fn call_back_inner(&self) -> CallBackType<(String, Vec<u8>)> {
        self.call_back.clone()
    }

    fn service_type(&self) -> ServiceType {
        ServiceType::Client
    }

    fn remote_address_inner(&self) -> String {
        String::new()
    }

    fn remote_address_ref(&self) -> &String {
        const DEFAULT_ADDR: &'static String = &String::new();
        DEFAULT_ADDR
    }

    fn local_address_inner(&self) -> String {
        self.local_addr.clone()
    }

    fn local_address_ref(&self) -> &String {
        &self.local_addr
    }
}