summaryrefslogtreecommitdiff
path: root/implementation/routing/include/routing_manager_proxy.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'implementation/routing/include/routing_manager_proxy.hpp')
-rw-r--r--implementation/routing/include/routing_manager_proxy.hpp70
1 files changed, 55 insertions, 15 deletions
diff --git a/implementation/routing/include/routing_manager_proxy.hpp b/implementation/routing/include/routing_manager_proxy.hpp
index a142db8..852ca19 100644
--- a/implementation/routing/include/routing_manager_proxy.hpp
+++ b/implementation/routing/include/routing_manager_proxy.hpp
@@ -39,20 +39,20 @@ public:
void offer_service(client_t _client, service_t _service,
instance_t _instance, major_version_t _major,
- minor_version_t _minor, ttl_t _ttl);
+ minor_version_t _minor);
void stop_offer_service(client_t _client, service_t _service,
instance_t _instance);
void request_service(client_t _client, service_t _service,
instance_t _instance, major_version_t _major,
- minor_version_t _minor, ttl_t _ttl, bool _has_selective);
+ minor_version_t _minor, bool _use_exclusive_proxy);
void release_service(client_t _client, service_t _service,
instance_t _instance);
void subscribe(client_t _client, service_t _service, instance_t _instance,
- eventgroup_t _eventgroup, major_version_t _major, ttl_t _ttl);
+ eventgroup_t _eventgroup, major_version_t _major);
void unsubscribe(client_t _client, service_t _service, instance_t _instance,
eventgroup_t _eventgroup);
@@ -68,15 +68,26 @@ public:
bool send_to(const std::shared_ptr<endpoint_definition> &_target,
const byte_t *_data, uint32_t _size);
+ void register_event(client_t _client, service_t _service,
+ instance_t _instance, event_t _event,
+ std::set<eventgroup_t> _eventgroups,
+ bool _is_field, bool _is_provided);
+
+ void unregister_event(client_t _client, service_t _service,
+ instance_t _instance, event_t _event,
+ bool _is_provided);
+
void notify(service_t _service, instance_t _instance, event_t _event,
std::shared_ptr<payload> _payload);
void notify_one(service_t _service, instance_t _instance,
- event_t _event, std::shared_ptr<payload> _payload, client_t _client);
+ event_t _event, std::shared_ptr<payload> _payload,
+ client_t _client);
void on_connect(std::shared_ptr<endpoint> _endpoint);
void on_disconnect(std::shared_ptr<endpoint> _endpoint);
void on_message(const byte_t *_data, length_t _length, endpoint *_receiver);
+ void on_error(const byte_t *_data, length_t _length, endpoint *_receiver);
void on_routing_info(const byte_t *_data, uint32_t _size);
@@ -95,36 +106,47 @@ private:
void send_pong() const;
void send_offer_service(client_t _client, service_t _service,
instance_t _instance, major_version_t _major,
- minor_version_t _minor, ttl_t _ttl);
+ minor_version_t _minor);
+ void send_request_service(client_t _client, service_t _service,
+ instance_t _instance, major_version_t _major,
+ minor_version_t _minor, bool _use_exclusive_proxy);
+ void send_register_event(client_t _client, service_t _service,
+ instance_t _instance, event_t _event,
+ std::set<eventgroup_t> _eventgroup,
+ bool _is_field, bool _is_provided);
void send_subscribe(client_t _client, service_t _service,
instance_t _instance, eventgroup_t _eventgroup,
- major_version_t _major, ttl_t _ttl);
+ major_version_t _major);
- void send_request_service(client_t _client, service_t _service,
- instance_t _instance, major_version_t _major,
- minor_version_t _minor, ttl_t _ttl, bool _is_selective);
+ bool is_field(service_t _service, instance_t _instance,
+ event_t _event) const;
private:
- boost::asio::io_service &io_;bool is_connected_;bool is_started_;
- event_type_e state_;
+ boost::asio::io_service &io_;
+ bool is_connected_;
+ bool is_started_;
+ state_type_e state_;
routing_manager_host *host_;
client_t client_; // store locally as it is needed in each message
+ std::shared_ptr<configuration> configuration_;
+
std::shared_ptr<serializer> serializer_;
std::shared_ptr<deserializer> deserializer_;
- std::shared_ptr<endpoint> sender_; // --> stub
+ std::shared_ptr<endpoint> sender_; // --> stub
std::shared_ptr<endpoint> receiver_; // --> from everybody
std::map<client_t, std::shared_ptr<endpoint> > local_endpoints_;
std::map<service_t, std::map<instance_t, client_t> > local_services_;
+ std::mutex local_services_mutex_;
struct service_data_t {
service_t service_;
instance_t instance_;
major_version_t major_;
minor_version_t minor_;
- ttl_t ttl_;
+ bool use_exclusive_proxy_; // only used for requests!
bool operator<(const service_data_t &_other) const {
return (service_ < _other.service_
@@ -135,12 +157,30 @@ private:
std::set<service_data_t> pending_offers_;
std::set<service_data_t> pending_requests_;
+ struct event_data_t {
+ service_t service_;
+ instance_t instance_;
+ event_t event_;
+ bool is_field_;
+ bool is_provided_;
+ std::set<eventgroup_t> eventgroups_;
+
+ bool operator<(const event_data_t &_other) const {
+ return (service_ < _other.service_
+ || (service_ == _other.service_
+ && instance_ < _other.instance_)
+ || (service_ == _other.service_
+ && instance_ == _other.instance_
+ && event_ < _other.event_));
+ }
+ };
+ std::set<event_data_t> pending_event_registrations_;
+
struct eventgroup_data_t {
service_t service_;
instance_t instance_;
eventgroup_t eventgroup_;
major_version_t major_;
- ttl_t ttl_;
bool operator<(const eventgroup_data_t &_other) const {
return (service_ < _other.service_
@@ -163,7 +203,7 @@ private:
std::mutex deserialize_mutex_;
std::mutex pending_mutex_;
- bool is_selective_;
+ std::map<service_t, std::map<instance_t, std::set<event_t> > > fields_;
};
} // namespace vsomeip