Apache.NMS.ActiveMQ.Transport.Failover.FailoverTransport.BuildBackups C# (CSharp) Method

BuildBackups() private method

private BuildBackups ( ) : bool
return bool
        private bool BuildBackups()
        {
            lock(backupMutex)
            {
                if(!disposed && Backup && backups.Count < BackupPoolSize)
                {
                    List<Uri> connectList = ConnectList;
                    foreach(BackupTransport bt in backups)
                    {
                        if(bt.Disposed)
                        {
                            backups.Remove(bt);
                        }
                    }

                    foreach(Uri uri in connectList)
                    {
                        if(ConnectedTransportURI != null && !ConnectedTransportURI.Equals(uri))
                        {
                            try
                            {
                                BackupTransport bt = new BackupTransport(this)
                                {
                                    Uri = uri
                                };

                                if(!backups.Contains(bt))
                                {
                                    ITransport t = TransportFactory.CompositeConnect(uri);
                                    t.Command = bt.OnCommand;
                                    t.Exception = bt.OnException;
                                    t.Start();
                                    bt.Transport = t;
                                    backups.Add(bt);
                                }
                            }
                            catch(Exception e)
                            {
                                Tracer.DebugFormat("Failed to build backup: {0}", e.Message);
                            }
                        }

                        if(backups.Count == BackupPoolSize)
                        {
                            break;
                        }
                    }
                }
            }

            return false;
        }

Usage Example

Beispiel #1
0
            public bool Iterate()
            {
                bool result = false;

                if (!parent.IsStarted)
                {
                    return(false);
                }

                bool buildBackup = true;
                bool doReconnect = !parent.disposed && parent.connectionFailure == null;

                try
                {
                    parent.backupMutex.WaitOne();
                    if (parent.ConnectedTransport == null && doReconnect)
                    {
                        result      = parent.DoConnect();
                        buildBackup = false;
                    }
                }
                finally
                {
                    parent.backupMutex.ReleaseMutex();
                }

                if (buildBackup)
                {
                    parent.BuildBackups();
                }
                else
                {
                    //build backups on the next iteration
                    result = true;
                    try
                    {
                        parent.reconnectTask.Wakeup();
                    }
                    catch (ThreadInterruptedException)
                    {
                        Tracer.Debug("Reconnect task has been interrupted.");
                    }
                }
                return(result);
            }