internal void ReadExtensionMembers()

in src/Microsoft.Azure.SignalR.Protocols/ServiceMessage.cs [168:218]


        internal void ReadExtensionMembers(ref MessagePackReader reader)
        {
            int count = reader.ReadMapHeader();
            for (int i = 0; i < count; i++)
            {
                switch (reader.ReadInt32())
                {
                    case TracingId:
                        if (this is IMessageWithTracingId withTracingId)
                        {
                            withTracingId.TracingId = reader.ReadUInt64();
                        }
                        break;
                    case Ttl:
                        if (this is IHasTtl hasTtl)
                        {
                            hasTtl.Ttl = reader.ReadInt32();
                        }
                        break;
                    case Protocol:
                        if (this is IHasProtocol hasProtocol)
                        {
                            hasProtocol.Protocol = reader.ReadString();
                        }
                        break;
                    case Filter:
                        if (this is IHasSubscriberFilter hasFilter)
                        {
                            hasFilter.Filter = reader.ReadString();
                        }
                        break;
                    case DataMessageType:
                        if (this is IHasDataMessageType hasDataMessageType)
                        {
                            hasDataMessageType.Type = (DataMessageType)reader.ReadInt32();
                        }
                        break;
                    case IsPartial:
                        if (this is IPartializable canPartial)
                        {
                            canPartial.IsPartial = reader.ReadBoolean();
                        }
                        break;
                    // todo : more optional fields
                    default:
                        // bypass unknown member.
                        reader.Skip();
                        break;
                }
            }
        }