in sdk/clients/protobuf-client/csharp/src/WebPubSubProtobufProtocolHelper.cs [27:77]
public static IReadOnlyList<WebPubSubMessage> ParseMessage(ReadOnlySequence<byte> input)
{
var downstreamMessage = DownstreamMessage.Parser.ParseFrom(input);
switch (downstreamMessage.MessageCase)
{
case DownstreamMessage.MessageOneofCase.AckMessage:
AckMessageError? error = null;
if (downstreamMessage.AckMessage.Error!= null)
{
error = new AckMessageError(downstreamMessage.AckMessage.Error.Name, downstreamMessage.AckMessage.Error.Message);
}
return [ new AckMessage(downstreamMessage.AckMessage.AckId, downstreamMessage.AckMessage.Success, error!) ];
case DownstreamMessage.MessageOneofCase.DataMessage:
var from = downstreamMessage.DataMessage.From;
long? sequenceId = downstreamMessage.DataMessage.HasSequenceId ? downstreamMessage.DataMessage.SequenceId : null;
if (!TryParseMessageData(downstreamMessage.DataMessage.Data, out var dataType, out var binaryData))
{
throw new InvalidDataException($"Invalid data type: {downstreamMessage.DataMessage.Data.DataCase}");
}
if (from == "group")
{
var group = downstreamMessage.DataMessage.Group;
return [ new GroupDataMessage(group, dataType, binaryData, sequenceId, null) ];
}
else if (from == "server")
{
return [ new ServerDataMessage(dataType, binaryData, sequenceId) ];
}
else
{
throw new InvalidDataException($"Invalid data type: {downstreamMessage.DataMessage.Data.DataCase}");
}
case DownstreamMessage.MessageOneofCase.SystemMessage:
switch (downstreamMessage.SystemMessage.MessageCase)
{
case DownstreamMessage.Types.SystemMessage.MessageOneofCase.ConnectedMessage:
var connectedMsg = downstreamMessage.SystemMessage.ConnectedMessage;
return [ new ConnectedMessage(connectedMsg.UserId, connectedMsg.ConnectionId, connectedMsg.ReconnectionToken) ];
case DownstreamMessage.Types.SystemMessage.MessageOneofCase.DisconnectedMessage:
var disconnectedMsg = downstreamMessage.SystemMessage.DisconnectedMessage;
return [ new DisconnectedMessage(disconnectedMsg.Reason) ];
default:
throw new InvalidDataException($"Invalid system message type: {downstreamMessage.SystemMessage.MessageCase}");
}
default:
throw new InvalidDataException($"Invalid message type: {downstreamMessage.MessageCase}");
}
}