This branch takes work from the buffer skip attempt branch, and pulls it out, connecting all the dots in between.
We couldn't pause, skip the buffer, then resume to the last position as buffered positions were relative, so now:
Buffered movements are absolute (in steps)
Buffered movements or skipBuffer movements all go through the same actuallyMove() function
Event driven updates from cncserver are now possible through Socket.IO support, opening up the ability to stream both realtime updates of the actual pen position, and of the full buffer state as it's executed (though this may prove to be a bit more overhead than we'd like to manage as the full buffer is sent on every update)
Client-side buffers are now obsolete as everything can be managed through this incredibly robust and low latency buffer (see the RoboPaint stream PR for more details on what changes here)
As a bonus, this also adds direct node API push for setPen, allowing same object bypassing of API queries for very fast pushthrough for the many hundreds of positional updates required for smooth buffer fills.
This branch takes work from the buffer skip attempt branch, and pulls it out, connecting all the dots in between. We couldn't pause, skip the buffer, then resume to the last position as buffered positions were relative, so now:
actuallyMove()
functionAs a bonus, this also adds direct node API push for setPen, allowing same object bypassing of API queries for very fast pushthrough for the many hundreds of positional updates required for smooth buffer fills.