public static IReadOnlyList ParseMessage()

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}");
        }
    }