reckfellENGINE

Signal

Пара владельца и имени сигнала с поддержкой await в C#.

На этой странице
struct SignalReckfellSharpНаследует ValueType

Структура C#, хранящая объект-владелец Owner и имя сигнала Name. Конструктор Signal(owner, name) сохраняет эту пару; он не создаёт объявление сигнала в объекте. Signal реализует протокол await через GetAwaiter(): ожидание завершается при соответствующем сигнале владельца.

Например, сигнал ProcessFrame принадлежит EntityTree. Для ожидания используются живой владелец и точное имя из EntityTree.SignalName.ProcessFrame; default(Signal) с пустыми ссылками не является готовым объектом ожидания.

Signal не преобразуется в bool в C#. Наличие Owner само по себе не доказывает, что сигнал существует или уже был испущен. Для обработчиков, доступных как C#-события, применяйте обычную подписку на события.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

SignalКонструктор
# Signal
C#
public Signal(ReckfellObject owner, StringName name);

Сохраняет owner и оболочку name. Не объявляет новый сигнал, не подписывается на него и не запоминает уже произошедшие срабатывания. Для ожидания нужен живой владелец и существующий сигнал; имя можно проверить через owner.HasSignal(name). Сохраняется та же оболочка StringName: не освобождайте её до использования Signal.

Параметры
ИмяТипПо умолчанию
ownerReckfellObject—
nameStringName—
owner

Живой объект с нужным сигналом; Signal не владеет его нативным временем жизни.

name

Точное имя существующего сигнала, предпочтительно из SignalName. Новое объявление сигнала здесь не создаётся.

Свойства2

NameСвойство
# Name
C#
public StringName Name { get; }

Возвращает сохранённую оболочку имени сигнала. Это не проверка существования сигнала и не сведения о последнем срабатывании. У default(Signal) ссылка null. Имя заимствовано; не вызывайте Dispose на общей SignalName-константе или оболочке, пока она используется.

OwnerСвойство
# Owner
C#
public ReckfellObject Owner { get; }

Возвращает сохранённую ссылку на владельца. Ссылка не гарантирует, что нативный объект ещё существует; при необходимости проверяйте ReckfellObject.IsInstanceValid. У default(Signal) ссылка null. Чтение не подписывает на сигнал и не передаёт владение объектом.

Методы1

GetAwaiterIAwaiter<Variant[]>
# GetAwaiter
C#
public IAwaiter<Variant[]> GetAwaiter();

Создаёт новое ожидание и сразу подключает одноразовый обработчик к следующему срабатыванию сигнала. C# вызывает этот метод для await signal. Повторный GetAwaiter создаёт отдельное ожидание; уже произошедший сигнал не воспроизводится.

Результат — массив копий Variant-аргументов в порядке объявления сигнала. После чтения освободите элементы; у сигнала без аргументов массив пустой. WaitNextProcess в примере использует встроенный ProcessFrame и освобождает результат.

C#
using System.Threading.Tasks;
using Reckfell;

public static class CallableSignalExamples
{
    public static int Twice(int value)
    {
        var callback = Callable.From<int, int>(static number => number * 2);
        using var argument = Variant.From(value);
        using var result = callback.Call(argument);
        return result.AsInt32();
    }

    public static void SetLabelLater(Label label, string text)
    {
        var callback = Callable.From<string>(value =>
        {
            if (ReckfellObject.IsInstanceValid(label)) label.Text = value;
        });
        using var argument = Variant.From(text);
        callback.CallDeferred(argument);
    }

    public static async Task WaitNextProcess(EntityTree tree)
    {
        Variant[] arguments = await new Signal(tree, EntityTree.SignalName.ProcessFrame);
        foreach (var argument in arguments) argument.Dispose();
    }
}

Нет параметра CancellationToken и автоматического завершения при удалении owner: такое ожидание может остаться незавершённым. Не размещайте обязательное освобождение ресурсов только после этого await. Для повторяемого обработчика с управляемой отпиской используйте обычные C#-события += и -=; см. сигналы C#.

Возвращает IAwaiter<Variant[]>

Новое ожидание следующего срабатывания с результатом Variant[]. Не подтверждает успешное подключение к неверному имени и не предоставляет автоматической отмены.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.