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
}
}