diff options
Diffstat (limited to 'mmss/mmss.hpp')
-rw-r--r-- | mmss/mmss.hpp | 56 |
1 files changed, 8 insertions, 48 deletions
diff --git a/mmss/mmss.hpp b/mmss/mmss.hpp index 723e0d6..c3bb31c 100644 --- a/mmss/mmss.hpp +++ b/mmss/mmss.hpp @@ -26,30 +26,21 @@ #pragma once +#include "event.hpp" #include "queue.hpp" #include <list> #include <memory> -struct gmrf { +struct gmrf : public std::enable_shared_from_this<MMSS::node_t> { private: - gmrf(MMSS::context_t *mmss0, const std::string &name0, unsigned rand_seed0, const std::shared_ptr<const MMSS::protocol_t> &proto0) : - mmss(mmss0), name(name0), rand_seed(rand_seed0), proto(proto0) {} gmrf(gmrf const&) = delete; gmrf& operator=(gmrf const&) = delete; public: - static std::shared_ptr<MMSS::node_t> create(MMSS::context_t *mmss, const std::string &name, unsigned rand_seed, const std::shared_ptr<const MMSS::protocol_t> &proto) { - MMSS::node_t *node = new MMSS::node_t(mmss, name, rand_seed, proto); - - std::shared_ptr<MMSS::node_t> ptr(node); - node->node = ptr; - - return ptr; - } - - std::weak_ptr<MMSS::node_t> node; + gmrf(MMSS::context_t *mmss0, const std::string &name0, unsigned rand_seed0, const std::shared_ptr<const MMSS::protocol_t> &proto0) : + mmss(mmss0), name(name0), rand_seed(rand_seed0), proto(proto0) {} MMSS::context_t *mmss; @@ -63,23 +54,13 @@ public: std::shared_ptr<const MMSS::protocol_t> proto; }; -struct gmrf_iface { +struct gmrf_iface : public std::enable_shared_from_this<MMSS::iface_t> { private: - gmrf_iface() {} gmrf_iface(gmrf_iface const&) = delete; gmrf_iface& operator=(gmrf_iface const&) = delete; public: - static std::shared_ptr<MMSS::iface_t> create() { - MMSS::iface_t *iface = new MMSS::iface_t; - - std::shared_ptr<MMSS::iface_t> ptr(iface); - iface->iface = ptr; - - return ptr; - } - - std::weak_ptr<MMSS::iface_t> iface; + gmrf_iface() = default; std::string name; gmrf_addr_t address; @@ -93,10 +74,9 @@ namespace MMSS { class context_t : public now_t { public: - timeout_queue_t<packet_t> packet_queue; - timeout_queue_t<scheduled_t> scheduled_queue; + timeout_queue_t<event_t> event_queue; - context_t() : packet_queue(this), scheduled_queue(this) {} + context_t() : event_queue(this) {} }; class config_t { @@ -113,24 +93,6 @@ public: size_t mtu; }; -class packet_t { -public: - uint64_t sent; - - std::weak_ptr<iface_t> source; - std::weak_ptr<iface_t> dest; - - size_t len; - std::unique_ptr<uint8_t[]> data; -}; - -class scheduled_t { -public: - std::shared_ptr<node_t> node; - gmrf_scheduled_func f; - void *arg; -}; - std::shared_ptr<const protocol_t> load_protocol(const char *module); @@ -138,8 +100,6 @@ bool read_config(context_t *mmss, config_t *conf, const char *filename); void add_iface(const std::shared_ptr<node_t> &node, const std::shared_ptr<network_t> &net, const std::string &name, const gmrf_addr_t *address); -void dispatch(const std::shared_ptr<packet_t> &packet); -void run_scheduled(const std::shared_ptr<scheduled_t> &scheduled); void enqueue(context_t *mmss, const std::shared_ptr<iface_t> &source, const std::shared_ptr<iface_t> &dest, const void *data, size_t len); void logf(context_t *mmss, int priority, const char *format, ...); |