Esempio n. 1
0
        public void Write(BitStream stream)
        {
            // TODO: this is suboptimal
            if (stream == null || m_writeData == null)
            {
                if (stream == null)
                {
                    Debug.Fail("BitReaderWriter - Write - stream is null");
                }
                if (m_writeData == null)
                {
                    Debug.Fail("BitReaderWriter - Write - m_writeData is null");
                }
                return;
            }

            // Store old bit position
            int pos = stream.BitPosition;

            // Write data
            m_writeData.Serialize(stream, false);

            // Measure data len
            int len = stream.BitPosition - pos;

            // Restore old position
            stream.SetBitPositionWrite(pos);

            // Write data len
            stream.WriteVariant((uint)len);

            // Write data again
            m_writeData.Serialize(stream, false);
        }
Esempio n. 2
0
        public void Write(BitStream stream)
        {
            // TODO: this is suboptimal

            // Store old bit position
            int pos = stream.BitPosition;

            // Write data
            m_writeData.Serialize(stream, false);

            // Measure data len
            int len = stream.BitPosition - pos;

            // Restore old position
            stream.SetBitPositionWrite(pos);

            // Write data len
            stream.WriteVariant((uint)len);

            // Write data again
            m_writeData.Serialize(stream, false);
        }
Esempio n. 3
0
        static void DebugBytes(string name, byte[] bytes, List <Type> dataLookup)
        {
            var hex       = System.BitConverter.ToString(bytes).Replace("-", "");
            var ascii     = System.Text.Encoding.ASCII.GetString(bytes);
            var outputTxt = "";

            outputTxt += $"{debugCount} RECV {name}\n";
            debugCount++;

            if (dataLookup == null)
            {
                outputTxt += $"\tNo data lookup\n";
                outputTxt += $"\tHex: {hex}\n";
                outputTxt += $"\tAscii: {ascii}\n";
            }
            else
            {
                debugBitStreamReader.Encapsulate(bytes);
                int index = 0;
                debugBitStreamReader.Serialize(ref index);
                if (index < 0 || index >= dataLookup.Count)
                {
                    outputTxt += $"\tReceived invalid event index: {index} out of {dataLookup.Count}\n";
                    outputTxt += $"\tHex: {hex}\n";
                    outputTxt += $"\tAscii: {ascii}\n";
                }
                else
                {
                    try
                    {
                        IBitSerializable data = (IBitSerializable)Activator.CreateInstance(dataLookup[index]);
                        data.Serialize(debugBitStreamReader);
                        outputTxt += $"\t{dataLookup[index]}\n";
                        outputTxt += DeepPrint(data, 2, printableProps) + "\n";
                    }
                    catch (Exception e)
                    {
                        outputTxt += $"\tFailed to read data because: {e}";
                    }
                }
            }

            Console.WriteLine(outputTxt);
        }
Esempio n. 4
0
        /// <summary>
        /// Returns false when validation was required and failed, otherwise true.
        /// </summary>
        public bool ReadData(IBitSerializable readDataInto, bool validate)
        {
            Debug.Assert(m_readStream != null, "Local invocation is not supported for BitReaderWriter");
            //if (m_readStream == null)
            //{
            //    tmpStream.ResetWrite();
            //    Write(tmpStream);
            //    tmpStream.ResetRead();
            //    return ReadFrom(tmpStream).ReadData(readDataInto, validate, null);
            //}

            int oldPos = m_readStream.BitPosition;
            m_readStream.SetBitPositionRead(m_readStreamPosition);
            try
            {
                return readDataInto.Serialize(m_readStream, validate);
            }
            finally
            {
                m_readStream.SetBitPositionRead(oldPos);
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Returns false when validation was required and failed, otherwise true.
        /// </summary>
        public bool ReadData(IBitSerializable readDataInto, bool validate)
        {
            Debug.Assert(m_readStream != null, "Local invocation is not supported for BitReaderWriter");
            //if (m_readStream == null)
            //{
            //    tmpStream.ResetWrite();
            //    Write(tmpStream);
            //    tmpStream.ResetRead();
            //    return ReadFrom(tmpStream).ReadData(readDataInto, validate, null);
            //}

            int oldPos = m_readStream.BitPosition;

            m_readStream.SetBitPositionRead(m_readStreamPosition);
            try
            {
                return(readDataInto.Serialize(m_readStream, validate));
            }
            finally
            {
                m_readStream.SetBitPositionRead(oldPos);
            }
        }
Esempio n. 6
0
 public void WriteSerializable(IBitSerializable obj)
 {
     obj.Serialize(this);
 }