public async Task <WSFrame> SendFrame(WSFrame frame, CancellationToken cancellationToken) { try { await semaphore.WaitAsync(); var fragment = frame.Fragment; var frameHeader = new WSFrameHeader { Mask = true, Last = frame.Last, Code = frame.Code, Length = fragment.Length, }; Logger.Debug($"SendFrame"); await SendFrameHeader(frameHeader, cancellationToken); Logger.Debug($"SendFrame (header complete)", new { Header = frameHeader, }); SendPayload(fragment.GetSegment()); return(frame); } finally { semaphore.Release(); } }
public async Task SendFrame(WSFrame frame, CancellationToken cancellationToken = default) { using (await WaitForSendLock()) { await SendOperations.SendFrame(frame, cancellationToken); } }