コード例 #1
0
        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);
        }
コード例 #2
0
 private static OSCPacker GetPacker(char tag)
 {
     return(GetPacker(OSCValue.GetValueType(tag)));
 }