TCPWebSocketConnectionImpl.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * Copyright (c) 2021, Dex♪ <dexes.ttp@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibWebSocket/Impl/TCPWebSocketConnectionImpl.h>
  7. namespace WebSocket {
  8. TCPWebSocketConnectionImpl::TCPWebSocketConnectionImpl(Core::Object* parent)
  9. : AbstractWebSocketImpl(parent)
  10. {
  11. }
  12. TCPWebSocketConnectionImpl::~TCPWebSocketConnectionImpl()
  13. {
  14. discard_connection();
  15. }
  16. void TCPWebSocketConnectionImpl::connect(ConnectionInfo const& connection)
  17. {
  18. VERIFY(!m_socket);
  19. VERIFY(on_connected);
  20. VERIFY(on_connection_error);
  21. VERIFY(on_ready_to_read);
  22. m_socket = Core::TCPSocket::construct(this);
  23. m_notifier = Core::Notifier::construct(m_socket->fd(), Core::Notifier::Read);
  24. m_notifier->on_ready_to_read = [this] {
  25. on_ready_to_read();
  26. };
  27. m_socket->on_connected = [this] {
  28. on_connected();
  29. };
  30. bool success = m_socket->connect(connection.url().host(), connection.url().port());
  31. if (!success) {
  32. deferred_invoke([this] {
  33. on_connection_error();
  34. });
  35. }
  36. }
  37. bool TCPWebSocketConnectionImpl::send(ReadonlyBytes data)
  38. {
  39. return m_socket->write(data);
  40. }
  41. bool TCPWebSocketConnectionImpl::can_read_line()
  42. {
  43. return m_socket->can_read_line();
  44. }
  45. String TCPWebSocketConnectionImpl::read_line(size_t size)
  46. {
  47. return m_socket->read_line(size);
  48. }
  49. bool TCPWebSocketConnectionImpl::can_read()
  50. {
  51. return m_socket->can_read();
  52. }
  53. ByteBuffer TCPWebSocketConnectionImpl::read(int max_size)
  54. {
  55. return m_socket->read(max_size);
  56. }
  57. bool TCPWebSocketConnectionImpl::eof()
  58. {
  59. return m_socket->eof();
  60. }
  61. void TCPWebSocketConnectionImpl::discard_connection()
  62. {
  63. if (!m_socket)
  64. return;
  65. m_socket->on_ready_to_read = nullptr;
  66. remove_child(*m_socket);
  67. m_socket = nullptr;
  68. }
  69. }