SRS-control 0.1.4
 
Loading...
Searching...
No Matches
UDPWriter.hpp
Go to the documentation of this file.
1#pragma once
2
6
7namespace srs::connection
8{
9 class UDPWriterConnection : public Base<>
10 {
11 public:
12 explicit UDPWriterConnection(const Info& info)
13 : Base(info, "UDP writer")
14 {
15 }
16 };
17} // namespace srs::connection
18
19namespace srs::writer
20{
21 class UDP
22 {
23 public:
24 UDP(App& app,
25 asio::ip::udp::endpoint endpoint,
27 : convert_mode_{ derser_mode }
28 , connection_{ connection::Info{ &app } }
29 , app_{ app }
30 {
31 connection_.set_socket(std::make_unique<asio::ip::udp::socket>(
32 app.get_io_context(), asio::ip::udp::endpoint{ asio::ip::udp::v4(), 0 }));
33 connection_.set_remote_endpoint(std::move(endpoint));
34 coro_ = connection_.send_continuous_message();
35 common::coro_sync_start(coro_, std::optional<std::string_view>{}, asio::use_awaitable);
36 }
37
38 static constexpr auto IsStructType = false;
39 auto is_deserialize_valid() { return convert_mode_ == raw or convert_mode_ == proto; }
40
41 auto get_convert_mode() const -> process::DataConvertOptions { return convert_mode_; }
42 auto write(auto last_fut) -> boost::unique_future<std::optional<int>>
43 {
44 return common::create_coro_future(coro_, last_fut);
45 }
46
47 // INFO: this will be called in coroutine
48 void close() { connection_.close(); }
49
50 // Getters:
51 auto get_local_socket() -> const auto& { return connection_.get_socket(); }
52 auto get_remote_endpoint() -> const auto& { return connection_.get_remote_endpoint(); }
53
54 private:
58 std::reference_wrapper<App> app_;
59 asio::experimental::coro<int(std::optional<std::string_view>)> coro_;
60 };
61
62} // namespace srs::writer
auto get_io_context() -> auto &
Base(const Info &info, std::string name)
connection::UDPWriterConnection connection_
Definition UDPWriter.hpp:57
auto get_local_socket() -> const auto &
Definition UDPWriter.hpp:51
auto is_deserialize_valid()
Definition UDPWriter.hpp:39
process::DataConvertOptions convert_mode_
Definition UDPWriter.hpp:56
std::reference_wrapper< App > app_
Definition UDPWriter.hpp:58
static constexpr auto IsStructType
Definition UDPWriter.hpp:38
asio::experimental::coro< int(std::optional< std::string_view >)> coro_
Definition UDPWriter.hpp:59
auto get_convert_mode() const -> process::DataConvertOptions
Definition UDPWriter.hpp:41
UDP(App &app, asio::ip::udp::endpoint endpoint, process::DataConvertOptions derser_mode=process::DataConvertOptions::none)
Definition UDPWriter.hpp:24
auto write(auto last_fut) -> boost::unique_future< std::optional< int > >
Definition UDPWriter.hpp:42
auto get_remote_endpoint() -> const auto &
Definition UDPWriter.hpp:52
auto create_coro_future(auto &coro, auto &&pre_fut)
void coro_sync_start(auto &coro, auto &&... args)