mirror of
https://github.com/ratspeak/lrgp-rs
synced 2026-08-12 18:07:21 -04:00
52 lines
2.3 KiB
Rust
52 lines
2.3 KiB
Rust
//! Demonstrates the LRGP game session state machine.
|
|
|
|
use lrgp::constants::*;
|
|
use lrgp::session::{Session, SessionStateMachine};
|
|
|
|
fn main() {
|
|
// Create a new session (starts in "pending" state)
|
|
let mut session = Session::new("demo-session-001");
|
|
session.app_id = "ttt".to_string();
|
|
session.contact_hash = "abcdef0123456789".to_string();
|
|
session.initiator = "abcdef0123456789".to_string();
|
|
println!("Created session: status={}", session.status);
|
|
|
|
// Challenge on a pending session stays pending
|
|
let status = SessionStateMachine::apply_command(&mut session, CMD_CHALLENGE, false).unwrap();
|
|
println!("After challenge: status={status}");
|
|
|
|
// Accept transitions pending -> active
|
|
let status = SessionStateMachine::apply_command(&mut session, CMD_ACCEPT, false).unwrap();
|
|
println!("After accept: status={status}");
|
|
|
|
// Move keeps session active (non-terminal)
|
|
let status = SessionStateMachine::apply_command(&mut session, CMD_MOVE, false).unwrap();
|
|
println!("After move (non-terminal): status={status}");
|
|
|
|
// Another move, still active
|
|
let status = SessionStateMachine::apply_command(&mut session, CMD_MOVE, false).unwrap();
|
|
println!("After move (non-terminal): status={status}");
|
|
|
|
// Terminal move completes the session
|
|
let status = SessionStateMachine::apply_command(&mut session, CMD_MOVE, true).unwrap();
|
|
println!("After move (terminal): status={status}");
|
|
|
|
// Trying to move on a completed session fails
|
|
let result = SessionStateMachine::apply_command(&mut session, CMD_MOVE, false);
|
|
println!("Move on completed session: {result:?}");
|
|
|
|
// Demonstrate expiry
|
|
println!("\n--- Expiry demo ---");
|
|
let mut pending = Session::new("expiry-demo");
|
|
pending.last_action_at = 1000.0; // far in the past
|
|
let expired = SessionStateMachine::check_expiry(&mut pending, None, Some(1_000_000.0));
|
|
println!("Pending session expired: {expired} (status={})", pending.status);
|
|
|
|
// Demonstrate decline
|
|
println!("\n--- Decline demo ---");
|
|
let mut challenged = Session::new("decline-demo");
|
|
let status = SessionStateMachine::apply_command(&mut challenged, CMD_DECLINE, false).unwrap();
|
|
println!("After decline: status={status}");
|
|
|
|
println!("\nAll lifecycle transitions demonstrated.");
|
|
}
|