Пример #1
0
        private async Task TransmitAsync(CancellationToken cancellationToken)
        {
            while (!cancellationToken.IsCancellationRequested)
            {
                _txEvent.Wait(cancellationToken);
                _txEvent.Reset();

                NanoMessage nanoMessage;
                while (_txQueue.TryDequeue(out nanoMessage))
                {
                    var nanoMessageBatch = new NanoMessageBatch();
                    nanoMessageBatch.NanoMessages.Add(nanoMessage);

                    var segments = nanoMessageBatch.Serialize().ToArraySegments(_bufferSize);

                    var tx = 0;
                    for (var i = 0; i < segments.Count; i++)
                    {
                        var segment = segments[i];
                        await
                        _webSocket.SendAsync(segment, WebSocketMessageType.Binary, i == segments.Count - 1,
                                             cancellationToken).ConfigureAwait(false);

                        tx += segment.Count;
                    }

                    Trace.TraceEvent(TraceEventType.Verbose, 1000, () => "Tx {0} bytes", tx.ToString());
                    TxCount += nanoMessageBatch.NanoMessages.Count;
                }
            }
        }
Пример #2
0
        /// <summary>
        ///     Processes the message asynchronous.
        /// </summary>
        /// <param name="bytes">The bytes.</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        private Task ProcessMessageAsync(byte[] bytes, CancellationToken cancellationToken)
        {
            NanoMessageBatch nanoMessageBatch;

            using (var ms = new MemoryStream(bytes))
            {
                nanoMessageBatch = NanoMessageBatch.Deserialize(ms);
            }

            var tasks = new List <Task>(nanoMessageBatch.NanoMessages.Count);

            tasks.AddRange(nanoMessageBatch.NanoMessages.Select(OnReceivedNanoMessageAsync));

            return(TaskHelpers.Iterate(tasks, cancellationToken));
        }