in src/Microsoft.Azure.SignalR/Internals/FakeBlazorPackHubProtocol.cs [29:74]
public ReadOnlyMemory<byte> GetMessageBytes(SignalRProtocol.HubMessage message) =>
throw new NotSupportedException();
public bool IsVersionSupported(int version) => version <= Version;
public bool TryParseMessage(ref ReadOnlySequence<byte> input, IInvocationBinder binder, out SignalRProtocol.HubMessage message)
{
if (!BinaryMessageParser.TryParseMessage(ref input, out var payload))
{
message = null;
return false;
}
var first = payload.First.Span;
if (first.Length < 2)
{
first = payload.Slice(0, 2).ToArray();
}
// we do not want to refer message pack or Microsoft.AspNetCore.SignalR.Protocols.MessagePack
// So we parse message pack directly.
// ref: https://github.com/msgpack/msgpack/blob/master/spec.md
if (first[0] > 0x90 && first[0] < 0x9f && first[1] <= 128)
{
var type = first[1];
switch (type)
{
case 1: // Invocation
case 2: // StreamItem
case 3: // Completion
case 4: // StreamInvocation
case 5: // CancelInvocation
message = Invocation;
return true;
case 7: // Close
message = Close;
return true;
case 6: // Ping
message = Data;
return true;
default:
message = null;
return false;
}
}
message = null;
return false;
}