diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2011-06-22 07:04:15 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2011-06-22 07:04:15 +0200 |
commit | ada8c1869c5b2b007e690e4c028fd20b34a41706 (patch) | |
tree | 894a27b7f4f7ae874c53882690c45805d5780a44 /src/jrummikub/control/network | |
parent | d2df76cae49bf31b28d422b5ddfbfb5b1e7651d0 (diff) | |
download | JRummikub-ada8c1869c5b2b007e690e4c028fd20b34a41706.tar JRummikub-ada8c1869c5b2b007e690e4c028fd20b34a41706.zip |
Add proper handling for lost server connections
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@581 72836036-5685-4462-b002-a69064685172
Diffstat (limited to 'src/jrummikub/control/network')
-rw-r--r-- | src/jrummikub/control/network/ConnectionControl.java | 33 | ||||
-rw-r--r-- | src/jrummikub/control/network/IConnectionControl.java | 2 | ||||
-rw-r--r-- | src/jrummikub/control/network/NetworkControl.java | 25 |
3 files changed, 59 insertions, 1 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) { diff --git a/src/jrummikub/control/network/IConnectionControl.java b/src/jrummikub/control/network/IConnectionControl.java index 9307ce0..f9f5edd 100644 --- a/src/jrummikub/control/network/IConnectionControl.java +++ b/src/jrummikub/control/network/IConnectionControl.java @@ -54,6 +54,8 @@ interface IConnectionControl { public IEvent1<String> getParticipantLeftEvent(); + public IEvent getConnectionLostEvent(); + public void offerGame(GameData data); public void withdrawGame(); diff --git a/src/jrummikub/control/network/NetworkControl.java b/src/jrummikub/control/network/NetworkControl.java index cd0f66f..5e38d1e 100644 --- a/src/jrummikub/control/network/NetworkControl.java +++ b/src/jrummikub/control/network/NetworkControl.java @@ -15,7 +15,6 @@ import jrummikub.util.IEvent; import jrummikub.util.IListener; import jrummikub.util.IListener1; import jrummikub.util.LoginData; -import jrummikub.view.IQuitWarningPanel.QuitMode; import jrummikub.view.IView; import jrummikub.view.IView.BottomPanelType; import jrummikub.view.LoginError; @@ -141,6 +140,23 @@ public class NetworkControl { } } })); + connections.add(connectionControl.getConnectionLostEvent().add( + new IListener() { + @Override + public void handle() { + abort(); + view.setBottomPanel(BottomPanelType.NETWORK_SERVER_CONNECTION_LOST_PANEL); + connections.add(view.getAcknowledgeConnectionLostEvent().add( + new IListener() { + @Override + public void handle() { + abort(); + view.setBottomPanel(BottomPanelType.START_GAME_PANEL); + backToLoginEvent.emit(); + } + })); + } + })); } private void addOfferUpdateListener() { @@ -342,6 +358,13 @@ public class NetworkControl { view.showGameListPanel(true); } }); + gameControl.getEndOfGameEvent().add(new IListener() { + @Override + public void handle() { + view.setBottomPanel(BottomPanelType.START_GAME_PANEL); + view.showGameListPanel(true); + } + }); gameControl.startGame(); } |