Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
 public async Task SendFrame(WSFrame frame, CancellationToken cancellationToken = default)
 {
     using (await WaitForSendLock()) {
         await SendOperations.SendFrame(frame, cancellationToken);
     }
 }