@Override
    public final void onPing() {
        if (pingState == PingState.SHUTDOWN) {
            return;
        }

        if (connectionIdleTimeNanos > 0 && keepAliveOnPing) {
            lastConnectionIdleTime = System.nanoTime();
        }

        if (pingIdleTimeNanos > 0) {
            firstPingIdleEvent = true;
            lastPingIdleTime = System.nanoTime();
        }
        pingState = PingState.IDLE;
        cancelFutures();
    }
An {@link AbstractKeepAliveHandler} that writes a PING when neither read nor write was performed for
the specified {@code pingIntervalMillis}, and closes the connection
when neither read nor write was performed within the given {@code idleTimeoutMillis}.
core/src/main/java/com/linecorp/armeria/internal/common/AbstractKeepAliveHandler.java