Network upgrade and new reconnection mode (#11527)

Network upgrade and new reconnection mode:
* users can disconnect or close app without game progress loose now;
* disconnect dialog will show active tables stats and additional options;
* all active tables will be restored on reconnect (tables, tourneys, games, drafts, sideboarding, constructing);
* user must use same server and username on next connection;
* there are few minutes for reconnect until server kick off a disconnected player from all player's tables (concede/loose);
* now you can safety reconnect after IP change (after proxy/vpn/wifi/router restart);

Other improvements and fixes:
* gui: main menu - improved switch panel button, added stats about current tables/panels;
* gui: improved data sync and updates (fixes many use cases with empty battlefield, not started games/drafts/tourneys, not updatable drafts, etc);
* gui: improved stability on game updates (fixes some random errors related to wrong threads);
* server: fixed miss messages about player's disconnection problems for other players in the chat;
* refactor: simplified and improved connection and network related code, deleted outdated code, added docs;
* tests: improved load test to support lands only set for more stable performance/network testing (set TEST_AI_RANDOM_DECK_SETS = PELP and run test_TwoAIPlayGame_Multiple);
This commit is contained in:
Oleg Agafonov 2023-12-07 19:56:52 +03:00 committed by GitHub
parent 7f0558ff3c
commit 960e896903
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
71 changed files with 1274 additions and 802 deletions

View file

@ -1,12 +1,13 @@
package mage.interfaces.callback;
/**
* Network: client to process income server commands
*
* @author BetaSteward_at_googlemail.com
*/
public interface CallbackClient {
void processCallback(ClientCallback callback);
void onNewConnection();
void onCallback(ClientCallback callback);
}

View file

@ -2,12 +2,14 @@ package mage.interfaces.callback;
import mage.remote.traffic.ZippedObject;
import mage.utils.CompressUtil;
import mage.utils.ThreadUtils;
import mage.util.ThreadUtils;
import java.io.Serializable;
import java.util.UUID;
/**
* Network: server's event to proccess on client side
*
* @author BetaSteward_at_googlemail.com
*/
public class ClientCallback implements Serializable {

View file

@ -1,7 +1,7 @@
package mage.interfaces.callback;
/**
* Server's commands to process on client side. Commands can come in un-synced state due bad/slow network
* Network: server's commands to process on client side. Commands can come in un-synced state due bad/slow network
* <p>
* Can be:
* - critical events (messages, game events, choose dialogs, etc)

View file

@ -1,7 +1,7 @@
package mage.interfaces.callback;
/**
* Server event type for processing on the client
* Network: server event type for processing on the client
*
* @author JayDi85
*/