示例#1
0
        public ByteStream ReadStream(int size)
        {
            ByteBuilder innerBuilder = new ByteBuilder(m_Buffer, m_ReadPos, m_ReadPos + size);
            ByteStream  ret          = new ByteStream(innerBuilder, true, false);

            m_ReadPos += size;
            return(ret);
        }
示例#2
0
        private static void AddPacote(ByteBuilder buffer, int packetId, string mensagem)
        {
            MeuPacote pacote = new MeuPacote();

            pacote.Header      = new MeuCabecalho();
            pacote.Header.Id   = packetId;
            pacote.Header.Tipo = 123;

            pacote.Data       = new MeusDados();
            pacote.Data.Texto = mensagem;

            buffer.AddDelimited(pacote);
        }
示例#3
0
        static void Main()
        {
            int[] lista = new int[] { -1000000, -10000, -1000, -1, 0, 1, 127, 128, 255, 256, 1023, 1024, 8191, 8192, 16383, 16384, 1073741824, 1073741823, Int32.MaxValue };

            byte[] varIntTmpbuffer = new byte[16];
            for (int i = 0; i < 4; i++)
            {
                varIntTmpbuffer[i] = 0xff;
            }
            int rrSize1, rrSize2;

            rrSize1 = ByteUtil.ReadVarint(varIntTmpbuffer, 0, out rrSize2);
            var bb = ByteUtil.TryReadVarint(varIntTmpbuffer, 0, 5, out rrSize1, out rrSize2);

            for (int i = 0; i < lista.Length; i++)
            {
                varIntTmpbuffer = new byte[16];

                int writeSize = ByteUtil.WriteVarInt(varIntTmpbuffer, 0, lista[i]);

                int readSize;
                int readResult = ByteUtil.ReadVarint(varIntTmpbuffer, 0, out readSize);

                int  readSize2;
                int  readResult2;
                bool boolResult2;

                boolResult2 = ByteUtil.TryReadVarint(varIntTmpbuffer, 0, 15, out readSize2, out readResult2);

                Debug.WriteLine(String.Format("IN={0}  WSIZE={1}   ||   RSIZE={2}  OUT={3}   ||   RSIZE={4}  OUT={5}  RET={6}",
                                              lista[i], writeSize,
                                              readSize, readResult,
                                              readSize2, readResult2, boolResult2));
            }

            using (var output = File.Create(P_ARQUIVO))
            {
                var tmpBuffer = new ByteBuilder();

                AddPacote(tmpBuffer, 1, "Alfa");
                AddPacote(tmpBuffer, 2, "Bravo");
                AddPacote(tmpBuffer, 3, "Charlie");
                AddPacote(tmpBuffer, 4, "Delta");

                tmpBuffer.CopyTo(output);
            }

            using (var input = File.OpenRead(P_ARQUIVO))
            {
                int         readSize   = 32;
                ByteBuilder readBuffer = new ByteBuilder();
                // ByteStream readStream = new ByteStream(readBuffer);

                while (true)
                {
                    var tmp   = readBuffer.LockWrite(readSize);
                    int lidos = input.Read(tmp.Ptr, tmp.Offset, tmp.Size);
                    if (lidos == 0)
                    {
                        break;
                    }
                    readBuffer.ConfirmWrite(lidos);

                    ByteStream packetStream = null;
                    while (readBuffer.TryReadStreamDelimited(ref packetStream))
                    {
                        var pacote = MeuPacote.Parser.ParseFrom(packetStream);
                        Debug.WriteLine(String.Format("PACOTE: {0}", pacote));
                    }

                    if (packetStream != null)
                    {
                        readBuffer.Compact();
                    }
                }
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
示例#4
0
 public ByteBuilder(ByteBuilder src)
 {
     this.m_Buffer   = src.m_Buffer;
     this.m_ReadPos  = src.m_ReadPos;
     this.m_WritePos = src.m_WritePos;
 }
示例#5
0
 public ByteStream(ByteBuilder baseBuilder, bool canRead, bool canWrite)
 {
     m_Builder  = baseBuilder;
     m_canRead  = canRead;
     m_canWrite = canWrite;
 }
示例#6
0
 public ByteStream(ByteBuilder baseBuilder)
 {
     m_Builder  = baseBuilder;
     m_canRead  = true;
     m_canWrite = true;
 }