Trait netsblox_vm::runtime::System
source · pub trait System<C: CustomTypes<Self>>: 'static + Sized {
type RequestKey: 'static + Key<Result<C::Intermediate, String>>;
type CommandKey: 'static + Key<Result<(), String>>;
type ExternReplyKey: 'static;
type InternReplyKey: 'static + Clone;
// Required methods
fn rand<T: SampleUniform, R: SampleRange<T>>(&self, range: R) -> T;
fn time(&self) -> SysTime;
fn perform_request<'gc>(
&self,
mc: &Mutation<'gc>,
request: Request<'gc, C, Self>,
entity: &mut Entity<'gc, C, Self>
) -> Result<MaybeAsync<Result<Value<'gc, C, Self>, String>, Self::RequestKey>, ErrorCause<C, Self>>;
fn poll_request<'gc>(
&self,
mc: &Mutation<'gc>,
key: &Self::RequestKey,
entity: &mut Entity<'gc, C, Self>
) -> Result<AsyncResult<Result<Value<'gc, C, Self>, String>>, ErrorCause<C, Self>>;
fn perform_command<'gc>(
&self,
mc: &Mutation<'gc>,
command: Command<'gc, '_, C, Self>,
entity: &mut Entity<'gc, C, Self>
) -> Result<MaybeAsync<Result<(), String>, Self::CommandKey>, ErrorCause<C, Self>>;
fn poll_command<'gc>(
&self,
mc: &Mutation<'gc>,
key: &Self::CommandKey,
entity: &mut Entity<'gc, C, Self>
) -> Result<AsyncResult<Result<(), String>>, ErrorCause<C, Self>>;
fn send_message(
&self,
msg_type: String,
values: Vec<(String, Json)>,
targets: Vec<String>,
expect_reply: bool
) -> Result<Option<Self::ExternReplyKey>, ErrorCause<C, Self>>;
fn poll_reply(
&self,
key: &Self::ExternReplyKey
) -> AsyncResult<Option<Json>>;
fn send_reply(
&self,
key: Self::InternReplyKey,
value: Json
) -> Result<(), ErrorCause<C, Self>>;
fn receive_message(&self) -> Option<IncomingMessage<C, Self>>;
}Expand description
Represents all the features of an implementing system.
This type encodes any features that cannot be performed without platform-specific resources.
When implementing System for some type, you may prefer to not support one or more features.
This can be accomplished by returning the ErrorCause::NotSupported variant for the relevant Feature.
Required Associated Types§
sourcetype RequestKey: 'static + Key<Result<C::Intermediate, String>>
type RequestKey: 'static + Key<Result<C::Intermediate, String>>
Key type used to await the result of an asynchronous request.
sourcetype CommandKey: 'static + Key<Result<(), String>>
type CommandKey: 'static + Key<Result<(), String>>
Key type used to await the completion of an asynchronous command.
sourcetype ExternReplyKey: 'static
type ExternReplyKey: 'static
Key type used to await the result of a “send message and wait” block (response from target).
sourcetype InternReplyKey: 'static + Clone
type InternReplyKey: 'static + Clone
Key type used to reply to a message that was sent to this client with the expectation of receiving a response.
This type is required to be Clone because there can be multiple message handlers for the same message type.
Required Methods§
sourcefn rand<T: SampleUniform, R: SampleRange<T>>(&self, range: R) -> T
fn rand<T: SampleUniform, R: SampleRange<T>>(&self, range: R) -> T
Gets a random value sampled from the given range, which is assumed to be non-empty.
The input for this generic function is such that it is compatible with rand::Rng::gen_range,
which makes it possible to implement this function with any random provider under the rand crate standard.
sourcefn perform_request<'gc>(
&self,
mc: &Mutation<'gc>,
request: Request<'gc, C, Self>,
entity: &mut Entity<'gc, C, Self>
) -> Result<MaybeAsync<Result<Value<'gc, C, Self>, String>, Self::RequestKey>, ErrorCause<C, Self>>
fn perform_request<'gc>( &self, mc: &Mutation<'gc>, request: Request<'gc, C, Self>, entity: &mut Entity<'gc, C, Self> ) -> Result<MaybeAsync<Result<Value<'gc, C, Self>, String>, Self::RequestKey>, ErrorCause<C, Self>>
Performs a general request which returns a value to the system.
Ideally, this function should be non-blocking, and the requestor will await the result asynchronously.
The Entity that made the request is provided for context.
sourcefn poll_request<'gc>(
&self,
mc: &Mutation<'gc>,
key: &Self::RequestKey,
entity: &mut Entity<'gc, C, Self>
) -> Result<AsyncResult<Result<Value<'gc, C, Self>, String>>, ErrorCause<C, Self>>
fn poll_request<'gc>( &self, mc: &Mutation<'gc>, key: &Self::RequestKey, entity: &mut Entity<'gc, C, Self> ) -> Result<AsyncResult<Result<Value<'gc, C, Self>, String>>, ErrorCause<C, Self>>
Poll for the completion of an asynchronous request.
The Entity that made the request is provided for context.
sourcefn perform_command<'gc>(
&self,
mc: &Mutation<'gc>,
command: Command<'gc, '_, C, Self>,
entity: &mut Entity<'gc, C, Self>
) -> Result<MaybeAsync<Result<(), String>, Self::CommandKey>, ErrorCause<C, Self>>
fn perform_command<'gc>( &self, mc: &Mutation<'gc>, command: Command<'gc, '_, C, Self>, entity: &mut Entity<'gc, C, Self> ) -> Result<MaybeAsync<Result<(), String>, Self::CommandKey>, ErrorCause<C, Self>>
Performs a general command which does not return a value to the system.
Ideally, this function should be non-blocking, and the commander will await the task’s completion asynchronously.
The Entity that issued the command is provided for context.
sourcefn poll_command<'gc>(
&self,
mc: &Mutation<'gc>,
key: &Self::CommandKey,
entity: &mut Entity<'gc, C, Self>
) -> Result<AsyncResult<Result<(), String>>, ErrorCause<C, Self>>
fn poll_command<'gc>( &self, mc: &Mutation<'gc>, key: &Self::CommandKey, entity: &mut Entity<'gc, C, Self> ) -> Result<AsyncResult<Result<(), String>>, ErrorCause<C, Self>>
Poll for the completion of an asynchronous command.
The Entity that issued the command is provided for context.
sourcefn send_message(
&self,
msg_type: String,
values: Vec<(String, Json)>,
targets: Vec<String>,
expect_reply: bool
) -> Result<Option<Self::ExternReplyKey>, ErrorCause<C, Self>>
fn send_message( &self, msg_type: String, values: Vec<(String, Json)>, targets: Vec<String>, expect_reply: bool ) -> Result<Option<Self::ExternReplyKey>, ErrorCause<C, Self>>
Sends a message containing a set of named values to each of the specified targets.
The expect_reply value controls whether or not to use a reply mechanism to asynchronously receive a response from the target(s).
In the case that there are multiple targets, only the first reply (if any) should be used.
sourcefn poll_reply(&self, key: &Self::ExternReplyKey) -> AsyncResult<Option<Json>>
fn poll_reply(&self, key: &Self::ExternReplyKey) -> AsyncResult<Option<Json>>
Polls for a response from a client initiated by System::send_message.
If the client responds, a value of [Some(x)] is returned.
The system may elect to impose a timeout for reply results, in which case None is returned instead.
sourcefn send_reply(
&self,
key: Self::InternReplyKey,
value: Json
) -> Result<(), ErrorCause<C, Self>>
fn send_reply( &self, key: Self::InternReplyKey, value: Json ) -> Result<(), ErrorCause<C, Self>>
Sends a reply to the sender of a blocking message this client received.
sourcefn receive_message(&self) -> Option<IncomingMessage<C, Self>>
fn receive_message(&self) -> Option<IncomingMessage<C, Self>>
Attempts to receive a message from the message buffer.
This operation is always non-blocking and returns None if there are no messages in the buffer.
If a message is received, a tuple of form (msg_type, values, reply_key) is returned.