/// <summary> /// Send bytes through noisy channel /// </summary> /// <param name="bytes">Text to send</param> /// <param name="channel">Noisy channel</param> /// <returns>Resulting bytes together with error information</returns> public static async Task <ByteArrayResult> SendBytes(byte[] bytes, ICommunicationChannel channel) { var bits = new BitStream(bytes); var bitsAfterTransmission = await Task.FromResult(channel.Transmit(bits)); var result = await Task.FromResult(bitsAfterTransmission.ToByteArray()); return(new ByteArrayResult { Errors = bits.Difference(bitsAfterTransmission), Result = result }); }
/// <summary> /// Sends text through noisy channel /// </summary> /// <param name="text">A text to send</param> /// <param name="channel">Noisy channel</param> /// <returns>Resulting text together with error information</returns> public static async Task <StringResult> SendText(string text, ICommunicationChannel channel) { var bits = await Task.FromResult(textConverter.ToBitStream(text)); var bitsAfterTransmission = await Task.FromResult(channel.Transmit(bits)); var result = await Task.FromResult(textConverter.FromBitStream(bitsAfterTransmission)); return(new StringResult { Errors = bits.Difference(bitsAfterTransmission), Result = result }); }
/// <summary> /// Encodes a given vector /// </summary> /// <param name="vector">A vector to encode</param> /// <param name="encoder">Encoder to encode vector with</param> /// <returns>Resulting text</returns> public static async Task <StringResultWithErrorPositions> EncodeAndSendVector(string vector, IEncoder encoder, ICommunicationChannel channel) { var bits = vectorConverter.ToBitStream(vector); var encodedBits = await Task.FromResult(encoder.Encode(bits)); var bitsAfterTransmission = await Task.FromResult(channel.Transmit(encodedBits)); var errors = encodedBits.DifferenceWithPositions(bitsAfterTransmission); var encodedVector = vectorConverter.FromBitStream(encodedBits); return(new StringResultWithErrorPositions { ErrorPositions = errors, Errors = errors.Count, Result = encodedVector }); }