Skip to content

Commit 5a0f01c

Browse files
committed
* UI: improved connects and disconnects processing:
* fixed app freeze on broken server; * fixed app freeze on cancel button clicks; * fixed wrong still connected dialogs on app close or connect; * fixed missing wrong versions message; * improved error logs and messages.
1 parent 718bfb0 commit 5a0f01c

File tree

6 files changed

+149
-96
lines changed

6 files changed

+149
-96
lines changed

Mage.Client/src/main/java/mage/client/MageFrame.java

+9-5
Original file line numberDiff line numberDiff line change
@@ -580,8 +580,10 @@ public static void setActive(MagePane frame) {
580580
container.repaint();
581581
}
582582
} catch (InterruptedException e) {
583-
583+
LOGGER.fatal("MageFrame error", e);
584+
Thread.currentThread().interrupt();
584585
}
586+
585587
// Nothing to do
586588
if (activeFrame == frame) {
587589
return;
@@ -1403,22 +1405,24 @@ public void connected(final String message) {
14031405
}
14041406

14051407
@Override
1406-
public void disconnected(final boolean errorCall) {
1408+
public void disconnected(final boolean askToReconnect) {
14071409
if (SwingUtilities.isEventDispatchThread()) { // Returns true if the current thread is an AWT event dispatching thread.
1408-
LOGGER.info("DISCONNECTED (Event Dispatch Thread)");
1410+
// REMOTE task, e.g. connecting
1411+
LOGGER.info("Disconnected from remote task");
14091412
setConnectButtonText(NOT_CONNECTED_TEXT);
14101413
disableButtons();
14111414
hideGames();
14121415
hideTables();
14131416
} else {
1414-
LOGGER.info("DISCONNECTED (NO Event Dispatch Thread)");
1417+
// USER mode, e.g. user plays and got disconnect
1418+
LOGGER.info("Disconnected from user mode");
14151419
SwingUtilities.invokeLater(() -> {
14161420
setConnectButtonText(NOT_CONNECTED_TEXT);
14171421
disableButtons();
14181422
hideGames();
14191423
hideTables();
14201424
SessionHandler.disconnect(false);
1421-
if (errorCall) {
1425+
if (askToReconnect) {
14221426
UserRequestMessage message = new UserRequestMessage("Connection lost", "The connection to server was lost. Reconnect?");
14231427
message.setButton1("No", null);
14241428
message.setButton2("Yes", PlayerAction.CLIENT_RECONNECT);

Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java

+9-5
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,6 @@ private void btnConnectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FI
517517

518518
char[] input = new char[0];
519519
try {
520-
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
521520
connection = new Connection();
522521
connection.setHost(this.txtServer.getText().trim());
523522
connection.setPort(Integer.valueOf(this.txtPort.getText().trim()));
@@ -545,6 +544,12 @@ private void btnConnectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FI
545544

546545
}//GEN-LAST:event_btnConnectActionPerformed
547546

547+
private void setConnectButtonsState(boolean enable) {
548+
btnConnect.setEnabled(enable);
549+
btnRegister.setEnabled(enable);
550+
btnForgotPassword.setEnabled(enable);
551+
}
552+
548553
private class ConnectTask extends SwingWorker<Boolean, Void> {
549554

550555
private boolean result = false;
@@ -555,7 +560,7 @@ private class ConnectTask extends SwingWorker<Boolean, Void> {
555560
@Override
556561
protected Boolean doInBackground() throws Exception {
557562
lblStatus.setText("Connecting...");
558-
btnConnect.setEnabled(false);
563+
setConnectButtonsState(false);
559564
result = MageFrame.connect(connection);
560565
lastConnectError = SessionHandler.getLastConnectError();
561566
return result;
@@ -565,7 +570,6 @@ protected Boolean doInBackground() throws Exception {
565570
protected void done() {
566571
try {
567572
get(CONNECTION_TIMEOUT_MS, TimeUnit.MILLISECONDS);
568-
setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
569573
if (result) {
570574
lblStatus.setText("");
571575
connected();
@@ -578,13 +582,13 @@ protected void done() {
578582
} catch (ExecutionException ex) {
579583
logger.fatal("Update Players Task error", ex);
580584
} catch (CancellationException ex) {
581-
logger.info("Connect was canceled");
585+
logger.info("Connect: canceled");
582586
lblStatus.setText("Connect was canceled");
583587
} catch (TimeoutException ex) {
584588
logger.fatal("Connection timeout: ", ex);
585589
} finally {
586590
MageFrame.stopConnecting();
587-
btnConnect.setEnabled(true);
591+
setConnectButtonsState(true);
588592
}
589593
}
590594
}

Mage.Client/src/main/java/mage/client/dialog/MageDialog.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ public void setVisible(boolean value) {
109109
SwingUtilities.invokeAndWait(() -> stopModal());
110110
} catch (InterruptedException ex) {
111111
LOGGER.fatal("MageDialog error", ex);
112+
Thread.currentThread().interrupt();
112113
} catch (InvocationTargetException ex) {
113114
LOGGER.fatal("MageDialog error", ex);
114115
}
@@ -184,9 +185,10 @@ private synchronized void startModal() {
184185
wait();
185186
}
186187
}
187-
} catch (InterruptedException ignored) {
188+
} catch (InterruptedException e) {
189+
LOGGER.fatal("MageDialog error", e);
190+
Thread.currentThread().interrupt();
188191
}
189-
190192
}
191193

192194
private synchronized void stopModal() {

Mage.Client/src/test/java/mage/client/game/MultiConnectTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public void connected(String message) {
7171
}
7272

7373
@Override
74-
public void disconnected(boolean errorCall) {
74+
public void disconnected(boolean askToReconnect) {
7575
logger.info("disconnected");
7676
}
7777

0 commit comments

Comments
 (0)