// incoming data receive loop private async Task _receiveData() { try { var stream = _socket.InputStream; IBuffer buffer = new Windows.Storage.Streams.Buffer(10240); while (true) { IBuffer data = await stream.ReadAsync(buffer, buffer.Capacity, InputStreamOptions.Partial); if (data.Length == 0) { break; } _emitData(data); } // Client disconnected. _emitEnd(); _socket = null; if (_server != null) { _server._connectionDidClose(this); } } catch (System.IO.IOException ex) { NKLogging.log(ex.ToString()); } catch (Exception ex) { NKLogging.log(ex.ToString()); } }
// incoming data receive loop private void _receiveData() { var task = Task.Factory.FromAsync <int>(_socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, null, null), _socket.EndReceive); task.ContinueWith(t => { if (task.Result == 0) { _emitEnd(); _socket = null; if (_server != null) { _server._connectionDidClose(this); } } else { _emitData(buffer, 0, task.Result); _receiveData(); // Receive more data } }, TaskContinuationOptions.OnlyOnRanToCompletion); }