public IAnnouncingChannel Announce(Channel channel)
{
if (!IsValidUri(AnnounceUri)) return null;
AnnouncingChannel announcing = null;
lock (announcingChannels) {
announcing = announcingChannels.FirstOrDefault(a => a.Channel==channel);
if (announcing!=null) return announcing;
}
Logger.Debug("Start announce channel {0} to {1}", channel.ChannelID.ToString("N"), AnnounceUri);
channel.ChannelInfoChanged += OnChannelPropertyChanged;
channel.ChannelTrackChanged += OnChannelPropertyChanged;
channel.Closed += OnChannelClosed;
announcing = new AnnouncingChannel { Channel=channel, Owner=this, IsStopped=false };
lock (announcingChannels) {
announcingChannels.Add(announcing);
if (announceThread==null || !announceThread.IsAlive) {
isStopped = false;
restartEvent.Reset();
announceThread = new Thread(AnnounceThreadProc);
announceThread.Name = String.Format("PCPYP {0} Announce", AnnounceUri);
announceThread.Start();
}
}
return announcing;
}