public void invoke(Ice.LocatorPrx locator, Request request) { lock(this) { if(_locator != null && _locator != locator) { request.invoke(_locator); } else if(IceInternal.Time.currentMonotonicTimeMillis() < _nextRetry) { request.invoke(_voidLocator); // Don't retry to find a locator before the retry delay expires } else { _locator = null; _pendingRequests.Add(request); if(_pendingRetryCount == 0) // No request in progress { _pendingRetryCount = _retryCount; try { _lookup.begin_findLocator(_instanceName, _lookupReply); // Send multicast request. _timer.schedule(this, _timeout); } catch(Ice.LocalException) { foreach(Request req in _pendingRequests) { req.invoke(_voidLocator); } _pendingRequests.Clear(); _pendingRetryCount = 0; } } } } }
invoke(Ice.LocatorPrx locator, Request request) { lock (this) { if (request != null && _locator != null && _locator != locator) { request.invoke(_locator); } else if (request != null && IceInternal.Time.currentMonotonicTimeMillis() < _nextRetry) { request.invoke(_voidLocator); // Don't retry to find a locator before the retry delay expires } else { _locator = null; if (request != null) { _pendingRequests.Add(request); } if (!_pending) // No request in progress { _pending = true; _pendingRetryCount = _retryCount; _failureCount = 0; try { if (_traceLevel > 1) { StringBuilder s = new StringBuilder("looking up locator:\nlookup = "); s.Append(_lookup); if (_instanceName.Length > 0) { s.Append("\ninstance name = ").Append(_instanceName); } _lookup.ice_getCommunicator().getLogger().trace("Lookup", s.ToString()); } foreach (var l in _lookups) { l.Key.findLocatorAsync(_instanceName, l.Value).ContinueWith(t => { try { t.Wait(); } catch (AggregateException ex) { exception(ex.InnerException); } }, l.Key.ice_scheduler()); // Send multicast request. } _timer.schedule(this, _timeout); } catch (Ice.LocalException ex) { if (_traceLevel > 0) { StringBuilder s = new StringBuilder("locator lookup failed:\nlookup = "); s.Append(_lookup); if (_instanceName.Length > 0) { s.Append("\ninstance name = ").Append(_instanceName); } s.Append("\n").Append(ex); _lookup.ice_getCommunicator().getLogger().trace("Lookup", s.ToString()); } foreach (Request req in _pendingRequests) { req.invoke(_voidLocator); } _pendingRequests.Clear(); _pendingRetryCount = 0; _pending = false; } } } } }