コード例 #1
0
        public virtual Task ListenAsync(CancellationToken cancellationToken)
        {
            ThrowClosed();
            CheckListening();

            var task = Task.Factory.StartNew(() =>
            {
                CancellationTokenSource cts = new CancellationTokenSource();
                cancellationToken.Register(() => cts.Cancel());
                cancellationToken = cts.Token;

                do
                {
                    try
                    {
                        var length = packetStream.ReadPacket(readBuffer, cancellationToken); // todo handlinti exceptionus
                        if (length < 11 || length > readBuffer.Length)
                        {
                            throw new ProtocolException(ErrorCode.BadRequest);
                        }

                        HandlePacket(readBuffer, length, cts);

                        cancellationToken.ThrowIfCancellationRequested();
                    }
                    catch (Exception e)
                    {
                        SetClosed(e);
                        throw;
                    }
                } while (!cancellationToken.IsCancellationRequested);
            }, TaskCreationOptions.LongRunning);

            return(task);
        }
コード例 #2
0
 private void run()
 {
     while (stream.IsConnected())
     {
         stream.PacketHandler.HandlePacket(stream.ReadPacket());
     }
 }