}
maybeAddNewRegistrar(resp);
} else if(req instanceof LookupLocator) {
// Perform unicast discovery using the LookupLocator
// host and port.
LookupLocator loc = (LookupLocator)req;
UnicastResponse resp = new MultiIPDiscovery() {
protected UnicastResponse performDiscovery(
Discovery disco,
DiscoveryConstraints dc,
Socket s)
throws IOException, ClassNotFoundException
{
return doUnicastDiscovery(s, dc, disco);
}
protected void singleResponseException(Exception e,
InetAddress addr,
int port)
{
logger.log(
Levels.HANDLED,
"Exception occured during unicast discovery " +
addr + ":" + port, e);
}
}.getResponse(loc.getHost(),
loc.getPort(),
rawUnicastDiscoveryConstraints);
maybeAddNewRegistrar(resp);
} else if(req instanceof CheckGroupsMarker) {
// handle group changes
announcement = ((CheckGroupsMarker)req).announcement;
ServiceID srvcID = announcement.getServiceID();
UnicastResponse resp = null;
synchronized (registrars) {
resp = (UnicastResponse)registrars.get(srvcID);
}
if(resp != null) {
maybeSendEvent(resp, announcement.getGroups());
}//endif
} else if(req instanceof CheckReachabilityMarker) {
// test reachability
response = ((CheckReachabilityMarker)req).response;
maybeSendEvent(response, null);
}//endif
} catch (InterruptedIOException e) {
logger.log(Levels.HANDLED,
"exception occurred during unicast discovery",
e);
} catch (Throwable e) {
if (((req instanceof Socket) ||
(req instanceof LookupLocator)) &&
logger.isLoggable(Level.INFO)) {
String logmsg =
"exception occurred during unicast discovery to " +
"{0}:{1,number,#} with constraints {2}";
String methodName = "run";
if (req instanceof Socket) {
Socket sock = (Socket) req;
LogUtil.logThrow(logger,
Level.INFO,
this.getClass(),
methodName,
logmsg,
new Object[] {
sock.getInetAddress().getHostName(),
new Integer(sock.getPort()),
rawUnicastDiscoveryConstraints
},
e);
} else {
LookupLocator loc = (LookupLocator) req;
LogUtil.logThrow(logger,
Level.INFO,
this.getClass(),
methodName,
logmsg,
new Object[] {
loc.getHost(),
new Integer(loc.getPort()),
rawUnicastDiscoveryConstraints
},
e);
}
} else {