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