* implement new transparent rect encoding
* implement a max frame hold time
---------
Co-authored-by: Lauri Kasanen <cand@gmx.com>
Co-authored-by: mattmcclaskey <matt@kasmweb.com>
* Handle the frame id in udp packets
* refactor udp message buffer, add frame_id and rect cnt
* refactor udp to work with new display.js
* additional debug metrics, clear frame buffer on transitions tcp/udp
* fix udp with display refactor, KASM-3541 cancelAnimationFrame
Co-authored-by: Lauri Kasanen <cand@gmx.com>
Co-authored-by: mattmcclaskey <matt@kasmweb.com>
* Major refactor of display.js queue to assume async rect processing in order to accommodate threaded decode or udp
* QOI lossless decoder on worker threads using WASM
* rfb.js class to provide frame_id and rect counts per frame
Co-authored-by: ryan.kuba <ryan.kuba@kasmweb.com>
Co-authored-by: matt <matt@kasmweb.com>
These are very pointless for the server to send, but not a violation of
the protocol so we need to be able to handle them. We've seen this
happen in real world scenarios a few times.
This is what the browser wants so it avoids having to spend time
converting everything. Unfortunately it usually means the server instead
needs to convert it for us, but we assume it has more power than we do.
We accidentally removed the code updating the data index in 8a189a6,
resulting in the decoder newer consuming any data. So the data would
be parsed as the next rect, causing weird errors.