Refactor: move SupportedCapabilitiesMessage handling code out to a method

Return early
This commit is contained in:
chimp1984 2020-10-07 13:11:29 -05:00
parent 9821dd6271
commit 17974f3dcc
No known key found for this signature in database
GPG key ID: 9801B4EC591F90E3

View file

@ -786,37 +786,9 @@ public class Connection implements HasCapabilities, Runnable, MessageListener {
}
if (networkEnvelope instanceof SupportedCapabilitiesMessage) {
Capabilities capabilities = ((SupportedCapabilitiesMessage) networkEnvelope).getSupportedCapabilities();
if (capabilities != null) {
if (!this.capabilities.equals(capabilities)) {
this.capabilities.set(capabilities);
// Capabilities can be empty. We only check for mandatory if we get some capabilities.
if (!this.capabilities.isEmpty() && !Capabilities.hasMandatoryCapability(this.capabilities)) {
String senderNodeAddress = getPeersNodeAddressOptional().isPresent() ?
getPeersNodeAddressOptional().get().getFullAddress() :
networkEnvelope instanceof SendersNodeAddressMessage ?
((SendersNodeAddressMessage) networkEnvelope).getSenderNodeAddress().getFullAddress() :
"[unknown address]";
log.info("We close a connection because of " +
"CloseConnectionReason.MANDATORY_CAPABILITIES_NOT_SUPPORTED " +
"to node {}. Capabilities of old node: {}, " +
"networkEnvelope class name={}",
senderNodeAddress,
this.capabilities.prettyPrint(),
networkEnvelope.getClass().getSimpleName());
shutDown(CloseConnectionReason.MANDATORY_CAPABILITIES_NOT_SUPPORTED);
return;
}
capabilitiesListeners.forEach(weakListener -> {
SupportedCapabilitiesListener supportedCapabilitiesListener = weakListener.get();
if (supportedCapabilitiesListener != null) {
UserThread.execute(() -> supportedCapabilitiesListener.onChanged(capabilities));
}
});
}
boolean causedShutDown = handleSupportedCapabilitiesMessage(networkEnvelope);
if (causedShutDown) {
return;
}
}
@ -892,4 +864,52 @@ public class Connection implements HasCapabilities, Runnable, MessageListener {
handleException(t);
}
}
protected boolean handleSupportedCapabilitiesMessage(NetworkEnvelope networkEnvelope) {
Capabilities supportedCapabilities = ((SupportedCapabilitiesMessage) networkEnvelope).getSupportedCapabilities();
if (supportedCapabilities == null || supportedCapabilities.isEmpty()) {
return false;
}
if (this.capabilities.equals(supportedCapabilities)) {
return false;
}
if (!Capabilities.hasMandatoryCapability(supportedCapabilities)) {
log.info("We close a connection because of " +
"CloseConnectionReason.MANDATORY_CAPABILITIES_NOT_SUPPORTED " +
"to node {}. Capabilities of old node: {}, " +
"networkEnvelope class name={}",
getSenderNodeAddressAsString(networkEnvelope),
supportedCapabilities.prettyPrint(),
networkEnvelope.getClass().getSimpleName());
shutDown(CloseConnectionReason.MANDATORY_CAPABILITIES_NOT_SUPPORTED);
return true;
}
this.capabilities.set(supportedCapabilities);
capabilitiesListeners.forEach(weakListener -> {
SupportedCapabilitiesListener supportedCapabilitiesListener = weakListener.get();
if (supportedCapabilitiesListener != null) {
UserThread.execute(() -> supportedCapabilitiesListener.onChanged(supportedCapabilities));
}
});
return false;
}
@Nullable
private NodeAddress getSenderNodeAddress(NetworkEnvelope networkEnvelope) {
return getPeersNodeAddressOptional().isPresent() ?
getPeersNodeAddressOptional().get() :
networkEnvelope instanceof SendersNodeAddressMessage ?
((SendersNodeAddressMessage) networkEnvelope).getSenderNodeAddress() :
null;
}
private String getSenderNodeAddressAsString(NetworkEnvelope networkEnvelope) {
NodeAddress nodeAddress = getSenderNodeAddress(networkEnvelope);
return nodeAddress == null ? "null" : nodeAddress.getFullAddress();
}
}