/// <summary> /// /// </summary> /// <param name="buffer"></param> /// <param name="offset"></param> /// <param name="length"></param> protected override void OnBytesRead(byte[] buffer, int offset, int length) { for (var i = offset; i < offset + length; i++) { m_messageData.WriteByte(buffer[i]); } do { if (m_messageLength == -1 && m_messageData.Count > 3) { m_messageLength = m_messageData.ReadInt(); } if (m_messageLength != -1 && m_messageId == -1 && m_messageData.Count > 3) { m_messageId = m_messageData.ReadInt(); } if (m_messageLength != -1 && m_messageId != -1 && m_messageData.Count >= m_messageLength) { var message = MessageBuilder.BuildMessage(m_messageId, m_messageData.ReadBytes(m_messageLength)); OnMessageEvent?.Invoke(message); m_messageId = -1; m_messageLength = -1; } }while ((m_messageLength == -1 || m_messageId == -1) && m_messageData.Count > 3); }
/// <summary> /// /// </summary> /// <param name="buffer"></param> /// <param name="offset"></param> /// <param name="length"></param> /// <returns></returns> public IEnumerable <AbstractRcpMessage> GetMessages(byte[] buffer, int offset, int length) { for (int i = offset; i < offset + length; i++) { m_messageData.WriteByte(buffer[i]); } do { if (m_messageLength == -1 && m_messageData.Count > 3) { m_messageLength = m_messageData.ReadInt(); } if (m_messageLength != -1 && m_messageId == -1 && m_messageData.Count > 3) { m_messageId = m_messageData.ReadInt(); } if (m_messageLength != -1 && m_messageId != -1 && m_messageData.Count >= m_messageLength) { yield return(MessageBuilder.BuildMessage(m_messageId, m_messageData.ReadBytes(m_messageLength))); m_messageId = -1; m_messageLength = -1; } }while ((m_messageLength == -1 || m_messageId == -1) && m_messageData.Count > 3); }