protected override void OnConnectionStopped(SourceStreamBase.ConnectionStoppedEvent msg)
 {
     switch (msg.StopReason) {
       case StopReason.UnavailableError:
     IgnoreNode(msg.Connection.SourceUri);
     Reconnect(SelectSourceHost());
     break;
       case StopReason.ConnectionError:
       case StopReason.OffAir:
     if (msg.Connection.SourceUri==trackerUri) {
       Stop(msg.StopReason);
     }
     else {
       IgnoreNode(msg.Connection.SourceUri);
       Reconnect(SelectSourceHost());
     }
     break;
       case StopReason.UserReconnect:
     break;
       case StopReason.UserShutdown:
       default:
     Stop(msg.StopReason);
     break;
       }
 }
 protected override void OnReconnected(SourceStreamBase.ReconnectEvent msg)
 {
     if (this.sourceConnection.SourceUri!=trackerUri) {
     IgnoreNode(this.sourceConnection.SourceUri);
       }
       Reconnect(SelectSourceHost());
 }
 protected override void OnConnectionStopped(SourceStreamBase.ConnectionStoppedEvent msg)
 {
     switch (msg.StopReason) {
       case StopReason.UserReconnect:
     break;
       case StopReason.UserShutdown:
     Stop(msg.StopReason);
     break;
       case StopReason.NoHost:
     Stop(msg.StopReason);
     break;
       default:
     Reconnect();
     break;
       }
 }