public Packet(Stream stream) { if (stream != null) { if (stream.CanSeek) { stream.Position = 0; } #if DEBUG HexFormattedData = FormatIt(stream.GetMemoryStream(0).ToArray()); if (stream.CanSeek) { stream.Position = 0; } #endif _rawData = stream.GetMemoryStream(0); if (ThrowWhenInvalid && _rawData.Length < HeaderLength) { throw new InvalidPacketException(); } else { if (_rawData.Length > 3) ID = _rawData.ToInt32(); if (ThrowWhenInvalid && ID != Connector.StandardID) { throw new InvalidPacketException(); } else { if (_rawData.Length > 7) Length = _rawData.ToInt32(); if (_rawData.Length > 11) Origin = (OriginType)_rawData.ToInt32(); if (_rawData.Length > 15) Padding = _rawData.ToInt32(); if (_rawData.Length > 19) PayloadLength = _rawData.ToInt32(); if (_rawData.Length > 23) PacketType = (PacketType)_rawData.ToInt32(); int ln = Convert.ToInt32(_rawData.Length); if (ln > Length) { ln = Length; } Payload = _rawData.GetMemoryStream(HeaderLength); _package = BuildPackage(_rawData, HeaderLength, Type.GetType(typeof(Packet).Namespace + "." + this.PacketType.ToString())); //GetPackage(byteArray); int packetLength = 0; if (_package != null) { if (_package.GetErrors().Count > 0) { ConversionFailed = true; } packetLength = Convert.ToInt32(Payload.Length); if (Length - HeaderLength != packetLength) { if (ThrowWhenInvalid) { throw new InvalidPacketException(); } else { ConversionException = new InvalidPacketException(); ConversionFailed = true; } } } else { //Unknown package found!! } } } } }