48 lines
1.4 KiB
Rust
48 lines
1.4 KiB
Rust
use cvm12_rs::qmp;
|
|
|
|
use tokio::net::UnixStream;
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
|
|
let subscriber = tracing_subscriber::FmtSubscriber::builder()
|
|
.with_max_level(tracing::Level::TRACE)
|
|
.finish();
|
|
|
|
tracing::subscriber::set_global_default(subscriber).expect("You Banned");
|
|
|
|
|
|
// Create a stream to connect
|
|
let stream = UnixStream::connect("/home/lily/vms/xpiss/qmp.sock")
|
|
.await
|
|
.expect("Could not connect");
|
|
|
|
|
|
let client = qmp::QmpClient::new(stream);
|
|
|
|
// Handshake QMP
|
|
client.handshake().await.expect("Could not handshake QMP");
|
|
|
|
println!("Connected to QMP server");
|
|
|
|
|
|
println!("res {}", client.execute_hmp("info block".into()).await.expect("this shouldn't fail"));
|
|
|
|
// let's try to get all STOP events from QMP now.
|
|
let mut rx = client.subscribe_to_event("STOP".into()).await.unwrap();
|
|
|
|
// If this worked, then now we can recieve all the events.
|
|
// This code here allows running a VM with the -no-shutdown option,
|
|
// automatially resetting it on shutdown.
|
|
while let Some(message) = rx.recv().await {
|
|
println!("Got stop event! {:?}", message);
|
|
|
|
let res1 = client.execute("system_reset".into(), None).await.expect("FUCK");
|
|
let res2 = client.execute("cont".into(), None).await.expect("FUCK");
|
|
|
|
println!("Result of running: {:?}, {:?}", res1, res2);
|
|
}
|
|
|
|
|
|
//println!("Hello, world!");
|
|
}
|