Skip to content

Commit

Permalink
AudioServer: Let ASMixer notify ASClientConnection about finished buf…
Browse files Browse the repository at this point in the history
…fers.

Instead of posting a message directly from ASMixer, notify the client via
ASClientConnection::did_finish_playing_buffer().
  • Loading branch information
awesomekling committed Jul 27, 2019
1 parent dbebf10 commit 6a03196
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 13 deletions.
19 changes: 13 additions & 6 deletions Servers/AudioServer/ASClientConnection.cpp
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
#include "ASClientConnection.h"
#include "ASMixer.h"

#include <LibCore/CEventLoop.h>
#include <LibAudio/ASAPI.h>
#include <LibAudio/ABuffer.h>
#include <LibAudio/ASAPI.h>
#include <LibCore/CEventLoop.h>
#include <SharedBuffer.h>

#include <errno.h>
#include <unistd.h>
#include <sys/uio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>

ASClientConnection::ASClientConnection(CLocalSocket& client_socket, int client_id, ASMixer& mixer)
: Connection(client_socket, client_id)
Expand Down Expand Up @@ -63,3 +63,10 @@ bool ASClientConnection::handle_message(const ASAPI_ClientMessage& message, cons
return true;
}

void ASClientConnection::did_finish_playing_buffer(Badge<ASMixer>, int buffer_id)
{
ASAPI_ServerMessage reply;
reply.type = ASAPI_ServerMessage::Type::FinishedPlayingBuffer;
reply.playing_buffer.buffer_id = buffer_id;
post_message(reply);
}
2 changes: 2 additions & 0 deletions Servers/AudioServer/ASClientConnection.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ class ASClientConnection final : public IPC::Server::Connection<ASAPI_ServerMess
void send_greeting() override;
bool handle_message(const ASAPI_ClientMessage&, const ByteBuffer&& = {}) override;

void did_finish_playing_buffer(Badge<ASMixer>, int buffer_id);

private:
ASMixer& m_mixer;
};
9 changes: 2 additions & 7 deletions Servers/AudioServer/ASMixer.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
#include <AK/BufferStream.h>
#include <AudioServer/ASClientConnection.h>
#include <AudioServer/ASMixer.h>
#include <LibAudio/ASAPI.h>
#include <LibCore/CThread.h>
#include <limits>

Expand Down Expand Up @@ -78,12 +77,8 @@ void ASMixer::mix()

// clear it later
if (buffer.pos == sample_count) {
if (buffer.m_client) {
ASAPI_ServerMessage reply;
reply.type = ASAPI_ServerMessage::Type::FinishedPlayingBuffer;
reply.playing_buffer.buffer_id = buffer.buffer->shared_buffer_id();
buffer.m_client->post_message(reply);
}
if (buffer.m_client)
buffer.m_client->did_finish_playing_buffer({}, buffer.buffer->shared_buffer_id());
buffer.done = true;
}
}
Expand Down

0 comments on commit 6a03196

Please sign in to comment.