diff options
Diffstat (limited to 'src/jrummikub/control/network/ConnectionControl.java')
-rw-r--r-- | src/jrummikub/control/network/ConnectionControl.java | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/jrummikub/control/network/ConnectionControl.java b/src/jrummikub/control/network/ConnectionControl.java index 7491938..0de8776 100644 --- a/src/jrummikub/control/network/ConnectionControl.java +++ b/src/jrummikub/control/network/ConnectionControl.java @@ -25,6 +25,7 @@ import jrummikub.view.LoginError; import org.jivesoftware.smack.Connection; import org.jivesoftware.smack.ConnectionConfiguration; +import org.jivesoftware.smack.ConnectionListener; import org.jivesoftware.smack.PacketListener; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException; @@ -117,6 +118,7 @@ public class ConnectionControl implements IConnectionControl { private Event turnStartEvent = new Event(); private Event1<String> participantLeftEvent = new Event1<String>(); + private Event connectionLostEvent = new Event(); private GameData currentGame; @@ -262,6 +264,11 @@ public class ConnectionControl implements IConnectionControl { } @Override + public IEvent getConnectionLostEvent() { + return connectionLostEvent; + } + + @Override public void offerGame(GameData data) { offeredGame = data; currentGame = data; @@ -612,6 +619,7 @@ public class ConnectionControl implements IConnectionControl { config.setSendPresence(false); config.setRosterLoadedAtLogin(false); config.setCompressionEnabled(true); + config.setReconnectionAllowed(false); connection = new XMPPConnection(config); @@ -651,6 +659,7 @@ public class ConnectionControl implements IConnectionControl { private LoginError doConnect() { try { connection.connect(); + connection.addConnectionListener(new DisconnectListener()); return null; } catch (XMPPException e) { XMPPError xmppError = e.getXMPPError(); @@ -714,6 +723,30 @@ public class ConnectionControl implements IConnectionControl { return null; } + private class DisconnectListener implements ConnectionListener { + @Override + public void connectionClosed() { + emitLater(connectionLostEvent); + } + + @Override + public void connectionClosedOnError(Exception arg0) { + connectionClosed(); + } + + @Override + public void reconnectingIn(int arg0) { + } + + @Override + public void reconnectionFailed(Exception arg0) { + } + + @Override + public void reconnectionSuccessful() { + } + } + private class LeaveListener implements ParticipantStatusListener { @Override public void voiceRevoked(String arg0) { |