コード例 #1
0
    public byte[] WrapReliabilityPacket(byte[] packet, bool reliable, AcknowledgeChecker acknowledgeChecker, uint acknowledgeId = 0)
    {
        MemoryStream stream       = new MemoryStream();
        BinaryWriter binaryWriter = new BinaryWriter(stream);

        binaryWriter.Write(reliable);// escribo si es relaiable
        if (reliable)
        {
            binaryWriter.Write(acknowledgeId);// escribo el ackid
            uint lastAcknowledge;
            uint acknowledgeArray;
            bool hasToConfirm = acknowledgeChecker.GetAcknowledgeConfirmation(out lastAcknowledge, out acknowledgeArray);
            binaryWriter.Write(hasToConfirm); // si no hay que confirmar, solo mando un bool diciendo que no hay que hacerlo
            if (hasToConfirm)                 //si confirmas, mandas la data
            {
                binaryWriter.Write(lastAcknowledge);
                binaryWriter.Write(acknowledgeArray);
            }
        }
        stream.Close();
        byte[] reliability  = stream.ToArray();
        byte[] wrappedBytes = new byte[reliability.Length + packet.Length];
        reliability.CopyTo(wrappedBytes, 0);
        packet.CopyTo(wrappedBytes, reliability.Length);

        wrappedBytes = WrapCheckSumPacket(wrappedBytes);// creo el checksum para la verificacion de que llegue bien

        return(wrappedBytes);
    }