1pub mod MessageCompressor;
10pub mod ConnectionPool;
11pub mod SecureMessageChannel;
12pub mod PerformanceDashboard;
13
14use std::collections::HashMap;
15
16use log::{debug, info};
17use bincode::serde::encode_to_vec;
18
19use crate::IPC::Enhanced::MessageCompressor::{BatchConfig, CompressionAlgorithm, CompressionLevel};
21use crate::IPC::Enhanced::{
22 ConnectionPool::{PoolConfig, PoolStats},
23 PerformanceDashboard::{DashboardConfig, DashboardStatistics, MetricType},
24 SecureMessageChannel::{EncryptedMessage, SecurityConfig, SecurityStats},
25};
26
27pub struct EnhancedIPCManager {
29 pub compressor:MessageCompressor::MessageCompressor,
30 pub connection_pool:ConnectionPool::ConnectionPool,
31 pub secure_channel:SecureMessageChannel::SecureMessageChannel,
32 pub performance_dashboard:PerformanceDashboard::PerformanceDashboard,
33}
34
35impl EnhancedIPCManager {
36 pub fn new() -> Result<Self, String> {
38 let compressor_config = BatchConfig::default();
39 let pool_config = PoolConfig::default();
40 let security_config = SecurityConfig::default();
41 let dashboard_config = DashboardConfig::default();
42
43 Ok(Self {
44 compressor:MessageCompressor::MessageCompressor::new(compressor_config),
45 connection_pool:ConnectionPool::ConnectionPool::new(pool_config),
46 secure_channel:SecureMessageChannel::SecureMessageChannel::new(security_config)?,
47 performance_dashboard:PerformanceDashboard::PerformanceDashboard::new(dashboard_config),
48 })
49 }
50
51 pub async fn start(&self) -> Result<(), String> {
53 self.connection_pool.start().await?;
54 self.secure_channel.start().await?;
55 self.performance_dashboard.start().await?;
56
57 log::info!("[EnhancedIPCManager] All enhanced IPC features started");
58 Ok(())
59 }
60
61 pub async fn stop(&self) -> Result<(), String> {
63 self.connection_pool.stop().await?;
64 self.secure_channel.stop().await?;
65 self.performance_dashboard.stop().await?;
66
67 log::info!("[EnhancedIPCManager] All enhanced IPC features stopped");
68 Ok(())
69 }
70
71 pub async fn send_enhanced_message<T:serde::Serialize>(
73 &self,
74 channel:&str,
75 message:&T,
76 use_compression:bool,
77 use_encryption:bool,
78 ) -> Result<(), String> {
79 let start_time = std::time::Instant::now();
80
81 let connection = self.connection_pool.get_connection().await?;
83
84 let serialized = encode_to_vec(message, bincode::config::standard())
86 .map_err(|e| format!("Failed to serialize message: {}", e))?;
87
88 let result = if use_encryption {
89 let encrypted = self.secure_channel.encrypt_message(message).await?;
91 self.send_encrypted_message(channel, &encrypted).await
92 } else if use_compression {
93 self.send_compressed_message(channel, &serialized).await
95 } else {
96 self.send_raw_message(channel, &serialized).await
98 };
99
100 let duration = start_time.elapsed().as_millis() as f64;
102 let metric = PerformanceDashboard::PerformanceDashboard::create_metric(
103 MetricType::MessageProcessingTime,
104 duration,
105 Some(channel.to_string()),
106 HashMap::new(),
107 );
108
109 self.performance_dashboard.record_metric(metric).await;
110
111 self.connection_pool.release_connection(connection).await;
113
114 result
115 }
116
117 async fn send_encrypted_message(&self, channel:&str, _encrypted:&EncryptedMessage) -> Result<(), String> {
119 log::debug!("[EnhancedIPCManager] Sending encrypted message on channel: {}", channel);
121 Ok(())
122 }
123
124 async fn send_compressed_message(&self, channel:&str, _data:&[u8]) -> Result<(), String> {
126 log::debug!("[EnhancedIPCManager] Sending compressed message on channel: {}", channel);
128 Ok(())
129 }
130
131 async fn send_raw_message(&self, channel:&str, _data:&[u8]) -> Result<(), String> {
133 log::debug!("[EnhancedIPCManager] Sending raw message on channel: {}", channel);
135 Ok(())
136 }
137
138 pub async fn get_statistics(&self) -> EnhancedIPCStats {
140 let pool_stats = self.connection_pool.get_stats().await;
141 let security_stats = self.secure_channel.get_stats().await;
142 let dashboard_stats = self.performance_dashboard.get_statistics().await;
143
144 EnhancedIPCStats {
145 connection_pool:pool_stats,
146 security:security_stats,
147 performance:dashboard_stats,
148 compression_ratio:self.compressor.get_batch_stats().total_size_bytes as f64,
149 }
150 }
151}
152
153#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
155pub struct EnhancedIPCStats {
156 pub connection_pool:PoolStats,
157 pub security:SecurityStats,
158 pub performance:DashboardStatistics,
159 pub compression_ratio:f64,
160}
161
162pub async fn initialize_enhanced_ipc() -> Result<EnhancedIPCManager, String> {
164 let manager = EnhancedIPCManager::new()?;
165 manager.start().await?;
166
167 log::info!("[EnhancedIPCManager] Enhanced IPC features initialized");
168 Ok(manager)
169}
170
171impl EnhancedIPCManager {
173 pub fn high_performance_config() -> Self {
175 let compressor_config = BatchConfig {
176 MaxBatchSize:200,
177 MaxBatchDelayMs:50,
178 CompressionThresholdBytes:512,
179 CompressionLevel:CompressionLevel::High,
180 Algorithm:CompressionAlgorithm::Brotli,
181 };
182
183 let pool_config = PoolConfig {
184 max_connections:50,
185 min_connections:10,
186 connection_timeout_ms:10000,
187 max_lifetime_ms:180000,
188 idle_timeout_ms:30000,
189 health_check_interval_ms:15000,
190 };
191
192 let security_config = SecurityConfig {
193 key_rotation_interval_hours:12,
194 max_message_size_bytes:5 * 1024 * 1024,
195 ..Default::default()
196 };
197
198 let dashboard_config = DashboardConfig {
199 update_interval_ms:1000,
200 metrics_retention_hours:6,
201 alert_threshold_ms:500,
202 trace_sampling_rate:0.2,
203 max_traces_stored:2000,
204 };
205
206 Self {
207 compressor:MessageCompressor::MessageCompressor::new(compressor_config),
208 connection_pool:ConnectionPool::ConnectionPool::new(pool_config),
209 secure_channel:SecureMessageChannel::SecureMessageChannel::new(security_config).unwrap(),
210 performance_dashboard:PerformanceDashboard::PerformanceDashboard::new(dashboard_config),
211 }
212 }
213
214 pub fn high_security_config() -> Self {
216 let compressor_config = BatchConfig {
217 MaxBatchSize:50,
218 MaxBatchDelayMs:200,
219 CompressionThresholdBytes:2048,
220 CompressionLevel:CompressionLevel::Balanced,
221 Algorithm:CompressionAlgorithm::Gzip,
222 };
223
224 let pool_config = PoolConfig {
225 max_connections:10,
226 min_connections:2,
227 connection_timeout_ms:30000,
228 max_lifetime_ms:600000,
229 idle_timeout_ms:120000,
230 health_check_interval_ms:60000,
231 };
232
233 let security_config = SecurityConfig {
234 key_rotation_interval_hours:1,
235 max_message_size_bytes:1 * 1024 * 1024,
236 ..Default::default()
237 };
238
239 let dashboard_config = DashboardConfig {
240 update_interval_ms:2000,
241 metrics_retention_hours:48,
242 alert_threshold_ms:2000,
243 trace_sampling_rate:0.5,
244 max_traces_stored:500,
245 };
246
247 Self {
248 compressor:MessageCompressor::MessageCompressor::new(compressor_config),
249 connection_pool:ConnectionPool::ConnectionPool::new(pool_config),
250 secure_channel:SecureMessageChannel::SecureMessageChannel::new(security_config).unwrap(),
251 performance_dashboard:PerformanceDashboard::PerformanceDashboard::new(dashboard_config),
252 }
253 }
254}
255
256impl EnhancedIPCManager {
258 pub async fn integrate_with_tauri_ipc(
260 &self,
261 _ipc_server:&crate::IPC::TauriIPCServer::TauriIPCServer,
262 ) -> Result<(), String> {
263 log::info!("[EnhancedIPCManager] Integrating with Tauri IPC server");
264
265 Ok(())
270 }
271
272 pub async fn create_enhanced_handler(
274 &self,
275 ) -> impl Fn(crate::IPC::TauriIPCServer::TauriIPCMessage) -> Result<(), String> {
276 |message:crate::IPC::TauriIPCServer::TauriIPCMessage| {
278 log::debug!("[EnhancedIPCManager] Handling message on channel: {}", message.channel);
279 Ok(())
280 }
281 }
282}
283
284#[cfg(test)]
285mod tests {
286 use super::*;
287
288 #[tokio::test]
289 async fn test_enhanced_ipc_manager_creation() {
290 let manager = EnhancedIPCManager::new().unwrap();
291 assert!(manager.start().await.is_ok());
292 assert!(manager.stop().await.is_ok());
293 }
294
295 #[tokio::test]
296 async fn test_high_performance_config() {
297 let manager = EnhancedIPCManager::high_performance_config();
298 assert_eq!(manager.connection_pool.config.max_connections, 50);
299 }
300
301 #[tokio::test]
302 async fn test_high_security_config() {
303 let manager = EnhancedIPCManager::high_security_config();
304 assert_eq!(manager.secure_channel.config.key_rotation_interval_hours, 1);
305 }
306
307 #[tokio::test]
308 async fn test_statistics_collection() {
309 let manager = EnhancedIPCManager::new().unwrap();
310 manager.start().await.unwrap();
311
312 let stats = manager.get_statistics().await;
313 assert!(stats.compression_ratio >= 0.0);
314
315 manager.stop().await.unwrap();
316 }
317}