pub enum AnalyticsEvent {
ClientConnected {
ts: String,
username: String,
platform: String,
version: Option<String>,
reconnected: bool,
engine_gate: String,
},
GameStarted {
ts: String,
game_id: String,
room_id: String,
format: GameFormat,
engine: EngineKind,
hosted: bool,
official: bool,
table_style: Option<String>,
starting_life: i32,
players: Vec<SeatInfo>,
},
GameEnded {
ts: String,
game_id: String,
room_id: String,
reason: GameEndReason,
duration_s: f64,
game_over: bool,
winner: Option<String>,
conceded: Vec<String>,
fatal_message: Option<String>,
reported: bool,
turns: Option<u32>,
},
TransportUsed {
ts: String,
room_id: String,
game_id: String,
host: String,
seats: Vec<SeatTransportReport>,
},
PlaneQuality {
ts: String,
room_id: Option<String>,
username: String,
peer: String,
plane: String,
outcome: String,
phase: String,
connect_ms: Option<u32>,
rtt_ms: Option<u32>,
relay_rtt_ms: Option<u32>,
candidate_pair: Option<String>,
},
EngineStats {Show 40 fields
ts: String,
room_id: Option<String>,
username: String,
report_id: String,
game_id: Option<String>,
engine: String,
client_version: String,
platform: String,
format: Option<String>,
seats: u32,
multiplayer: bool,
duration_s: u32,
end_reason: String,
decisions: u32,
turnaround_p50: u32,
turnaround_p90: u32,
turnaround_max: u32,
engine_p50: Option<u32>,
engine_p90: Option<u32>,
engine_max: Option<u32>,
engine_same_p50: Option<u32>,
engine_same_p90: Option<u32>,
engine_same_max: Option<u32>,
engine_cross_p50: Option<u32>,
engine_cross_p90: Option<u32>,
engine_cross_max: Option<u32>,
think_hidden: u32,
reply_wait_p50: Option<u32>,
reply_wait_p90: Option<u32>,
reply_wait_max: Option<u32>,
client_work_p50: Option<u32>,
client_work_p90: Option<u32>,
client_work_max: Option<u32>,
engine_bot_p50: Option<u32>,
engine_bot_p90: Option<u32>,
engine_bot_max: Option<u32>,
engine_rules_p50: Option<u32>,
engine_rules_p90: Option<u32>,
engine_rules_max: Option<u32>,
checkpoints: Option<EngineCheckpointStats>,
},
DeckSelected {
ts: String,
room_id: String,
username: String,
is_bot: bool,
deck_name: String,
commander: Option<String>,
cards: Vec<CardEntry>,
sideboard_count: usize,
},
SeatJoined {
ts: String,
room_id: String,
username: String,
is_bot: bool,
observer: bool,
},
SeatLeft {
ts: String,
room_id: String,
username: String,
},
}Variants§
ClientConnected
Fields
GameStarted
GameEnded
Fields
§
reason: GameEndReasonTransportUsed
Which seats left the relay’s data plane, as reported by the host.
PlaneQuality
One end’s account of one direct-plane attempt, whether or not it worked.
Fields
EngineStats
Fields
§
room_id: Option<String>The room the seat was in when the report landed, which at game over is often none: the report outlives the seat’s membership. Nothing downstream reads it, so it stays a breadcrumb rather than a key.
§
reply_wait_p50: Option<u32>turnaround cut at the first reply frame reaching the client:
server, wire and transfer on one side, parse, apply and render on
the other. Absent from clients that predate the cut.
§
engine_bot_p50: Option<u32>engine_* split by who owned the time: bot prompts on one side,
the rules engine on the other. Absent from an engine that does not
tag its windows.
§
checkpoints: Option<EngineCheckpointStats>DeckSelected
Fields
SeatJoined
SeatLeft
Trait Implementations§
Source§impl Debug for AnalyticsEvent
impl Debug for AnalyticsEvent
Auto Trait Implementations§
impl Freeze for AnalyticsEvent
impl RefUnwindSafe for AnalyticsEvent
impl Send for AnalyticsEvent
impl Sync for AnalyticsEvent
impl Unpin for AnalyticsEvent
impl UnsafeUnpin for AnalyticsEvent
impl UnwindSafe for AnalyticsEvent
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more