feat: phase 10 — reconnection, encoding 10, disconnect button
Frontend reconnection: - WebSocket auto-reconnects with exponential backoff (1s → 30s) - Re-authenticates with OmniView to get fresh APPLET_ID on reconnect - Credentials stored in sessionStorage for automatic re-login - Status bar shows connection state and reconnect countdown - Disconnect button returns to login screen Encoding 10 (Raw with tile interleave): - codec/raw_tile.rs: decodes encoding 10 per ByteColorRFBRenderer.for() - Flag byte bit 0 selects plain raw vs 16x16 tile-interleaved data - Deinterleave handles edge tiles smaller than 16x16 - Wired into session dispatch - 2 unit tests 39 tests passing. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use std::io::{BufReader, BufWriter};
|
||||
use std::net::TcpStream;
|
||||
|
||||
use crate::codec::{hextile, tight};
|
||||
use crate::codec::{hextile, raw_tile, tight};
|
||||
use crate::framebuffer::Framebuffer;
|
||||
use crate::handshake::{self, Config, ServerInit};
|
||||
use crate::msg::{self, ServerMsg};
|
||||
@@ -200,7 +200,6 @@ impl ActiveSession {
|
||||
.copy_rect(src_x, src_y, hdr.x, hdr.y, hdr.w, hdr.h);
|
||||
}
|
||||
5 => {
|
||||
// Hextile
|
||||
hextile::decode_hextile(
|
||||
&mut self.reader,
|
||||
&mut self.framebuffer,
|
||||
@@ -222,6 +221,16 @@ impl ActiveSession {
|
||||
hdr.h,
|
||||
)?;
|
||||
}
|
||||
10 => {
|
||||
raw_tile::decode_raw_tile(
|
||||
&mut self.reader,
|
||||
&mut self.framebuffer,
|
||||
hdr.x,
|
||||
hdr.y,
|
||||
hdr.w,
|
||||
hdr.h,
|
||||
)?;
|
||||
}
|
||||
other => {
|
||||
return Err(SessionError::UnsupportedEncoding(other));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user