ClientConnection.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*
  2. * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <AK/Badge.h>
  7. #include <Clipboard/ClientConnection.h>
  8. #include <Clipboard/ClipboardClientEndpoint.h>
  9. #include <Clipboard/Storage.h>
  10. namespace Clipboard {
  11. static HashMap<int, RefPtr<ClientConnection>> s_connections;
  12. void ClientConnection::for_each_client(Function<void(ClientConnection&)> callback)
  13. {
  14. for (auto& it : s_connections) {
  15. callback(*it.value);
  16. }
  17. }
  18. ClientConnection::ClientConnection(NonnullRefPtr<Core::LocalSocket> socket, int client_id)
  19. : IPC::ClientConnection<ClipboardClientEndpoint, ClipboardServerEndpoint>(*this, move(socket), client_id)
  20. {
  21. s_connections.set(client_id, *this);
  22. }
  23. ClientConnection::~ClientConnection()
  24. {
  25. }
  26. void ClientConnection::die()
  27. {
  28. s_connections.remove(client_id());
  29. }
  30. void ClientConnection::handle(const Messages::ClipboardServer::Greet&)
  31. {
  32. }
  33. void ClientConnection::handle(const Messages::ClipboardServer::SetClipboardData& message)
  34. {
  35. Storage::the().set_data(message.data(), message.mime_type(), message.metadata().entries());
  36. }
  37. Messages::ClipboardServer::GetClipboardDataResponse ClientConnection::handle(const Messages::ClipboardServer::GetClipboardData&)
  38. {
  39. auto& storage = Storage::the();
  40. return { storage.buffer(), storage.mime_type(), storage.metadata() };
  41. }
  42. void ClientConnection::notify_about_clipboard_change()
  43. {
  44. post_message(Messages::ClipboardClient::ClipboardDataChanged(Storage::the().mime_type()));
  45. }
  46. }