示例#1
0
        public static Message FromOSC(Stream stream)
        {
            var ms = new MemoryStream();

            stream.CopyTo(ms);
            var bytes  = ms.ToArray();
            var start  = 0;
            var bundle = OSCBundle.Unpack(bytes, ref start, (int)stream.Length);

            var message = new Message();

            foreach (OSCMessage m in bundle.Values)
            {
                var binList = new BinList();
                binList.AssignFrom(m.Values);                 // does not clone implicitly

                var address = m.Address.Split('/');
                var name    = address[address.Length - 1];
                address[address.Length - 1] = "";
                var messageAddress = "";

                foreach (var part in address)
                {
                    if (part.Trim() != "")
                    {
                        messageAddress += "." + part;
                    }
                }

                message.Address = messageAddress.Substring(1);
                message[name]   = binList;
            }

            return(message);
        }
示例#2
0
        public static Message FromOSC(Stream stream, string messagePrefix = "OSC", int contractAddress = 1)
        {
            MemoryStream ms = new MemoryStream();

            stream.Position = 0;
            stream.CopyTo(ms);
            byte[]    bytes  = ms.ToArray();
            int       start  = 0;
            OSCBundle bundle = OSCBundle.Unpack(bytes, ref start, (int)stream.Length);

            Message message = new Message();

//			yet unsupported:
//			Message.TimeStamp = DateTime.FromFileTime(bundle.getTimeStamp());


            foreach (OSCMessage m in bundle.Values)
            {
                SpreadList sl = new SpreadList();
                sl.AssignFrom(m.Values);                 // does not clone implicitly

                string oldAddress = m.Address;
                while (oldAddress.StartsWith("/"))
                {
                    oldAddress = oldAddress.Substring(1);
                }
                while (oldAddress.EndsWith("/"))
                {
                    oldAddress = oldAddress.Substring(0, oldAddress.Length - 1);
                }

                string[] address = oldAddress.Split('/');

                contractAddress = address.Length > contractAddress ? contractAddress : address.Length - ((messagePrefix.Trim() == "")? 1 : 0);
                string attribName = "";
                for (int i = address.Length - contractAddress; i < address.Length; i++)
                {
                    attribName += ".";
                    attribName += address[i];
                    address[i]  = "";
                }
                attribName = attribName.Substring(1);


                string messageAddress = "";
                foreach (string part in address)
                {
                    if (part.Trim() != "")
                    {
                        messageAddress += "." + part;
                    }
                }
                if (messagePrefix.Trim() == "")
                {
                    message.Address = messageAddress.Substring(1);
                }
                else
                {
                    message.Address = messagePrefix + messageAddress;
                }

                message[attribName] = sl;
            }
            return(message);
        }