reckfellENGINE

SignalAwaiter

Одноразовое ожидание сигнала с результатом Variant[].

На этой странице
class SignalAwaiterReckfellSharp

Обычно используйте await receiver.ToSignal(source, signal). Ожидание подключается при создании SignalAwaiter и завершается при следующем сигнале. Если сигнал не придёт или владелец исчезнет, автоматическое завершение не гарантируется. Встроенного CancellationToken или тайм-аута у этого типа нет.

Пример ожидает ровно один строковый аргумент, копирует его в строку C# и освобождает полученные Variant. Вызовите ReadOnceAsync до испускания сигнала; receiver и emitter должны оставаться живыми. Пример не добавляет отмену.

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

public static class SignalTextExample
{
    // Call before the emitter sends its next signal. Both objects must stay alive.
    public static async Task<string> ReadOnceAsync(Entity receiver, Entity emitter, StringName signal)
    {
        Variant[] values = await receiver.ToSignal(emitter, signal);
        try
        {
            if (values.Length != 1 || values[0].VariantType != Variant.Type.String)
                throw new InvalidOperationException("Expected one string signal argument.");
            return values[0].AsString();
        }
        finally
        {
            foreach (Variant value in values)
                value.Dispose();
        }
    }
}

GetAwaiter возвращает тот же экземпляр. Для следующего события создайте новое ожидание через ToSignal. Не освобождайте один и тот же массив аргументов повторно при повторном чтении GetResult.

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

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

SignalAwaiterКонструктор
# SignalAwaiter
C#
public SignalAwaiter(ReckfellObject source, StringName signal, ReckfellObject target);

Сразу подключает одноразовое ожидание signal у source с привязкой к target. Все объекты должны быть живыми, а сигнал существовать. Сам сигнал не испускает. Для обычного игрового кода удобнее receiver.ToSignal(source, signal). Конструктор не возвращает Error; ошибка подключения не является обещанием завершения ожидания или исключения CLR.

Параметры
ИмяТипПо умолчанию
sourceReckfellObject—
signalStringName—
targetReckfellObject—
source

Живой объект, который должен испустить сигнал.

signal

Имя существующего сигнала source; аргументы результата определяются этим сигналом.

target

Живой объект-получатель, с которым связывается native callable. Это отдельная роль от source; ToSignal использует вызывающий объект как target. Не удаляйте его во время ожидания.

Свойства1

IsCompletedСвойство
# IsCompleted
C#
public bool IsCompleted { get; }

Изначально false; при доставке сигнала становится true до вызова продолжения. Означает получение сигнала, а не жизнеспособность source или target. Удаление владельца не обязано менять значение на true.

Методы3

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

Возвращает этот же экземпляр через IAwaiter<Variant[]>. Не создаёт новое подключение и не начинает повторное ожидание. При await уже завершённого экземпляра C# получает сохранённый результат.

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

Тот же объект, приведённый к IAwaiter<Variant[]>.

GetResultVariant[]
# GetResult
C#
public Variant[] GetResult();

Возвращает сохранённый массив аргументов без ожидания и без новой копии. До завершения в текущей реализации возвращает null, несмотря на не-nullable сигнатуру: вызывайте через await или только после IsCompleted. После сигнала массив содержит собственные копии Variant; освободите каждый элемент один раз после использования. Повторный GetResult возвращает тот же массив, а не независимые значения.

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

После доставки — аргументы сигнала в исходном порядке; для сигнала без аргументов — пустой массив. До доставки — null в текущей реализации.

OnCompletedvoid
# OnCompleted
C#
public void OnCompleted(Action continuation);

Сохраняет одно продолжение; повторный вызов заменяет предыдущее. При доставке сигнала сохранённое действие вызывается непосредственно из callback после установки результата и IsCompleted. Вызов после завершения сам по себе не запускает действие. Это часть протокола await: в обычном коде используйте await, а не ручную регистрацию. Не считайте метод диспетчером потока или подпиской на каждый сигнал.

Параметры
ИмяТипПо умолчанию
continuationAction—
continuation

Продолжение, вызываемое при завершении; не список независимых обработчиков.

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

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

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

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