Newer
Older
minerva / Userland / Services / AudioServer / ConnectionFromManagerClient.h
@minerva minerva on 13 Jul 1 KB Initial commit
/*
 * Copyright (c) 2023, kleines Filmröllchen <filmroellchen@serenityos.org>
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#pragma once

#include <AK/NonnullOwnPtr.h>
#include <AudioServer/AudioManagerClientEndpoint.h>
#include <AudioServer/AudioManagerServerEndpoint.h>
#include <AudioServer/Mixer.h>
#include <LibIPC/ConnectionFromClient.h>

namespace AudioServer {

class ConnectionFromManagerClient final : public IPC::ConnectionFromClient<AudioManagerClientEndpoint, AudioManagerServerEndpoint> {
    C_OBJECT(ConnectionFromManagerClient)

public:
    ~ConnectionFromManagerClient() override = default;

    virtual void die() override;

    static void for_each(Function<void(ConnectionFromManagerClient&)>);

    void did_change_main_mix_muted_state(Badge<Mixer>, bool muted);
    void did_change_main_mix_volume(Badge<Mixer>, double volume);

private:
    ConnectionFromManagerClient(NonnullOwnPtr<Core::LocalSocket> client_socket, int client_id, Mixer& mixer);

    virtual Messages::AudioManagerServer::GetMainMixVolumeResponse get_main_mix_volume() override;
    virtual void set_main_mix_volume(double) override;
    virtual Messages::AudioManagerServer::IsMainMixMutedResponse is_main_mix_muted() override;
    virtual void set_main_mix_muted(bool) override;
    virtual void set_device_sample_rate(u32 sample_rate) override;
    virtual Messages::AudioManagerServer::GetDeviceSampleRateResponse get_device_sample_rate() override;

    Mixer& m_mixer;
};

}