public void OnTimer()
{
lock (ports) {
var current_ports = peerCast.OutputListeners
.Where(listener => (listener.GlobalOutputAccepts & OutputStreamType.All)!=0)
.Select(listener => listener.LocalEndPoint.Port).ToArray();
var added_ports = current_ports.Except(ports).ToArray();
var removed_ports = ports.Except(current_ports).ToArray();
var existing_ports = current_ports.Intersect(ports).ToArray();
foreach (var port in removed_ports) {
RemovePort(port);
}
foreach (var port in added_ports) {
AddPort(port);
}
if (renewTimer.ElapsedMilliseconds>=60000) {
foreach (var port in existing_ports) {
RenewPort(port);
}
renewTimer.Restart();
}
ports = current_ports;
}
}