private void Rs_TargetsCleared(object sender, EventArgs e)
        {
            RTPServer rs = sender as RTPServer;

            rs.TargetsCleared -= Rs_TargetsCleared;
            rs.Dispose();
            _rtpServers.Remove(rs.VideoId);
        }
 public bool RemoveTarget(string videoId, string ip, int port)
 {
     if (_rtpServers.ContainsKey(videoId))
     {
         RTPServer rs = _rtpServers[videoId];
         rs.RemoveTarget(ip, port);
         return(true);
     }
     return(false);
 }
 public void RemoveServer(string videoId)
 {
     if (_rtpServers.ContainsKey(videoId))
     {
         RTPServer rs = _rtpServers[videoId];
         rs.TargetsCleared -= Rs_TargetsCleared;
         rs.Dispose();
         _rtpServers.Remove(rs.VideoId);
     }
 }
 public bool AddTarget(string videoId, string ip, int port)
 {
     if (_rtpServers.ContainsKey(videoId))
     {
         RTPServer rs = _rtpServers[videoId];
         rs.AddTarget(ip, port);
         if (!rs.Started)
         {
             rs.Start();
         }
         return(true);
     }
     return(false);
 }
 public RTPServer GetOrAddServer(string videoId)
 {
     if (_rtpServers.ContainsKey(videoId))
     {
         return(_rtpServers[videoId]);
     }
     else
     {
         int       port = PortUtils.GetFreeRTPPort();
         RTPServer rs   = new RTPServer(port, videoId);
         rs.TargetsCleared   += Rs_TargetsCleared;
         _rtpServers[videoId] = rs;
         return(rs);
     }
 }