]> AND Private Git Repository - loba.git/blob - communicator.h
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Wip++...
[loba.git] / communicator.h
1 // Asynchronous communicator
2
3 #ifndef COMMUNICATOR_H
4 #define COMMUNICATOR_H
5
6 #include <list>
7 #include <string>
8 #include <msg/msg.h>
9 #include "hostdata.h"
10
11 class message {
12 public:
13     enum message_type { INFO, CREDIT, LOAD, CTRL_CLOSE, DATA_CLOSE };
14
15     message(message_type t, double a): type(t), amount(a) { }
16
17     message_type get_type() const       { return type;   }
18     double get_amount() const           { return amount; }
19
20     std::string to_string();
21
22 private:
23     message_type type;
24     double amount;
25 };
26
27 class communicator {
28 public:
29     communicator();
30     ~communicator();
31
32     void listen();
33
34     void send(const char* dest, message* msg);
35     bool recv(message*& msg, m_host_t& from, bool wait);
36     void flush(bool wait);
37
38     void next_close_on_ctrl_is_last();
39     void next_close_on_data_is_last();
40
41 private:
42     // Myself
43     const hostdata* host;
44
45     // List of pending send communications
46     std::list<msg_comm_t> sent_comm;
47
48     // Control channel for receiving
49     m_task_t    ctrl_task;
50     msg_comm_t  ctrl_comm;
51     bool        ctrl_close_is_last;
52
53     // Data channel for receiving
54     m_task_t    data_task;
55     msg_comm_t  data_comm;
56     bool        data_close_is_last;
57
58     const char* get_ctrl_mbox() const   { return host->get_ctrl_mbox(); }
59     const char* get_data_mbox() const   { return host->get_data_mbox(); }
60
61     static void comm_push_in_dynar(xbt_dynar_t dynar, msg_comm_t comm);
62     static bool comm_test_n_destroy(msg_comm_t comm);
63 };
64
65 #endif // !COMMUNICATOR_H
66
67 // Local variables:
68 // mode: c++
69 // End: