private void CleanupChannels(Func<Channel, bool> predicate)
{
if (inactiveLimit<1) return;
var channels = peerCast.Channels;
foreach (var channel in channels) {
if (channel.IsBroadcasting) continue;
if (predicate(channel)) {
int time;
if (inactiveChannels.TryGetValue(channel, out time)) {
if (Environment.TickCount-time>inactiveLimit) {
peerCast.CloseChannel(channel);
inactiveChannels.Remove(channel);
}
}
else {
inactiveChannels.Add(channel, Environment.TickCount);
}
}
else {
inactiveChannels.Remove(channel);
}
}
foreach (var channel in inactiveChannels.Keys.ToArray()) {
if (!channels.Contains(channel)) {
inactiveChannels.Remove(channel);
}
}
}