COROIO: NNet::NActors::TActorContext Class Reference
COROIO
Loading...
Searching...
No Matches
NNet::NActors::TActorContext Class Reference

Context object providing actor communication and scheduling capabilities. More...

#include <actor.hpp>

Inheritance diagram for NNet::NActors::TActorContext:
NNet::NActors::TMockActorContext

Classes

struct  TAsync
 Helper class for managing asynchronous operations in actors. More...

Public Types

using TPtr = std::unique_ptr<TActorContext>

Public Member Functions

TActorId Sender () const
 Get the sender of the current message.
TActorId Self () const
 Get this actor's ID.
void Send (TActorId to, TMessageId messageId, TBlob blob)
 Send a message to another actor.
void Forward (TActorId to, TMessageId messageId, TBlob blob)
 Forward a message to another actor (preserves original sender).
template<typename T, typename... Args>
void Send (TActorId to, Args &&... args)
 Send a typed message to another actor (non-blocking).
template<typename T, typename... Args>
void Forward (TActorId to, Args &&... args)
 Forward a typed message to another actor, preserving the original sender.
void SendAs (TActorId from, TActorId to, TMessageId messageId, TBlob blob)
 Send a message with an explicitly specified sender.
template<typename T, typename... Args>
void SendAs (TActorId from, TActorId to, Args &&... args)
 Send a typed message with an explicitly specified sender.
TEvent Schedule (TTime when, TActorId sender, TActorId recipient, TMessageId messageId, TBlob blob)
 Schedule a message to be delivered at a specific time.
template<typename T, typename... Args>
TEvent Schedule (TTime when, TActorId sender, TActorId recipient, Args &&... args)
 Schedule a typed message to be delivered at a specific time.
void Cancel (TEvent event)
 Cancel a previously scheduled message.
TActorId Register (std::unique_ptr< IActor > actor)
 Registers a new actor in the same actor system.
TFuture< void > Sleep (TTime until)
 Suspend the current handler until a specific time.
template<typename Rep, typename Period>
TFuture< void > Sleep (std::chrono::duration< Rep, Period > duration)
 Suspend the current handler for a duration.
template<typename T, typename TQuestion>
TFuture< T > Ask (TActorId recipient, TQuestion &&question)
 Send a request and suspend until a reply of type T arrives.
TAsync StartAsync ()
 Start an asynchronous operation context.

Static Public Member Functions

static void * operator new (size_t)=delete
static void * operator new (size_t size, TActorSystem *actorSystem)
static void operator delete (void *ptr)

Friends

class TActorSystem
class TMockActorContext

Detailed Description

Context object providing actor communication and scheduling capabilities.

TActorContext is passed to actors during message dispatch. It provides methods for sending messages, scheduling future messages, sleeping, and performing request-response patterns.

The context is valid only for the duration of the Receive / CoReceive call chain. Capture ctx->Sender() / ctx->Self() by value if you need them after the first co_await.

Note
Sleep, Ask, and any coroutine-based methods require co_await and are only meaningful inside ICoroActor::CoReceive or an async TBehavior::Receive (one returning TFuture<void>).

Member Function Documentation

◆ Ask()

template<typename T, typename TQuestion>
TFuture< T > NNet::NActors::TActorContext::Ask ( TActorId recipient,
TQuestion && question )
inline

Send a request and suspend until a reply of type T arrives.

Sends question to recipient and returns a future that resolves to the first reply of type T sent back to this actor. Must be co_await-ed inside ICoroActor::CoReceive or an async TBehavior::Receive.

auto reply = co_await ctx->Ask<Pong>(pingActor, Ping{});
Template Parameters
TExpected response message type
TQuestionQuestion message type
Parameters
recipientActor to send the question to
questionMessage forwarded to the recipient
Returns
Awaitable future resolving to T when the reply arrives

◆ Cancel()

void NNet::NActors::TActorContext::Cancel ( TEvent event)

Cancel a previously scheduled message.

Parameters
eventEvent handle returned by Schedule()

◆ Forward() [1/2]

template<typename T, typename... Args>
void NNet::NActors::TActorContext::Forward ( TActorId to,
Args &&... args )
inline

Forward a typed message to another actor, preserving the original sender.

Like Send<T>, but the recipient sees ctx->Sender() equal to the sender of the current message rather than this actor's ID. Useful for routing/proxy actors that should not appear in the reply chain.

Template Parameters
TMessage type; must have a static TMessageId MessageId member
Parameters
toRecipient actor ID
argsConstructor arguments forwarded to T

◆ Forward() [2/2]

void NNet::NActors::TActorContext::Forward ( TActorId to,
TMessageId messageId,
TBlob blob )

Forward a message to another actor (preserves original sender).

Parameters
toRecipient actor ID
messageIdMessage type identifier
blobSerialized message data

◆ Register()

TActorId NNet::NActors::TActorContext::Register ( std::unique_ptr< IActor > actor)

Registers a new actor in the same actor system.

Parameters
actorActor to register (ownership transferred)
Returns
ID of the new actor; safe to Send to immediately

◆ Schedule() [1/2]

template<typename T, typename... Args>
TEvent NNet::NActors::TActorContext::Schedule ( TTime when,
TActorId sender,
TActorId recipient,
Args &&... args )
inline

Schedule a typed message to be delivered at a specific time.

Template Parameters
TMessage type that has MessageId static member
Parameters
whenTime when the message should be delivered
senderSender actor ID for the scheduled message
recipientRecipient actor ID
argsargs passed to the Message constructor
Returns
Event handle that can be used to cancel the scheduled message

◆ Schedule() [2/2]

TEvent NNet::NActors::TActorContext::Schedule ( TTime when,
TActorId sender,
TActorId recipient,
TMessageId messageId,
TBlob blob )

Schedule a message to be delivered at a specific time.

Parameters
whenTime when the message should be delivered
senderSender actor ID for the scheduled message
recipientRecipient actor ID
messageIdMessage type identifier
blobSerialized message data
Returns
Event handle that can be used to cancel the scheduled message

◆ Send() [1/2]

template<typename T, typename... Args>
void NNet::NActors::TActorContext::Send ( TActorId to,
Args &&... args )
inline

Send a typed message to another actor (non-blocking).

Constructs a T in-place from args and enqueues it to the recipient. Returns immediately; delivery is deferred to the next event-loop iteration.

Template Parameters
TMessage type; must have a static TMessageId MessageId member
Parameters
toRecipient actor ID
argsConstructor arguments forwarded to T
ctx->Send<Pong>(ctx->Sender(), 42); // Pong{42} delivered to sender

◆ Send() [2/2]

void NNet::NActors::TActorContext::Send ( TActorId to,
TMessageId messageId,
TBlob blob )

Send a message to another actor.

Parameters
toRecipient actor ID
messageIdMessage type identifier
blobSerialized message data

◆ SendAs() [1/2]

template<typename T, typename... Args>
void NNet::NActors::TActorContext::SendAs ( TActorId from,
TActorId to,
Args &&... args )
inline

Send a typed message with an explicitly specified sender.

Like Send<T>, but the recipient sees ctx->Sender() equal to from.

Template Parameters
TMessage type; must have a static TMessageId MessageId member
Parameters
fromActor ID that the recipient will see as ctx->Sender()
toRecipient actor ID
argsConstructor arguments forwarded to T

◆ SendAs() [2/2]

void NNet::NActors::TActorContext::SendAs ( TActorId from,
TActorId to,
TMessageId messageId,
TBlob blob )

Send a message with an explicitly specified sender.

Parameters
fromActor ID that the recipient will see as ctx->Sender()
toRecipient actor ID
messageIdMessage type identifier
blobSerialized message data

◆ Sleep() [1/2]

template<typename Rep, typename Period>
TFuture< void > NNet::NActors::TActorContext::Sleep ( std::chrono::duration< Rep, Period > duration)
inline

Suspend the current handler for a duration.

Convenience overload for relative delays. Must be co_await-ed.

co_await ctx->Sleep(std::chrono::seconds(5));
Template Parameters
RepDuration representation type
PeriodDuration period type
Parameters
durationHow long to sleep
Returns
Awaitable future that resumes after duration

◆ Sleep() [2/2]

TFuture< void > NNet::NActors::TActorContext::Sleep ( TTime until)
inline

Suspend the current handler until a specific time.

Must be co_await-ed inside ICoroActor::CoReceive or an async TBehavior::Receive. The actor system continues processing other actors while this handler is suspended.

Parameters
untilAbsolute time point to wake up at
Returns
Awaitable future that resumes at until

◆ StartAsync()

TActorContext::TAsync NNet::NActors::TActorContext::StartAsync ( )

Start an asynchronous operation context.

Returns
TAsync helper for managing the async operation

The documentation for this class was generated from the following files: