include "auth/auth.fbs"; include "control/control.fbs"; include "stream/stream.fbs"; include "mem/mem.fbs"; include "compacted.fbs"; namespace hmmmm; // ── Client → Server ────────────────────────────────────────────────────────── union ClientPayload { hmmmm.auth.AuthRequest, hmmmm.ctrl.CtrlClientMessage, hmmmm.stream.StreamClientMessage, hmmmm.mem.MemClientMessage, } // Every frame sent by the client is a ClientMessage. // nonce: client-chosen identifier echoed in the server response. // Use 0xFFFFFFFFFFFFFFFF for fire-and-forget messages (no reply expected). table ClientMessage { nonce: uint64; payload: ClientPayload; } // ── Server → Client ────────────────────────────────────────────────────────── union ServerPayload { hmmmm.auth.AuthResponse, hmmmm.ctrl.CtrlServerMessage, hmmmm.stream.StreamServerMessage, hmmmm.mem.MemServerMessage, CompactedMessage, } // Every frame sent by the server is a ServerMessage. // nonce: echoes the triggering ClientMessage nonce. // 0xFFFFFFFFFFFFFFFF for unsolicited notifications (state changes, stream pushes). table ServerMessage { nonce: uint64; payload: ServerPayload; } root_type ClientMessage;