Merge 421a1a704c51310d57f192e002b67325cf78c701 into 8ffb0625a1edcf0b3d1ec2498b15a31ec38ade3c

This commit is contained in:
cwd.systems | 0KN 2024-11-27 17:14:27 +06:00 committed by GitHub
commit 4b012a86bd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -14,31 +14,51 @@ public class PingTask implements Task {
private final Peer peer; private final Peer peer;
private final Long now; private final Long now;
private final String name; private String name; // Lazy initialization
public PingTask(Peer peer, Long now) { public PingTask(Peer peer, Long now) {
this.peer = peer; this.peer = peer;
this.now = now; this.now = now;
this.name = "PingTask::" + peer;
} }
@Override @Override
public String getName() { public String getName() {
if (name == null) {
name = "PingTask::" + peer;
}
return name; return name;
} }
@Override @Override
public void perform() throws InterruptedException { public void perform() throws InterruptedException {
PingMessage pingMessage = new PingMessage(); try {
Message message = peer.getResponse(pingMessage); // Create a PingMessage
PingMessage pingMessage = new PingMessage();
Message responseMessage = peer.getResponse(pingMessage);
if (message == null || message.getType() != MessageType.PING) { // Validate the response
LOGGER.debug("[{}] Didn't receive reply from {} for PING ID {}", if (responseMessage == null || responseMessage.getType() != MessageType.PING) {
peer.getPeerConnectionId(), peer, pingMessage.getId()); LOGGER.debug("[{}] No PING response received from {} for PING ID {}",
peer.disconnect("no ping received"); peer.getPeerConnectionId(), peer, pingMessage.getId());
return; peer.disconnect("No PING response received");
return;
}
// Calculate round-trip time and update peer
long currentTime = NTP.getTime();
if (currentTime == null) {
LOGGER.warn("NTP time unavailable during PING task for peer {}", peer);
peer.disconnect("NTP time unavailable");
return;
}
peer.setLastPing(currentTime - now);
LOGGER.debug("[{}] PING successful with {} (round-trip time: {} ms)",
peer.getPeerConnectionId(), peer, currentTime - now);
} catch (Exception e) {
LOGGER.error("Error during PING task for peer {}: {}", peer, e.getMessage(), e);
peer.disconnect("Error during PING task");
} }
peer.setLastPing(NTP.getTime() - now);
} }
} }