Current situation:
When someone joins a multiplayer server, right now all the clients (including server) save the "current" gamestate and put it up for download to the new joining client (either P2P or direct download from server depending on the settings). The game freezes (and depending on the settings the users may or may not even see a notification/dialog at all: more on that in the sidenotes later on) while the new client is downloading the map, which can take a long (I've seen 10+ minutes) while if the map is big (30MB+) and the client has a slow connection. During this time no gameplay (not even looking around the map) is possible, only zooming is allowed. When the download is finished everyone syncs up and the game resumes.
In short:
- Player requests join
- All clients/server freeze
- Player downloads map
- Game resumes
In the new situation all the clients/server agree on the same state and save it. They then offer that state up for download to the new joining client, while also keeping track of/saving the heartbeats in the mean time. When the joining client has the whole state all the missed heartbeats are offered up as download until the client is in sync at which point he joins the game.
In short:
- Player requests join
- All clients/server agree on the same state, save it and keep track of the heartbeats in the mean time
- Player downloads mentioned state
- Player has the whole state, now downloads all missed heartbeats
- Once player is in sync he joins the game
Pros:
- Uninterrupted gameplay for players in a multiplayer server even if the joining player has problems joining (finally)
- Disfavors people with slow connections (joining takes longer since there's more to download)
- People with too slow connections won't be able to catch up with the heartbeats at all (but this seems like an advantage to me since those connections will be so bad that they will cause too much lagg anyway)
- More upload traffic on the server if a lot of people are trying to join and P2P is disabled (making joining impossible because the server's network isn't fast enough)