pub struct CommandEnvelope {
pub issuer: Issuer,
pub authority: Option<CommandAuthority>,
pub command: Command,
pub expected_time: Option<SimTime>,
}Fields§
§issuer: Issuer§command: Command§expected_time: Option<SimTime>Implementations§
Source§impl CommandEnvelope
impl CommandEnvelope
Sourcepub const fn new(issuer: Issuer, command: Command) -> CommandEnvelope
pub const fn new(issuer: Issuer, command: Command) -> CommandEnvelope
Examples found in repository?
examples/plugin.rs (lines 92-99)
88fn main() -> Result<(), CanwuError> {
89 let mut canwu = Canwu::demo(35)?;
90 let ids = Canwu::demo_ids();
91 canwu.register_plugin(&StancePlugin)?;
92 canwu.submit(CommandEnvelope::new(
93 Issuer::Actor(ids.commander),
94 Command::Plugin {
95 plugin: "example-stance".to_owned(),
96 command: "set_stance".to_owned(),
97 payload: json!({ "army": ids.army, "stance": "hold" }),
98 },
99 ))?;
100 Ok(())
101}More examples
examples/continuous_game_loop.rs (lines 267-274)
257 fn submit_player_command(&mut self) -> Result<(), CanwuError> {
258 let captured_at = self.presentation_time();
259 let due_at = if self.accumulated_sim_nanos == 0 {
260 self.authority.time()
261 } else {
262 self.authority
263 .time()
264 .checked_add(SIMULATION_QUANTUM)
265 .expect("the scripted command time must remain representable")
266 };
267 let envelope = CommandEnvelope::new(
268 Issuer::Actor(self.ids.commander),
269 Command::OrderMovement {
270 subject: EntityRef::Army(self.ids.army),
271 destination: self.ids.eastern_territory,
272 cargo: Vec::new(),
273 },
274 )
275 .at_time(due_at);
276 let request = CommandRequest::new(
277 CommandRequestId::new(1),
278 self.authority.revision(),
279 envelope,
280 );
281 let ingress = self.authority.enqueue_command(due_at, 0, request)?;
282
283 if self.verbose {
284 println!(
285 "INPUT: queued commander move as {:?}, captured_at={captured_at}, quantized_due_at={due_at}",
286 ingress.ingress_id,
287 );
288 }
289
290 // This drains ingress due at the current canonical time only. The
291 // mid-quantum command remains queued until normal accumulation reaches
292 // its quantized minute; future scheduled work is never jumped to.
293 let receipts = self.authority.advance_canonical(SimDuration::ZERO)?;
294 self.canonical_boundaries += receipts.len();
295 self.refresh_presentation_from_authority();
296 self.presentation.render(self.presentation_time());
297 if self.verbose {
298 self.print_frame(GameSpeed::X1);
299 }
300 self.report_new_events();
301 Ok(())
302 }Sourcepub const fn at_time(self, expected_time: SimTime) -> CommandEnvelope
pub const fn at_time(self, expected_time: SimTime) -> CommandEnvelope
Examples found in repository?
examples/continuous_game_loop.rs (line 275)
257 fn submit_player_command(&mut self) -> Result<(), CanwuError> {
258 let captured_at = self.presentation_time();
259 let due_at = if self.accumulated_sim_nanos == 0 {
260 self.authority.time()
261 } else {
262 self.authority
263 .time()
264 .checked_add(SIMULATION_QUANTUM)
265 .expect("the scripted command time must remain representable")
266 };
267 let envelope = CommandEnvelope::new(
268 Issuer::Actor(self.ids.commander),
269 Command::OrderMovement {
270 subject: EntityRef::Army(self.ids.army),
271 destination: self.ids.eastern_territory,
272 cargo: Vec::new(),
273 },
274 )
275 .at_time(due_at);
276 let request = CommandRequest::new(
277 CommandRequestId::new(1),
278 self.authority.revision(),
279 envelope,
280 );
281 let ingress = self.authority.enqueue_command(due_at, 0, request)?;
282
283 if self.verbose {
284 println!(
285 "INPUT: queued commander move as {:?}, captured_at={captured_at}, quantized_due_at={due_at}",
286 ingress.ingress_id,
287 );
288 }
289
290 // This drains ingress due at the current canonical time only. The
291 // mid-quantum command remains queued until normal accumulation reaches
292 // its quantized minute; future scheduled work is never jumped to.
293 let receipts = self.authority.advance_canonical(SimDuration::ZERO)?;
294 self.canonical_boundaries += receipts.len();
295 self.refresh_presentation_from_authority();
296 self.presentation.render(self.presentation_time());
297 if self.verbose {
298 self.print_frame(GameSpeed::X1);
299 }
300 self.report_new_events();
301 Ok(())
302 }Trait Implementations§
Source§impl Clone for CommandEnvelope
impl Clone for CommandEnvelope
Source§fn clone(&self) -> CommandEnvelope
fn clone(&self) -> CommandEnvelope
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for CommandEnvelope
impl Debug for CommandEnvelope
Source§impl<'de> Deserialize<'de> for CommandEnvelope
impl<'de> Deserialize<'de> for CommandEnvelope
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<CommandEnvelope, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<CommandEnvelope, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl PartialEq for CommandEnvelope
impl PartialEq for CommandEnvelope
Source§impl Serialize for CommandEnvelope
impl Serialize for CommandEnvelope
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Serialize this value into the given Serde serializer. Read more
impl StructuralPartialEq for CommandEnvelope
Auto Trait Implementations§
impl Freeze for CommandEnvelope
impl RefUnwindSafe for CommandEnvelope
impl Send for CommandEnvelope
impl Sync for CommandEnvelope
impl Unpin for CommandEnvelope
impl UnsafeUnpin for CommandEnvelope
impl UnwindSafe for CommandEnvelope
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