void Receive_Callback(IAsyncResult ar) { try { // create an empty origin EndPoint origin = UseIPv6 ? Helper.EmptyEndPointIPv6 : Helper.EmptyEndPoint; int count = Socket.EndReceiveFrom(ar, ref origin); OscPacket message = OscPacket.Read(m_Bytes, count, (IPEndPoint)origin); lock (m_Lock) { if (m_Count < m_ReceiveQueue.Length) { m_ReceiveQueue[m_WriteIndex] = message; m_WriteIndex = NextWriteIndex; m_Count++; // if this was the first message then signal if (m_Count == 1) { m_MessageReceived.Set(); } } } } catch { } if (State == OscSocketState.Connected) { // create an empty origin EndPoint origin = UseIPv6 ? Helper.EmptyEndPointIPv6 : Helper.EmptyEndPoint; Socket.BeginReceiveFrom(m_Bytes, 0, m_Bytes.Length, SocketFlags, ref origin, Receive_Callback, null); } }
/// <summary> /// Read a single packet from the stream at the current position /// </summary> /// <returns>An osc packet</returns> public OscPacket Read() { if (Format == OscPacketFormat.Binary) { int length = Helper.ReadInt32(m_BinaryReader); byte[] bytes = new byte[length]; m_BinaryReader.Read(bytes, 0, length); return(OscPacket.Read(bytes, length)); } else { string line = m_StringReader.ReadLine(); OscPacket packet; if (OscPacket.TryParse(line, out packet) == false) { StringBuilder sb = new StringBuilder(); sb.AppendLine(line); while (EndOfStream == false) { sb.Append(m_StringReader.ReadLine()); if (OscPacket.TryParse(sb.ToString(), out packet) == true) { return(packet); } sb.AppendLine(); } return(OscMessage.ParseError); } return(packet); } }