Brunet.Services.Coordinate.VivaldiTargetSelector.ComputeCandidates C# (CSharp) Метод

ComputeCandidates() публичный Метод

public ComputeCandidates ( Brunet.Address start, int range, TargetSelectorDelegate cb, Brunet.Address current ) : void
start Brunet.Address
range int
cb TargetSelectorDelegate
current Brunet.Address
Результат void
    public override void ComputeCandidates(Address start, int range, TargetSelectorDelegate cb, Address current) {
      Channel q = null;
      RequestState rs = null;
      lock(_sync) {
#if VTS_DEBUG
        Console.Error.WriteLine("VTS local: {0}, start: {1}, range: {2}, count: {3}", _node.Address, start, range, _num_requests);
#endif
        if (_num_requests == MAX_REQUESTS) {
          return; //do nothing and return;
        }
        _num_requests++;
        q = new Channel();
        rs = new RequestState(start, range, cb, current);
        _channel_to_state[q] = rs;        
      }
      
      //create a new request state
      ISender s = new ForwardingSender(_node, 
                                       start, 
                                       AHHeader.Options.Greedy, 
                                       new DirectionalAddress(DirectionalAddress.Direction.Left),
                                       (short) range,
                                       AHHeader.Options.Path
                                       );

      q.EnqueueEvent += new EventHandler(EnqueueHandler);
      q.CloseEvent += new EventHandler(CloseHandler);
      RpcManager rpc = _node.Rpc;
      try {
        rpc.Invoke(s, q, "ncserver.EchoVivaldiState", new object[]{});
      }
      catch {
        //Make sure we clean up if something goes wrong:
        q.Close();
      }
    }