AClientConnection.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. #include <LibAudio/ABuffer.h>
  2. #include <LibAudio/AClientConnection.h>
  3. #include <SharedBuffer.h>
  4. AClientConnection::AClientConnection()
  5. : Connection("/tmp/asportal")
  6. {
  7. }
  8. void AClientConnection::handshake()
  9. {
  10. ASAPI_ClientMessage request;
  11. request.type = ASAPI_ClientMessage::Type::Greeting;
  12. request.greeting.client_pid = getpid();
  13. auto response = sync_request(request, ASAPI_ServerMessage::Type::Greeting);
  14. set_server_pid(response.greeting.server_pid);
  15. set_my_client_id(response.greeting.your_client_id);
  16. }
  17. void AClientConnection::play(const ABuffer& buffer)
  18. {
  19. auto shared_buf = SharedBuffer::create_with_size(buffer.size_in_bytes());
  20. if (!shared_buf) {
  21. dbg() << "Failed to create a shared buffer!";
  22. return;
  23. }
  24. memcpy(shared_buf->data(), buffer.data(), buffer.size_in_bytes());
  25. shared_buf->seal();
  26. shared_buf->share_with(server_pid());
  27. ASAPI_ClientMessage request;
  28. request.type = ASAPI_ClientMessage::Type::PlayBuffer;
  29. request.play_buffer.buffer_id = shared_buf->shared_buffer_id();
  30. sync_request(request, ASAPI_ServerMessage::Type::PlayingBuffer);
  31. }