private static OSCMessage UnpackMessage(byte[] bytes, ref int start) { OSCMessage message = null; var address = (string)UnpackValue(OSCValueType.String, bytes, ref start); var typeTags = (string)UnpackValue(OSCValueType.String, bytes, ref start); var valuesArray = (Dictionary <int, OSCValue>)null; message = new OSCMessage(address); foreach (var valueTag in typeTags) { if (valueTag == ',') { continue; } OSCValue value = null; // START ARRAY if (valueTag == '[') { if (valuesArray == null) { valuesArray = new Dictionary <int, OSCValue>(); } valuesArray.Add(valuesArray.Count, OSCValue.Array()); continue; } // STOP ARRAY if (valueTag == ']') { if (valuesArray != null && valuesArray.Count > 0) { value = valuesArray[valuesArray.Count - 1]; valuesArray.Remove(valuesArray.Count - 1); } } else { // DEFAULT VALUE var valueType = OSCValue.GetValueType(valueTag); var @object = UnpackValue(valueType, bytes, ref start); value = new OSCValue(valueType, @object); // TODO: Make pool. } if (valuesArray != null && valuesArray.Count > 0) { valuesArray[valuesArray.Count - 1].ArrayValue.Add(value); continue; } message.AddValue(value); } return(message); }
private static OSCPacker GetPacker(char tag) { return(GetPacker(OSCValue.GetValueType(tag))); }