Пример #1
0
        /// <summary>
        /// The parse byte package.
        /// </summary>
        /// <param name="dataPipe">
        /// The data pipe.
        /// </param>
        /// <param name="remoteEndPoint">
        /// The remote end point.
        /// </param>
        /// <param name="maxPacketSize">
        /// The max packet size.
        /// </param>
        internal void ParseBytePackage(Pipe dataPipe, EndPoint remoteEndPoint, int maxPacketSize)
        {
            var    remoteAddress = remoteEndPoint.ToString();
            uint   readedBytes = 0;
            ushort cmdId, dataType;
            uint   payloadSize, dataCount, param1, param2;

            byte[] payload = null;
            byte[] header  = null;

            while (maxPacketSize == 0 || maxPacketSize >= (readedBytes + 16))
            {
                header = dataPipe.Read(16);

                // Pipe destroyed
                if (header.Length == 0)
                {
                    return;
                }

                cmdId       = NetworkByteConverter.ToUInt16(header, 0);
                payloadSize = NetworkByteConverter.ToUInt16(header, 2);
                dataType    = NetworkByteConverter.ToUInt16(header, 4);
                param1      = NetworkByteConverter.ToUInt32(header, 8);
                param2      = NetworkByteConverter.ToUInt32(header, 12);

                if (payloadSize == 0xFFFF)
                {
                    payloadSize = NetworkByteConverter.ToUInt32(dataPipe.Read(4));
                    dataCount   = NetworkByteConverter.ToUInt32(dataPipe.Read(4));

                    readedBytes += payloadSize + 24;
                }
                else
                {
                    dataCount    = NetworkByteConverter.ToUInt16(header, 6);
                    readedBytes += payloadSize + 16;
                }

                payload = dataPipe.Read((int)payloadSize);

                this.HandleMessage(
                    cmdId,
                    dataType,
                    ref payloadSize,
                    ref dataCount,
                    ref param1,
                    ref param2,
                    ref header,
                    ref payload,
                    ref remoteEndPoint);
            }
        }
Пример #2
0
		/// <summary>
		/// The parse byte package.
		/// </summary>
		/// <param name="dataPipe">
		/// The data pipe.
		/// </param>
		/// <param name="remoteEndPoint">
		/// The remote end point.
		/// </param>
		/// <param name="maxPacketSize">
		/// The max packet size.
		/// </param>
		internal void ParseBytePackage(Pipe dataPipe, EndPoint remoteEndPoint, int maxPacketSize)
		{
			var remoteAddress = remoteEndPoint.ToString();
			uint readedBytes = 0;
			ushort cmdId, dataType;
			uint payloadSize, dataCount, param1, param2;
			byte[] payload = null;
			byte[] header = null;

			while (maxPacketSize == 0 || maxPacketSize >= (readedBytes + 16))
			{
				header = dataPipe.Read(16);

				// Pipe destroyed
				if (header.Length == 0)
				{
					return;
				}

				cmdId = NetworkByteConverter.ToUInt16(header, 0);
				payloadSize = NetworkByteConverter.ToUInt16(header, 2);
				dataType = NetworkByteConverter.ToUInt16(header, 4);
				param1 = NetworkByteConverter.ToUInt32(header, 8);
				param2 = NetworkByteConverter.ToUInt32(header, 12);

				if (payloadSize == 0xFFFF)
				{
					payloadSize = NetworkByteConverter.ToUInt32(dataPipe.Read(4));
					dataCount = NetworkByteConverter.ToUInt32(dataPipe.Read(4));

					readedBytes += payloadSize + 24;
				}
				else
				{
					dataCount = NetworkByteConverter.ToUInt16(header, 6);
					readedBytes += payloadSize + 16;
				}

				payload = dataPipe.Read((int)payloadSize);

				this.HandleMessage(
					cmdId, 
					dataType, 
					ref payloadSize, 
					ref dataCount, 
					ref param1, 
					ref param2, 
					ref header, 
					ref payload, 
					ref remoteEndPoint);
			}
		}