summaryrefslogtreecommitdiffstats
path: root/mmss/mmss.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'mmss/mmss.hpp')
-rw-r--r--mmss/mmss.hpp56
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, ...);