+++ /dev/null
-#include <sstream>
-
-#include <boost/range/algorithm.hpp>
-
-#include "reference-counter.hpp"
-
-#include "communication/communication.hpp"
-#include "communication/message/request.hpp"
-#include "communication/message/failure.hpp"
-#include "communication/message/succeed.hpp"
-
-namespace ipc = boost::interprocess;
-
-namespace monazilla { namespace GikoMona { namespace core {
-
-communication::communication(const communicate_id self_id) : self(self_id) {
- gm_shmem = shared_memory(ipc::open_or_create, shared_memory_name, 1024 * 4);
-
- my_mailbox = construct_object<mailbox>(create_mailbox_name(self));
-
- if(auto obj = find_object<reference_counter>(ref_counter_name)) {
- auto locker = obj->scoped_lock();
- ++(*obj);
- } else {
- construct_object<reference_counter>(ref_counter_name);
- }
-}
-
-communication::~communication() {
- disconnect_all();
-
- if(auto obj = find_object<reference_counter>(ref_counter_name)) {
- if(obj->count() == 1) {
- ipc::shared_memory_object::remove(shared_memory_name);
- } else {
- auto locker = obj->scoped_lock();
- --(*obj);
- }
- } else {
- /* error!!!!! */
- }
-}
-
-bool communication::connect(const communicate_id connect_to) {
- auto obj = find_object<mailbox>(gm_shmem, create_mailbox_name(connect_to));
-
- if(obj) {
- mailbox_map[connect_to] = *obj;
- send(connect_to, succeed::find_your_mailbox("").to_string());
-
- do {
- mona_string mail = receive(connect_to);
- } while(is_same_mail(mail, succeed::allow_you_to_send_mail("")));
- }
-
- return obj;
-}
-
-bool communication::disconnect(const communicate_id disconnect_from) {
- return mailbox_map.erase(disconnect_from);
-}
-
-mona_string communication::receive(const communicate_id originator_id) {
- boost::find_if
-}
-
-bool communication::send_string(const communicate_id to, mona_string&& src) {
- auto obj = find_object<mailbox>(gm_shmem, create_mailbox_name(to));
-
- if(obj) {
- std::ostringstream str_builder;
- str_builder << to_string(self) << "-" << src;
-
- obj->push_back(str_builder.str());
- }
-
- return obj;
-}
-
-std::string communication::create_mailbox_name(const communicate_id mb_user_id) {
- std::ostringstream str_builder;
- str_builder << "mailbox:" << to_string(mb_user_id);
-
- return str_builder.str();
-}
-
-} } }