Closed
Description
The renderer goes in a “buffering” mode when the client disconnects and spits it back out once it reconnects. In the most common case where the client has a transient network failure, this is what it would look like:
Connection
| Send diff 1
| Send diff 2
| Send diff 3
Disconnected (client network error)
| Send diff 4
| Send diff 5
SignalR OnDisconnected is executed
| Buffer diff 6
Client reconnected
| Send diff 6
| Send diff 7
SignalR \ Kestrel do not complain if a websocket send failed due to a client error. Consequently, there will be a gap where the server thinks it successfully sent the diffs to the client, but it ended up in the ether.
The fix for this will be that we're going to queue the render batches on the server, and hold onto them until the client can ACK
each one.