internal bool OnFrame(ByteBuffer buffer)
{
bool shouldContinue = true;
try
{
ushort channel;
DescribedList command;
Frame.Decode(buffer, out channel, out command);
if (buffer.Length > 0)
{
Trace.WriteLine(TraceLevel.Frame, "RECV (ch={0}) {1} payload {2}", channel, command, buffer.Length);
}
else
{
Trace.WriteLine(TraceLevel.Frame, "RECV (ch={0}) {1}", channel, command);
}
if (command != null)
{
if (command.Descriptor.Code == Codec.Open.Code)
{
this.OnOpen((Open)command);
}
else if (command.Descriptor.Code == Codec.Close.Code)
{
this.OnClose((Close)command);
shouldContinue = false;
}
else if (command.Descriptor.Code == Codec.Begin.Code)
{
this.OnBegin(channel, (Begin)command);
}
else if (command.Descriptor.Code == Codec.End.Code)
{
this.OnEnd(channel, (End)command);
}
else
{
this.OnSessionCommand(channel, command, buffer);
}
}
}
catch (Exception exception)
{
this.OnException(exception);
shouldContinue = false;
}
return shouldContinue;
}