protected override Frame ParseFrame(byte[] data) { int place = 0; SingleByteField encodingField = new SingleByteField(); place += encodingField.Parse(data, place); TextField lastPlayedOnField = TextField.CreateTextField(true, EncodingScheme.Ascii); place += lastPlayedOnField.Parse(data, place); TextField playCountField = TextField.CreateTextField(true, EncodingScheme.Ascii); place += playCountField.Parse(data, place); TextField memoField = TextField.CreateTextField(true, EncodingScheme.Ascii); place += memoField.Parse(data, place); DateTime lastPlayed; if (!DateTime.TryParse(lastPlayedOnField.Text, out lastPlayed)) { throw new FrameParsingException("Invalid value in date field of LastPlayedOn frame."); } int playCount; if (!int.TryParse(playCountField.Text, out playCount)) { throw new FrameParsingException("Invalid value in play count field of LastPlayedOn frame."); } return(new LastPlayedOnFrame(lastPlayed, playCount, memoField.Text)); }
protected static string ParseExtendedTextFrame(byte[] data, out string description, out LanguageCode language) { int place = 0; SingleByteField encodingField = new SingleByteField(); place += encodingField.Parse(data, place); FixedLengthAsciiTextField langField = new FixedLengthAsciiTextField(3); place += langField.Parse(data, place); TextField descriptinoField = TextField.CreateTextField(true, (EncodingScheme)encodingField.Value); place += descriptinoField.Parse(data, place); TextField textField = TextField.CreateTextField(false, (EncodingScheme)encodingField.Value); place += textField.Parse(data, place); if (!Enum.IsDefined(typeof(LanguageCode), langField.Text)) { langField.Text = "Unknown"; } language = (LanguageCode)Enum.Parse(typeof(LanguageCode), langField.Text); description = descriptinoField.Text; return(textField.Text); }
protected override Frame ParseFrame(byte[] data) { int place = 0; SingleByteField encodingField = new SingleByteField(); place += encodingField.Parse(data, place); TextField imageFormatField = TextField.CreateTextField(true, EncodingScheme.Ascii); place += imageFormatField.Parse(data, place); SingleByteField pictureTypeField = new SingleByteField(); place += pictureTypeField.Parse(data, place); TextField descriptionField = TextField.CreateTextField(true, (EncodingScheme)encodingField.Value); place += descriptionField.Parse(data, place); BinaryField dataField = new BinaryField(); place += dataField.Parse(data, place); System.IO.MemoryStream memoryImageBuffer = new System.IO.MemoryStream(dataField.Data); try { Image image = Image.Load(memoryImageBuffer); return(new PictureFrame(dataField.Data, image, descriptionField.Text, (PictureType)pictureTypeField.Value)); } catch (ArgumentException) { throw new FrameParsingException("Unrecognized picture format found in Picture frame."); } }
//Tests the Read method of the class. public void TestRead() { for (int testCase = 0; testCase < 100; testCase++) { byte[] randomData = new byte[_randomNumberGenerator.Next(1, 50000)]; int offset = _randomNumberGenerator.Next(0, randomData.Length - 1); _randomNumberGenerator.NextBytes(randomData); SingleByteField field = new SingleByteField(); field.Parse(randomData, offset); Assert.AreEqual(randomData[offset], field.Value); } }
//Tests the Write method of the class. public void TestWrite() { for (int testCase = 0; testCase < 100; testCase++) { byte[] randomData = new byte[1]; _randomNumberGenerator.NextBytes(randomData); SingleByteField field = new SingleByteField(randomData[0]); MemoryStream stream = new MemoryStream(); field.WriteToStream(stream); Assert.AreEqual(stream.Length, 1); Assert.AreEqual(randomData[0], stream.GetBuffer()[0]); } }
/// <summary> /// Returns the text encoded in a text frame. /// </summary> /// <param name="data">Byte array to parse the text frame out of.</param> /// <returns>The string encoded in the text frame.</returns> protected static string ParseTextFrame(byte[] data) { //Text encoding $xx //Information <text string according to encoding> int place = 0; SingleByteField encodingField = new SingleByteField(); place += encodingField.Parse(data, place); TextField textField = TextField.CreateTextField(false, (EncodingScheme)encodingField.Value); place += textField.Parse(data, place); return(textField.Text); }
protected override Frame ParseFrame(byte[] data) { //Text encoding $xx //MIME type <text string> $00 //Filename <text string according to encoding> $00 (00) //Content description <text string according to encóding> $00 (00) //Encapsulated object <binary data> int place = 0; SingleByteField encodingField = new SingleByteField(); place += encodingField.Parse(data, place); TextField mimeTypeField = TextField.CreateTextField(true, EncodingScheme.Ascii); place += mimeTypeField.Parse(data, place); TextField fileNameField = TextField.CreateTextField(true, (EncodingScheme)encodingField.Value); place += fileNameField.Parse(data, place); TextField contentDescriptionField = TextField.CreateTextField(true, (EncodingScheme)encodingField.Value); place += contentDescriptionField.Parse(data, place); BinaryField dataField = new BinaryField(); place += dataField.Parse(data, place); return(new GeneralEncapsulatedObjectFrame( fileNameField.Text, contentDescriptionField.Text, mimeTypeField.Text, dataField.Data)); }