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); }
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); }