/// <summary> /// Create the payload based on the data stored in the properties. Usually called /// automatically when changing properties, but you might need to call this manually /// if you modify the list of alternative carrier records directly without using /// accessor method provided by this class. /// </summary> /// <exception cref="NdefException">Thrown if unable to assemble the payload. /// The exception message contains further details about the issue.</exception> public void AssemblePayload() { if (_handoverVersion == null) { throw new NdefException(NdefExceptionMessages.ExHandoverInvalidVersion); } // Convert child records to message var childMsg = new NdefMessage(); if (_handoverAlternativeCarrierRecords != null) { childMsg.AddRange(_handoverAlternativeCarrierRecords); } if (_handoverErrorRecord != null) { childMsg.Add(_handoverErrorRecord); } var childBytes = childMsg.ToByteArray(); var newPayload = new byte[childBytes.Length + 1]; // Frist byte: handover version newPayload[0] = _handoverVersion.Version; // Rest of the payload: child message containing Alternative Carrier records + Error record Array.Copy(childBytes, 0, newPayload, 1, childBytes.Length); _payload = newPayload; }
/// <summary> /// Reverse function to parseRecords() - this one takes /// the information stored in the individual record instances and assembles /// it into the payload of the base class. /// </summary> /// <remarks> /// As the URI is mandatory, the payload will not be assembled /// if no URI is defined. /// </remarks> /// <returns>Whether assembling the payload was successful.</returns> private bool AssemblePayload() { // Uri is mandatory - don't assemble the payload if it's not set if (RecordUri == null) { return(false); } // URI (mandatory) var message = new NdefMessage { RecordUri }; // Title(s) (optional) if (Titles != null && Titles.Count > 0) { message.AddRange(Titles); } // Action (optional) if (ActionInUse()) { message.Add(_recordAction); } // Size (optional) if (SizeInUse()) { message.Add(_recordSize); } // Mime Type (optional) if (MimeTypeInUse()) { message.Add(_recordMimeType); } // Image (optional) if (ImageInUse()) { message.Add(_recordImage); } SetPayloadAndParse(message.ToByteArray(), false); return(true); }