示例#1
0
        /// <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);
                    }
                });
            }
        }
示例#2
0
        /// <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);
        }
示例#3
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;
            }
        }