/// <summary> /// Deserialize the packetReference. /// </summary> /// <param name="sourceEndPoint">The packetReference origin.</param> /// <param name="data">The serialized packetReference.</param> /// <param name="start">The starting index into the serialized data stream.</param> /// <param name="end">The ending index into the serialized data stream.</param> /// <returns>The newly deserialized packetReference.</returns> public static OscPacketReference FromByteArray(IPEndPoint sourceEndPoint, byte[] data, ref int start, int end) { return(data[start] == '#' ? (OscPacketReference)OscBundleReference.FromByteArray(sourceEndPoint, data, ref start, end) : OscMessageReference.FromByteArray(sourceEndPoint, data, ref start)); }
/// <summary> /// Deserialize the packet. /// </summary> /// <param name="sourceEndPoint">The packet origin.</param> /// <param name="data">The serialized packet.</param> /// <param name="start">The starting index into the serialized data stream.</param> /// <returns>The newly deserialized packet.</returns> public static OscMessageReference FromByteArray(IPEndPoint sourceEndPoint, byte[] data, ref int start) { var address = ValueFromByteArray <string>(data, ref start); var message = new OscMessageReference(sourceEndPoint, address); var tags = ValueFromByteArray <string>(data, ref start).ToCharArray(); foreach (var tag in tags) { object value; switch (tag) { case DefaultTag: continue; case IntegerTag: value = ValueFromByteArray <int>(data, ref start); break; case LongTag: value = ValueFromByteArray <long>(data, ref start); break; case FloatTag: value = ValueFromByteArray <float>(data, ref start); break; case DoubleTag: value = ValueFromByteArray <double>(data, ref start); break; case StringTag: case SymbolTag: value = ValueFromByteArray <string>(data, ref start); break; case BlobTag: value = ValueFromByteArray <byte[]>(data, ref start); break; case TimeTag: value = ValueFromByteArray <OscTimeTag>(data, ref start); break; case CharacterTag: value = ValueFromByteArray <char>(data, ref start); break; case ColorTag: value = ValueFromByteArray <Color>(data, ref start); break; case TrueTag: value = true; break; case FalseTag: value = false; break; case NilTag: value = null; break; case InfinitumTag: value = float.PositiveInfinity; break; default: Debug.WriteLine("Unknown tag: " + tag); continue; } message.Append(value); } return(message); }