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

#include "ConnectionFromManagerClient.h"

namespace AudioServer {

static HashMap<int, RefPtr<ConnectionFromManagerClient>> s_connections;

ConnectionFromManagerClient::ConnectionFromManagerClient(NonnullOwnPtr<Core::LocalSocket> client_socket, int client_id, Mixer& mixer)
    : IPC::ConnectionFromClient<AudioManagerClientEndpoint, AudioManagerServerEndpoint>(*this, move(client_socket), client_id)
    , m_mixer(mixer)
{
    s_connections.set(client_id, *this);
}

void ConnectionFromManagerClient::die()
{
    s_connections.remove(client_id());
}

void ConnectionFromManagerClient::for_each(Function<void(ConnectionFromManagerClient&)> callback)
{
    Vector<NonnullRefPtr<ConnectionFromManagerClient>> connections;
    for (auto& it : s_connections)
        connections.append(*it.value);
    for (auto& connection : connections)
        callback(connection);
}

void ConnectionFromManagerClient::did_change_main_mix_muted_state(Badge<Mixer>, bool muted)
{
    async_main_mix_muted_state_changed(muted);
}

void ConnectionFromManagerClient::did_change_main_mix_volume(Badge<Mixer>, double volume)
{
    async_main_mix_volume_changed(volume);
}

Messages::AudioManagerServer::GetMainMixVolumeResponse ConnectionFromManagerClient::get_main_mix_volume()
{
    return m_mixer.main_volume();
}

void ConnectionFromManagerClient::set_main_mix_volume(double volume)
{
    m_mixer.set_main_volume(volume);
}

Messages::AudioManagerServer::GetDeviceSampleRateResponse ConnectionFromManagerClient::get_device_sample_rate()
{
    return { m_mixer.audiodevice_get_sample_rate() };
}

void ConnectionFromManagerClient::set_device_sample_rate(u32 sample_rate)
{
    m_mixer.audiodevice_set_sample_rate(sample_rate);
}

Messages::AudioManagerServer::IsMainMixMutedResponse ConnectionFromManagerClient::is_main_mix_muted()
{
    return m_mixer.is_muted();
}

void ConnectionFromManagerClient::set_main_mix_muted(bool muted)
{
    m_mixer.set_muted(muted);
}

}