If I had written the ticket today:
Title: TurnManager should handle observer timeouts and lag more fault-tolerantly
Description:
Observers are often frowned upon because of the possibility of them delaying the game by
(1) network timeouts
(2) bad network latency
(3) rejoins
(4) insufficient simulation performance
The root for all four problems is the server-turnmanager waiting for the affected observer to compute the next turn before progressing with the simulation.
The severity of networking problems can be reduced by improving the UI (making the network warnings "kick" buttons) and improving the simulation performance.
But the task of this ticket is to establish "graceful degradation", meaning
to teach the NetServerTurnManager to progress the simulation in spite of one observerclient being affected by one of these four conditions.
The NetServerTurnManager can handle the four cases equally.
In CNetServerWorker::StartGame
we find
m_ServerTurnManager->InitialiseClient(session->GetHostID(), 0); TODO: only for non-observers
But because rejoin syncs might never finish and because we don't want observers commenting on different times of the game, the NetServerTurnManager
may not entirely disregard observers being too slow with the simulation / rejoin sync and have to wait for them to catch up only for a certain amount of time, for instance 8 simulation turns or a dynamically adjusted amount of time.