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); }
private void run() { while (stream.IsConnected()) { stream.PacketHandler.HandlePacket(stream.ReadPacket()); } }