public static SchemaChangeEventArgs ParseSchemaChangeBody(ProtocolVersion protocolVersion, FrameReader reader) { var ce = new SchemaChangeEventArgs(); var changeTypeText = reader.ReadString(); SchemaChangeEventArgs.Reason changeType; switch (changeTypeText) { case "UPDATED": changeType = SchemaChangeEventArgs.Reason.Updated; break; case "DROPPED": changeType = SchemaChangeEventArgs.Reason.Dropped; break; default: changeType = SchemaChangeEventArgs.Reason.Created; break; } ce.What = changeType; if (!protocolVersion.SupportsSchemaChangeFullMetadata()) { //protocol v1 and v2: <change_type><keyspace><table> ce.Keyspace = reader.ReadString(); ce.Table = reader.ReadString(); return(ce); } //protocol v3+: <change_type><target><options> var target = reader.ReadString(); ce.Keyspace = reader.ReadString(); switch (target) { case "TABLE": ce.Table = reader.ReadString(); break; case "TYPE": ce.Type = reader.ReadString(); break; case "FUNCTION": ce.FunctionName = reader.ReadString(); ce.Signature = reader.ReadStringList(); break; case "AGGREGATE": ce.AggregateName = reader.ReadString(); ce.Signature = reader.ReadStringList(); break; } return(ce); }