AClientConnection.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include <LibAudio/ABuffer.h>
  2. #include <LibAudio/AClientConnection.h>
  3. #include <SharedBuffer.h>
  4. AClientConnection::AClientConnection()
  5. : ConnectionNG("/tmp/asportal")
  6. {
  7. }
  8. void AClientConnection::handshake()
  9. {
  10. auto response = send_sync<AudioServer::Greet>(getpid());
  11. set_server_pid(response->server_pid());
  12. set_my_client_id(response->client_id());
  13. }
  14. void AClientConnection::enqueue(const ABuffer& buffer)
  15. {
  16. for (;;) {
  17. const_cast<ABuffer&>(buffer).shared_buffer().share_with(server_pid());
  18. auto response = send_sync<AudioServer::EnqueueBuffer>(buffer.shared_buffer_id(), buffer.sample_count());
  19. if (response->success())
  20. break;
  21. sleep(1);
  22. }
  23. }
  24. bool AClientConnection::try_enqueue(const ABuffer& buffer)
  25. {
  26. const_cast<ABuffer&>(buffer).shared_buffer().share_with(server_pid());
  27. auto response = send_sync<AudioServer::EnqueueBuffer>(buffer.shared_buffer_id(), buffer.sample_count());
  28. return response->success();
  29. }
  30. int AClientConnection::get_main_mix_volume()
  31. {
  32. return send_sync<AudioServer::GetMainMixVolume>()->volume();
  33. }
  34. void AClientConnection::set_main_mix_volume(int volume)
  35. {
  36. send_sync<AudioServer::SetMainMixVolume>(volume);
  37. }