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