If we don't receive pongs from the server within 5 minutes we'll disconnect the socket (will attempt to reconnect), pongs should arrive every 1 minute.
When reconnecting (either because the above reason or an unexpected error), it will try to connect 5 times and then gives up.
Upon giving up it will prompt a reconnection message on the UI, which allows the user to reconnect.
Big refactor but it should be better!