syntax = "proto3"; package lesavka; // smaller, fixed-size payloads -> less allocation and simpler decoding message KeyboardReport { bytes data = 1; } // exactly 8 bytes message MouseReport { bytes data = 1; } // exactly 4 bytes // ------------ video ------------ message MonitorRequest { uint32 id = 1; // 0/1 for now uint32 max_bitrate = 2; // kb/s – client hints, server may ignore } message VideoPacket { uint32 id = 1; // monitor id uint64 pts = 2; // monotonically increasing micro‑seconds bytes data = 3; // full H.264 access‑unit (length‑prefixed) } service Relay { rpc StreamKeyboard (stream KeyboardReport) returns (stream KeyboardReport); rpc StreamMouse (stream MouseReport) returns (stream MouseReport); // client requests one monitor, server pushes raw H.264 rpc CaptureVideo (MonitorRequest) returns (stream VideoPacket); }