Esempio n. 1
0
        private bool buildBackups()
        {
            try
            {
                backupMutex.WaitOne();
                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);
                                bt.Uri = uri;
                                if (!backups.Contains(bt))
                                {
                                    ITransport t = TransportFactory.CompositeConnect(uri);
                                    t.Command   = new CommandHandler(bt.onCommand);
                                    t.Exception = new ExceptionHandler(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;
                        }
                    }
                }
            }
            finally
            {
                backupMutex.ReleaseMutex();
            }

            return(false);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 public override String ToString()
 {
     return(ConnectedTransportURI == null ? "unconnected" : ConnectedTransportURI.ToString());
 }
Esempio n. 4
0
        public void HandleTransportFailure(Exception e)
        {
            ITransport transport = connectedTransport.GetAndSet(null);

            if (transport != null)
            {
                transport.Command   = new CommandHandler(disposedOnCommand);
                transport.Exception = new ExceptionHandler(disposedOnException);
                try
                {
                    transport.Stop();
                }
                catch (Exception ex)
                {
                    ex.GetType();       // Ignore errors but this lets us see the error during debugging
                }

                lock (reconnectMutex)
                {
                    bool reconnectOk = false;
                    if (started)
                    {
                        Tracer.WarnFormat("Transport failed to {0}, attempting to automatically reconnect due to: {1}", ConnectedTransportURI.ToString(), e.Message);
                        reconnectOk = true;
                    }

                    failedConnectTransportURI = ConnectedTransportURI;
                    ConnectedTransportURI     = null;
                    connected = false;
                    if (reconnectOk)
                    {
                        reconnectTask.Wakeup();
                    }
                }

                if (this.Interrupted != null)
                {
                    this.Interrupted(transport);
                }
            }
        }