Exemplo n.º 1
0
        private async Task <bool> BeginReceiveTask()
        {
            return(await Task.Run(async() => {
                do
                {
                    try {
                        if (_stream == null)
                        {
                            return false;
                        }

                        if (_stream.DataAvailable)
                        {
                            do
                            {
                                var length = await _stream.GetLengthAsync();
                                if (length > 0)
                                {
                                    byte[] buffer = new byte[length];

                                    var incomplete = true;
                                    int offset = 0;
                                    int temp_length = length;
                                    do
                                    {
                                        int bytesReceived = await _stream.ReadAsync(buffer, offset, temp_length);
                                        if (bytesReceived != temp_length)
                                        {
                                            offset += bytesReceived;
                                            temp_length -= bytesReceived;
                                        }
                                        else
                                        {
                                            incomplete = false;
                                        }
                                    } while (incomplete);

                                    var readBuffer = new byte[length];
                                    Array.Copy(buffer, readBuffer, length);

                                    if (MessageReceived(readBuffer))
                                    {
                                        return true;
                                    }
                                }
                                else
                                {
                                    break;
                                }
                            } while (true);
                        }
                    }
                    catch (Exception) {
                        return false;
                    }
                }while (true);
            }));
        }