I was inspecting the PingManager code and I saw that the pingFailedListeners are notified many times (until 4 times) when the ping fails:
the pingServerRunnable.run() tries to ping the server three times. If it fails in the all three times, then it notifies the pingFailedListeners after all. However, inside each try (pingMyServer()), it also notifies the pingFailedListeners if the ping fails.
I think that inside pingServerRunnable.run() the pingMyServer() method should be called so that it doesn’t notify the pingFailedListeners (may be passing a boolean parameter to pingMyServer?).