private Message GetMessage(MemoryStream rawData, bool finalFrame, int opCode)
{
MemoryStream data = null;
if (finalFrame)
{
// This is a final frame
if (opCode == 0)
{
// This is the final frame of a multi framed message
_messageBuffer.Write(rawData.GetBuffer(), 0, (int)rawData.Length);
data = _messageBuffer;
data.Position = 0;
}
else
{
// This frame is a single frame
data = rawData;
}
String messageString = Encoding.UTF8.GetString(data.ToArray());
if (!Regex.Match(messageString, "\"type\":\"Ping").Success)
{
Logger.Debug("Received message [" + data.Length + "] (" + (opCode == 0 ? "multi" : "single") + "): " +
SanitiseMessage(messageString));
}
}
else
{
// This is a multi framed message
if (opCode != 0)
{
// This is the first frame of the multi framed message
_messageBuffer = new MemoryStream();
rawData.WriteTo(_messageBuffer);
return null;
}
// This is an intemediary frame of a multi framed message
// Add it to the buffer and return
_messageBuffer.Write(rawData.GetBuffer(), 0, (int)rawData.Length);
return null;
}
return ParseDataToMessage(data);
}