def METHOD_NAME(self, msg):
    # Check that the message's metadata is only and exactly what we want.
    if msg.flags != lcmt_point_cloud.IS_STRICTLY_FINITE:
        return
    fields = (
        # (name, byte_offset, datatype, count)
        ("x", 0, lcmt_point_cloud_field.FLOAT32, 1),
        ("y", 4, lcmt_point_cloud_field.FLOAT32, 1),
        ("z", 8, lcmt_point_cloud_field.FLOAT32, 1),
        ("rgb", 12, lcmt_point_cloud_field.UINT32, 1),
    )
    if msg.num_fields != len(fields):
        return
    for i, (name, byte_offset, datatype, count) in enumerate(fields):
        if msg.fields[i].name != name:
            return
        if msg.fields[i].byte_offset != byte_offset:
            return
        if msg.fields[i].datatype != datatype:
            return
        if msg.fields[i].count != count:
            return
    # Swizzle the channel data into ndarrays.  The msg.data is formatted
    # as "xxxx yyyy zzzz rgb_" where "xxxx", "yyyy", and "zzzz" are floats,
    # "r", "g", and "b" are uint8, and "_" is one byte of padding.
    points = np.frombuffer(msg.data, dtype=np.float32)
    points.shape = (-1, 4)
    xyz = points[:, 0:3]
    rgb_and_padding_as_float = np.delete(points, range(3), 1)
    rgb_and_padding = rgb_and_padding_as_float.view(dtype=np.uint8)
    rgb = rgb_and_padding[:, 0:3]
    self._update_cloud(xyz, rgb)