Skip to content

On Method Nightly

The on method is the event-driven heart of LightVM, allowing you to hook into specific VM lifecycle events. By registering callbacks, you can react to internal state changes and execution milestones in real-time.

Using TypeScript

For TypeScript, the on method allows you to attach event listeners that execute whenever a registered event is triggered. This is ideal for logging, monitoring VM state changes, or triggering external logic when specific conditions are met.

ts
import { VMEvent } from 'lightvm';

vm.on(VMEvent.Tick, (data) => {
  console.log('Event: ', data.event);
  console.log('Payload: ', data.payload);
});
vm.run();
ts
import { VMEvent } from 'lightvm';

vm.on(VMEvent.Halt, (data) => {
  console.log('Event: ', data.event);
  console.log('Payload: ', data.payload);
});
vm.halt();
vm.run(); // will not be executed
ts
import { VMEvent } from 'lightvm';

vm.on(VMEvent.Start, (data) => {
  console.log('Event: ', data.event);
  console.log('Payload: ', data.payload);
});
vm.run();
ts
import { VMEvent } from 'lightvm';

vm.on(VMEvent.Finish, (data) => {
  console.log('Event: ', data.event);
  console.log('Payload: ', data.payload);
});
vm.run();

Using Rust

In Rust, the on method enables you to define event handlers that integrate directly with your system's logic. This allows for robust asynchronous notification when the VM enters a certain state, such as halting or encountering an error.

rust
use lightvm::vmevent::VmEvent;

vm.on(VmEvent::Tick, |data| {
  println!("Event: {:?}", data.event);
  println!("Payload: {:?}", data.payload);
});
vm.run(None);
rust
use lightvm::vmevent::VmEvent;

vm.on(VmEvent::Halt, |data| {
  println!("Event: {:?}", data.event);
  println!("Payload: {:?}", data.payload);
});
vm.halt();
vm.run(None); // will not be executed
rust
use lightvm::vmevent::VmEvent;

vm.on(VmEvent::Start, |data| {
  println!("Event: {:?}", data.event);
  println!("Payload: {:?}", data.payload);
});
vm.run(None);
rust
use lightvm::vmevent::VmEvent;

vm.on(VmEvent::Finish, |data| {
  println!("Event: {:?}", data.event);
  println!("Payload: {:?}", data.payload);
});
vm.run(None);

INFO

Capability Required: no specific capability

Owned Events: Tick, Halt, Panic, Start, and Finish