public virtual async Task ApplyEffectAsync(IMiEffect effect, CancellationToken cancellationToken = default) { using var buffer = MemoryPool <byte> .Shared.Rent(32); WriteApplyEffect(effect, buffer.Memory.Span); await _client.SendAsync(buffer.Memory.Slice(23), SocketFlags.None, cancellationToken).ConfigureAwait(false); }
private void WriteApplyEffect(IMiEffect effect, Span <byte> output) { Span <byte> buffer = stackalloc byte[23] { 0x80, 0x00, 0x00, 0x00, 0x11, // Length _bridgeId, 0x00, 0x00, ++_sequenceNumber, 0x00, 0x31, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, Zone, 0x00, // Command body 0x00 // Reserved for sum calculation }; effect.WriteBody(buffer[14..]);
public void ApplyEffect(IMiEffect effect) { effect.Execute(this); }