AClientConnection.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. }
  38. int AClientConnection::get_remaining_samples()
  39. {
  40. return send_sync<AudioServer::GetRemainingSamples>()->remaining_samples();
  41. }
  42. int AClientConnection::get_played_samples()
  43. {
  44. return send_sync<AudioServer::GetPlayedSamples>()->played_samples();
  45. }
  46. void AClientConnection::set_paused(bool paused)
  47. {
  48. send_sync<AudioServer::SetPaused>(paused);
  49. }
  50. void AClientConnection::clear_buffer(bool paused)
  51. {
  52. send_sync<AudioServer::ClearBuffer>(paused);
  53. }
  54. int AClientConnection::get_playing_buffer()
  55. {
  56. return send_sync<AudioServer::GetPlayingBuffer>()->buffer_id();
  57. }