roo_transport
API Documentation for roo_transport
Loading...
Searching...
No Matches
link_messaging.h
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4
5#include "roo_io/memory/store.h"
6#include "roo_io/status.h"
7#include "roo_logging.h"
8#include "roo_threads.h"
9#include "roo_threads/atomic.h"
10#include "roo_threads/mutex.h"
13
14namespace roo_transport {
15
16// Implementation of the Messaging interface over a LinkTransport.
17class LinkMessaging : public Messaging {
18 public:
19 using Messaging::send;
21
23 size_t max_recv_packet_size,
24 uint16_t recv_thread_stack_size = 4096,
25 const char* recv_thread_name = "linkMsgRcv");
26
27 void begin();
28
29 void end();
30
31 bool send(const roo::byte* header, size_t header_size,
32 const roo::byte* payload, size_t payload_size,
33 ConnectionId* connection_id) override;
34
35 bool sendContinuation(ConnectionId connection_id, const roo::byte* header,
36 size_t header_size, const roo::byte* payload,
37 size_t payload_size) override;
38
39 private:
40 uint32_t connect();
41 void receiveLoop();
42
43 // Must hold mutex_.
44 bool sendInternal(const roo::byte* header, size_t header_size,
45 const roo::byte* payload, size_t payload_size);
46
47 roo_transport::LinkInputStream& in();
48
49 roo_transport::LinkOutputStream& out();
50
53 roo::atomic<bool> closed_ = false;
54
55 std::function<void(ConnectionId connection_id, const roo::byte* data,
56 size_t len)>
57 recv_cb_;
58 size_t max_recv_packet_size_;
59 uint16_t recv_thread_stack_size_;
60 const char* recv_thread_name_;
61 roo::thread reader_thread_;
62 roo::condition_variable reconnected_;
63 mutable roo::mutex mutex_;
64};
65
66} // namespace roo_transport
bool send(const roo::byte *header, size_t header_size, const roo::byte *payload, size_t payload_size, ConnectionId *connection_id) override
Sends message with optional header and payload.
bool sendContinuation(ConnectionId connection_id, const roo::byte *header, size_t header_size, const roo::byte *payload, size_t payload_size) override
Sends continuation payload on an existing sender-side connection.
Abstract interface for message exchange over a reliable channel.
Definition messaging.h:17
virtual bool sendContinuation(ConnectionId connection_id, const roo::byte *header, size_t header_size, const roo::byte *payload, size_t payload_size)=0
Sends continuation payload on an existing sender-side connection.
virtual bool send(const roo::byte *header, size_t header_size, const roo::byte *payload, size_t payload_size, ConnectionId *connection_id)=0
Sends message with optional header and payload.