Ejemplo n.º 1
0
        private long SerializeInternal(WireMessage[] messages, Stream stream)
        {
            if (messages == null)
            {
                stream.WriteByte(NullFlag);
                return(1L);
            }

            var previousPos = stream.Position;

            using (var writer = new BinaryStreamWriter(stream))
            {
                writer.Write(NotNullFlag);

                var length = messages.Length;
                writer.Write(length);

                if (length > 0)
                {
                    for (var i = 0; i < length; i++)
                    {
                        Write(writer, messages[i]);
                    }
                }
            }

            return(Math.Max(-1L, stream.Position - previousPos));
        }
Ejemplo n.º 2
0
		public void Reply(string[] p0)
		{
			var stream = new BinaryStreamWriter();
		#if (DEBUG || LOG_PROTOCOL)
			Log.Debug("GetMails Reply. reqId: {0}, result: {1}", _reqId, Log.ObjToString(p0));
		#endif
			stream.Write(2);
			stream.Write(_reqId);
			stream.Write(0);
			stream.Write(p0);
			_connection.Write(stream.Buffer, stream.Position);
		}
Ejemplo n.º 3
0
		public void Error(int error, string msg)
		{
			var stream = new BinaryStreamWriter();
		#if (DEBUG || LOG_PROTOCOL)
			Log.Debug("GetMails Failed. reqId: {0}, errCode:{1} errMsg:{2}", _reqId, error, msg);
		#endif
			stream.Write(2);
			stream.Write(_reqId);
			stream.Write(error);
			stream.Write(msg);
			_connection.Write(stream.Buffer, stream.Position);
		}
Ejemplo n.º 4
0
        public override byte[] Serialize()
        {
            using (var stream = new MemoryStream())
            {
                var writer = new BinaryStreamWriter(stream);

                writer.Write(Magic, ByteOrder.LittleEndian);
                writer.Write((byte)Type);
                writer.Write(Session.Id, ByteOrder.LittleEndian);

                return(stream.ToArray());
            }
        }
Ejemplo n.º 5
0
        public byte[] Serialize()
        {
            using (var stream = new MemoryStream())
            {
                var writer = new BinaryStreamWriter(stream);
                writer.Write(Payload.Length + 10, ByteOrder.BigEndian);
                writer.Write(RequestId, ByteOrder.BigEndian);
                writer.Write((int)Type, ByteOrder.BigEndian);
                stream.Write(Payload);
                writer.Write(0, ByteOrder.BigEndian);

                return(stream.ToArray());
            }
        }
Ejemplo n.º 6
0
        private async Task PushBatch(ICollection <object[]> rows, ClickHouseType[] columnTypes, string[] columnNames, CancellationToken token)
        {
            using var stream = new MemoryStream()
                  {
                      Capacity = 512 * 1024
                  };
            using (var gzipStream = new BufferedStream(new GZipStream(stream, CompressionLevel.Fastest, true), 256 * 1024))
            {
                using var writer   = new ExtendedBinaryWriter(gzipStream);
                using var streamer = new BinaryStreamWriter(writer);
                foreach (var row in rows)
                {
                    for (var i = 0; i < row.Length; i++)
                    {
                        streamer.Write(columnTypes[i], row[i]);
                    }
                }
            }
            stream.Seek(0, SeekOrigin.Begin);

            var query = $"INSERT INTO {DestinationTableName} ({string.Join(", ", columnNames)}) FORMAT RowBinary";
            await connection.PostBulkDataAsync(query, stream, true, token).ConfigureAwait(false);

            Interlocked.Add(ref rowsWritten, rows.Count);
        }
        private static void TestStreamWith <T>(
            T item,
            Action <T, IBinaryWriter> write,
            Func <IBinaryReader, T> read,
            Endianness endianness,
            bool useGarbage,
            Func <byte[], int, Endianness, IBinaryReader> createReader)
        {
            var stream = new MemoryStream(1);

            var writer = new BinaryStreamWriter(stream)
            {
                Endianness = endianness
            };

            if (useGarbage)
            {
                writer.Write(Guid.NewGuid());
            }

            var positionBefore = writer.Position;

            write(item, writer);

            var positionAfter = writer.Position;

            if (useGarbage)
            {
                writer.Write(Guid.NewGuid());
            }

            var itemLength = positionAfter - positionBefore;

            itemLength.Should().BeGreaterThan(0);

            writer.Position.Should().Be(stream.Position);

            var reader = createReader(stream.ToArray(), (int)positionBefore, endianness);

            var restoredItem = read(reader);

            Compare(item, restoredItem);

            reader.Position.Should().Be(positionAfter);
        }
Ejemplo n.º 8
0
        public static void Align(this BinaryStreamWriter streamWriter, int alignment)
        {
            var position      = (int)streamWriter.BaseStream.Position;
            var paddingLength = (position + alignment - 1) / alignment * alignment - position;

            for (var i = 0; i < paddingLength; ++i)
            {
                streamWriter.Write((byte)0);
            }
        }
Ejemplo n.º 9
0
        public override byte[] Serialize()
        {
            using (var stream = new MemoryStream())
            {
                var writer = new BinaryStreamWriter(stream);

                writer.Write(Magic, ByteOrder.LittleEndian);
                writer.Write((byte)Type);
                writer.Write(Session.Id, ByteOrder.LittleEndian);
                writer.Write(ChallengeToken, ByteOrder.LittleEndian);

                if (StatsType == StatsType.Full)
                {
                    writer.Write(0, ByteOrder.LittleEndian);
                }

                return(stream.ToArray());
            }
        }
Ejemplo n.º 10
0
        public static byte[] CreateClientMessage(byte[] message)
        {
            using (MemoryStream ms = new MemoryStream(8096))
            {
                using (BinaryStreamWriter sw = new BinaryStreamWriter(ms))
                {
                    sw.Write(GatewayProtocolHeader.Clientway_STX);
                    sw.Write((short)0);
                    sw.Write((ushort)GatewayCommand.CLIENT_INFO_QUEST);
                    sw.Write((byte)ClientPacketType.CLIENTPACKET_ALL);

                    sw.Write(message);
                    //
                    byte[] buffer = ms.ToArray();
                    buffer[1] = (byte)buffer.Length;
                    buffer[2] = (byte)(buffer.Length >> 8);
                    //
                    return(buffer);
                }
            }
        }
Ejemplo n.º 11
0
 /// <summary>
 /// 发送命令
 /// </summary>
 /// <returns></returns>
 private void SendMessage(GatewayCommand cmd)
 {
     using (MemoryStream ms = new MemoryStream())
     {
         using (BinaryStreamWriter sw = new BinaryStreamWriter(ms))
         {
             sw.Write(GatewayProtocolHeader.Gateway_STX);
             sw.Write((short)0);
             sw.Write((ushort)cmd);
             sw.Write((byte)ClientPacketType.CLIENTPACKET_ALL);//客户端类型
             //
             //
             byte[] message = ms.ToArray();
             //
             message[1] = (byte)message.Length;
             message[2] = (byte)(message.Length << 8);
             //
             listener.SendToServer(message);
         }
     }
 }
Ejemplo n.º 12
0
        internal byte[] Serialize(object _object, Type _objectType)
        {
            try
            {
                // Serialize version info
                BinaryStreamWriter.WriteBinaryElement(BinaryElement.VERSION);
                BinaryStreamWriter.Write(Constants.kSerializationFormatVersion);

                // Serialize object value
                ObjectDataWriter.WriteObjectValue(BinaryStreamWriter, _object);

                // Get serialization data
                byte[] _serializationData = BinaryStreamWriter.ToBytes();

                return(_serializationData);
            }
            finally
            {
                Reset();
            }
        }