#![allow(non_snake_case)]
use std::collections::HashMap as FxHashMap;
use std::sync::Arc;
use std::time::{Duration, Instant};
use tokio::sync::RwLock;
use crate::core::{RiResult};
use super::super::{RiProtocolType};
pub struct RiConnectionCoordinator {
pub connections: Arc<RwLock<FxHashMap<String, RiCrossProtocolConnection>>>,
pub routing_table: Arc<RwLock<RiConnectionRoutingTable>>,
pub health_monitor: Arc<RiConnectionHealthMonitor>,
}
#[derive(Debug, Clone)]
pub struct RiCrossProtocolConnection {
pub connection_id: String,
pub source_protocol: RiProtocolType,
pub target_protocol: RiProtocolType,
pub target_device: String,
pub state: RiCrossProtocolConnectionState,
pub metadata: FxHashMap<String, String>,
pub established_at: Instant,
pub last_activity: Instant,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RiCrossProtocolConnectionState {
Initializing,
Established,
Active,
Degraded,
Failed,
Closing,
Closed,
}
#[derive(Debug, Clone)]
pub struct RiConnectionRoutingTable {
pub entries: FxHashMap<String, RiRoutingEntry>,
pub default_protocol: RiProtocolType,
pub routing_policies: Vec<RiRoutingPolicy>,
}
#[derive(Debug, Clone)]
pub struct RiRoutingEntry {
pub target_device: String,
pub preferred_protocol: RiProtocolType,
pub alternative_protocols: Vec<RiProtocolType>,
pub priority: u32,
pub cost: u32,
}
#[derive(Debug, Clone)]
pub struct RiRoutingPolicy {
pub name: String,
pub condition: RiRoutingCondition,
pub action: RiRoutingAction,
pub priority: u32,
}
#[derive(Debug, Clone)]
pub enum RiRoutingCondition {
DeviceType(RiDeviceType),
ProtocolAvailability(RiProtocolType),
SecurityLevel(super::super::RiSecurityLevel),
Performance(RiPerformanceCondition),
Custom(String),
}
#[derive(Debug, Clone)]
pub enum RiRoutingAction {
UseProtocol(RiProtocolType),
LoadBalance(Vec<RiProtocolType>),
Failover(Vec<RiProtocolType>),
Block,
Custom(String),
}
#[derive(Debug, Clone)]
pub struct RiPerformanceCondition {
pub max_latency: Duration,
pub min_throughput: u64,
pub max_error_rate: f32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RiDeviceType {
Server,
Client,
Gateway,
IoT,
Mobile,
Unknown,
}
pub struct RiConnectionHealthMonitor {
pub health_results: Arc<RwLock<FxHashMap<String, RiConnectionHealthResult>>>,
pub config: Arc<RiHealthCheckConfig>,
}
#[derive(Debug, Clone)]
pub struct RiConnectionHealthResult {
pub connection_id: String,
pub health_status: RiHealthStatus,
pub response_time: Duration,
pub error_count: u32,
pub last_check: Instant,
pub metrics: FxHashMap<String, f64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RiHealthStatus {
Healthy,
Degraded,
Unhealthy,
Unknown,
}
#[derive(Debug, Clone)]
pub struct RiHealthCheckConfig {
pub check_interval: Duration,
pub timeout: Duration,
pub retry_attempts: u32,
pub healthy_threshold: u32,
pub unhealthy_threshold: u32,
}