/// <summary> /// Asynchronously starts all hub connections /// If we have more than 20 connections each of them will start gradually with small delay /// </summary> public void Connect() { if (Hubs.Count == 0) { return; } if (Hubs.Count < 20) { Hubs.ForEach(h => h.StartAsync()); } else { ThreadPool.QueueWorkItem(delegate { // start new connections gradually var list = new List <HubConnection>(Hubs); for (int i = 0; i < list.Count; i++) { list[i].StartAsync(); Thread.Sleep(100); } }); } }
/// <summary> /// Releases all resources taken by this engine /// </summary> public void Dispose() { if (_updateTimer != null) { _updateTimer.Dispose(); _updateTimer = null; } HttpUploadItem.Manager.Dispose(); Hubs.ForEach(h => h.Dispose()); TransferManager.Dispose(); InitTcp(0); InitUdp(0); }
private void SettingsChanged(object sender, EngineSettingsEventArgs e) { switch (e.SettingType) { case EngineSettingType.TcpPort: InitTcp(Settings.TcpPort); break; case EngineSettingType.UdpPort: InitUdp(Settings.UdpPort); break; case EngineSettingType.DumpHubProtocolMessages: if (Settings.DumpHubProtocolMessages) { Hubs.ForEach(h => { h.IncomingMessage += IncomingMessageHandler; h.OutgoingMessage += OutgoingMessageHandler; } ); } else { Hubs.ForEach(h => { h.IncomingMessage -= IncomingMessageHandler; h.OutgoingMessage -= OutgoingMessageHandler; } ); } break; case EngineSettingType.DumpTransferProtocolMessages: if (Settings.DumpTransferProtocolMessages) { foreach (var transferConnection in TransferManager.Transfers()) { transferConnection.IncomingMessage += IncomingMessageHandler; transferConnection.OutgoingMessage += OutgoingMessageHandler; } } else { foreach (var transferConnection in TransferManager.Transfers()) { transferConnection.IncomingMessage -= IncomingMessageHandler; transferConnection.OutgoingMessage -= OutgoingMessageHandler; } } break; case EngineSettingType.TcpBacklog: InitTcp(Settings.TcpPort); break; case EngineSettingType.HttpQueueLimit: HttpUploadItem.Manager.QueueLimit = Settings.HttpQueueLimit; break; case EngineSettingType.HttpConnectionsPerServer: HttpUploadItem.Manager.ConnectionsPerServer = Settings.HttpConnectionsPerServer; break; case EngineSettingType.LocalAddress: LocalUdpAddress = string.Format("{0}:{1}", Settings.LocalAddress, Settings.UdpPort); LocalTcpAddress = string.Format("{0}:{1}", Settings.LocalAddress, Settings.TcpPort); break; } }