Go to the documentation of this file.
24 #ifndef GOBY_MIDDLEWARE_TRANSPORT_INTERVEHICLE_DRIVER_THREAD_H
25 #define GOBY_MIDDLEWARE_TRANSPORT_INTERVEHICLE_DRIVER_THREAD_H
37 #include <boost/units/quantity.hpp>
63 class ModemTransmission;
99 namespace intervehicle
110 template <
typename Data>
111 std::shared_ptr<goby::middleware::protobuf::SerializerTransporterMessage>
115 auto* sbytes =
new std::string(bytes.begin(), bytes.end());
116 auto msg = std::make_shared<goby::middleware::protobuf::SerializerTransporterMessage>();
118 auto* key =
msg->mutable_key();
121 key->set_group(std::string(
group));
122 key->set_group_numeric(
group.numeric());
123 auto now = goby::time::SystemClock::now<goby::time::MicroTime>();
124 key->set_serialize_time_with_units(now);
125 *key->mutable_cfg() = publisher.
cfg();
126 msg->set_allocated_data(sbytes);
132 InterProcessForwarder<InterThreadTransporter>>
140 void loop()
override;
145 void _buffer_message(
146 const std::shared_ptr<const goby::middleware::protobuf::SerializerTransporterMessage>&
msg);
160 key.group_numeric());
165 return _create_buffer_id(subscription.
dccl_id(), subscription.
group());
180 bool dest_in_subnet =
184 <<
"Dest: " << dest_id
185 <<
" is not in subnet (our id: " <<
cfg().
modem_id()
188 return dest_in_subnet;
191 void _publish_subscription_report(
const intervehicle::protobuf::Subscription& changed);
194 std::unique_ptr<InterThreadTransporter> interthread_;
195 std::unique_ptr<InterProcessForwarder<InterThreadTransporter>> interprocess_;
197 std::multimap<subbuffer_id_type, goby::middleware::protobuf::SerializerTransporterKey>
198 publisher_buffer_cfg_;
200 std::map<modem_id_type, std::multimap<subbuffer_id_type, intervehicle::protobuf::Subscription>>
201 subscriber_buffer_cfg_;
203 std::map<subbuffer_id_type, std::set<modem_id_type>> subbuffers_created_;
206 std::set<modem_id_type> subscription_subbuffers_;
210 using frame_type =
int;
211 std::map<frame_type, std::vector<goby::acomms::DynamicBuffer<buffer_data_type>::Value>>
214 std::unique_ptr<goby::acomms::ModemDriverBase> driver_;
217 std::string glog_group_;
219 static std::map<std::string, void*> driver_plugins_;
size_t data_size(const SerializerTransporterMessage &msg)
::google::protobuf::uint64 serialize_time() const
std::chrono::microseconds duration
Duration type.
The global namespace for the Goby project.
Class for parsing and serializing a given marshalling scheme. Must be specialized for a particular sc...
::google::protobuf::uint32 dccl_id() const
const intervehicle::protobuf::PortalConfig::LinkConfig & cfg() const
const ::std::string & type() const
goby::util::logger::GroupSetter group(std::string n)
Class that holds additional metadata and callback functions related to a publication (and is optional...
provides an API to the goby-acomms MAC library. MACManager is essentially a std::list<protobuf::Modem...
::google::protobuf::uint32 group() const
const ::std::string & group() const
bool operator<(const TCPEndPoint &ep_a, const TCPEndPoint &ep_b)
std::chrono::time_point< SteadyClock > time_point
const ::std::string & data() const
::google::protobuf::uint32 subnet_mask() const
Represents a thread of execution within the Goby middleware, interleaving periodic events (loop()) wi...
bool operator==(const TCPEndPoint &ep_a, const TCPEndPoint &ep_b)
goby::acomms::DynamicBuffer< buffer_data_type >::modem_id_type modem_id_type
const goby::middleware::protobuf::TransporterConfig & cfg() const
Returns the metadata configuration.
extern ::google::protobuf::internal::ExtensionIdentifier< ::google::protobuf::MessageOptions, ::google::protobuf::internal::MessageTypeTraits< ::goby::GobyMessageOptions >, 11, false > msg
::google::protobuf::int32 marshalling_scheme() const
Class for grouping publications in the Goby middleware. Analogous to "topics" in ROS,...
Represents a time-dependent priority queue for several groups of messages (multiple DynamicSubBuffers...
std::string subbuffer_id_type
static unsigned id(CharIterator begin, CharIterator end)
util::FlexOstream glog
Access the Goby logger through this object.
string SerializeAsString() const
ModemDriverThread(const intervehicle::protobuf::PortalConfig::LinkConfig &cfg)
bool operator==(const TransporterConfig &a, const TransporterConfig &b)
const ::goby::middleware::protobuf::SerializerTransporterKey & key() const
std::shared_ptr< goby::middleware::protobuf::SerializerTransporterMessage > serialize_publication(const Data &d, const Group &group, const Publisher< Data > &publisher)
::google::protobuf::uint32 modem_id() const
goby::acomms::DynamicBuffer< buffer_data_type >::subbuffer_id_type subbuffer_id_type