mirror of
https://github.com/cberner/raptorq.git
synced 2024-06-26 00:38:53 +00:00
39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
![]() |
import os
|
||
|
import random
|
||
|
from raptorq import Encoder, Decoder
|
||
|
|
||
|
|
||
|
def main():
|
||
|
# Generate some random data to send
|
||
|
data = os.urandom(10000)
|
||
|
|
||
|
# Create the Encoder, with an MTU of 1400 (common for Ethernet)
|
||
|
encoder = Encoder.with_defaults(data, 1400)
|
||
|
|
||
|
# Perform the encoding, and serialize to bytes for transmission
|
||
|
packets = encoder.get_encoded_packets(15)
|
||
|
|
||
|
# Here we simulate losing 10 of the packets randomly. Normally, you would send them over
|
||
|
# (potentially lossy) network here.
|
||
|
random.shuffle(packets)
|
||
|
# Erase 10 packets at random
|
||
|
packets = packets[:-10]
|
||
|
|
||
|
# The Decoder MUST be constructed with the configuration of the Encoder.
|
||
|
# The configuration should be transmitted over a reliable channel
|
||
|
decoder = Decoder.with_defaults(len(data), 1400)
|
||
|
|
||
|
# Perform the decoding
|
||
|
result = None
|
||
|
for packet in packets:
|
||
|
result = decoder.decode(packet)
|
||
|
if result is not None:
|
||
|
break
|
||
|
|
||
|
# Check that even though some of the data was lost we are able to reconstruct the original message
|
||
|
assert result == data
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main()
|