channel.cpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /**
  2. * Copyright (c) 2019-2021 Paul-Louis Ageneau
  3. *
  4. * This Source Code Form is subject to the terms of the Mozilla Public
  5. * License, v. 2.0. If a copy of the MPL was not distributed with this
  6. * file, You can obtain one at https://mozilla.org/MPL/2.0/.
  7. */
  8. #include "channel.hpp"
  9. #include "impl/channel.hpp"
  10. #include "impl/internals.hpp"
  11. namespace rtc {
  12. Channel::~Channel() { impl()->resetCallbacks(); }
  13. Channel::Channel(impl_ptr<impl::Channel> impl) : CheshireCat<impl::Channel>(std::move(impl)) {}
  14. size_t Channel::maxMessageSize() const { return 0; }
  15. size_t Channel::bufferedAmount() const { return impl()->bufferedAmount; }
  16. void Channel::onOpen(std::function<void()> callback) { impl()->openCallback = callback; }
  17. void Channel::onClosed(std::function<void()> callback) { impl()->closedCallback = callback; }
  18. void Channel::onError(std::function<void(string error)> callback) {
  19. impl()->errorCallback = callback;
  20. }
  21. void Channel::onMessage(std::function<void(message_variant data)> callback) {
  22. impl()->messageCallback = callback;
  23. impl()->flushPendingMessages();
  24. }
  25. void Channel::onMessage(std::function<void(binary data)> binaryCallback,
  26. std::function<void(string data)> stringCallback) {
  27. onMessage([binaryCallback, stringCallback](variant<binary, string> data) {
  28. std::visit(overloaded{binaryCallback, stringCallback}, std::move(data));
  29. });
  30. }
  31. void Channel::onBufferedAmountLow(std::function<void()> callback) {
  32. impl()->bufferedAmountLowCallback = callback;
  33. }
  34. void Channel::setBufferedAmountLowThreshold(size_t amount) {
  35. impl()->bufferedAmountLowThreshold = amount;
  36. }
  37. void Channel::resetCallbacks() { impl()->resetCallbacks(); }
  38. optional<message_variant> Channel::receive() { return impl()->receive(); }
  39. optional<message_variant> Channel::peek() { return impl()->peek(); }
  40. size_t Channel::availableAmount() const { return impl()->availableAmount(); }
  41. void Channel::onAvailable(std::function<void()> callback) { impl()->availableCallback = callback; }
  42. } // namespace rtc