# HG changeset patch
# User am@osimis.io
# Date 1530542177 -7200
# Node ID 5e642859267e489f19b9699a3e306cb9d03e126e
# Parent 54c7284b0effb37dbd5a952c54b2f12bdf588ee5
added new Observable/Observer & MessageBroker (not used yet)
diff -r 54c7284b0eff -r 5e642859267e Framework/Messages/IMessage.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Framework/Messages/IMessage.h Mon Jul 02 16:36:17 2018 +0200
@@ -0,0 +1,39 @@
+/**
+ * Stone of Orthanc
+ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
+ * Department, University Hospital of Liege, Belgium
+ * Copyright (C) 2017-2018 Osimis S.A., Belgium
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ **/
+
+
+#pragma once
+
+#include "MessageType.h"
+
+namespace OrthancStone {
+
+ class IMessage : public boost::noncopyable
+ {
+ MessageType messageType_;
+ public:
+ IMessage(const MessageType& messageType)
+ : messageType_(messageType)
+ {}
+
+ MessageType GetType() const {return messageType_;}
+ };
+
+}
diff -r 54c7284b0eff -r 5e642859267e Framework/Messages/IObservable.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Framework/Messages/IObservable.h Mon Jul 02 16:36:17 2018 +0200
@@ -0,0 +1,61 @@
+/**
+ * Stone of Orthanc
+ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
+ * Department, University Hospital of Liege, Belgium
+ * Copyright (C) 2017-2018 Osimis S.A., Belgium
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ **/
+
+
+#pragma once
+
+#include "MessageBroker.h"
+#include
+
+namespace OrthancStone {
+
+ class IObservable : public boost::noncopyable
+ {
+ MessageBroker& broker_;
+
+ std::set observers_;
+
+ public:
+
+ IObservable(MessageBroker& broker)
+ : broker_(broker)
+ {
+ }
+ virtual ~IObservable()
+ {
+ }
+
+ void Emit(const IMessage& message)
+ {
+ broker_.Emit(*this, observers_, message);
+ }
+
+ void RegisterObserver(IObserver& observer)
+ {
+ observers_.insert(&observer);
+ }
+
+ void UnregisterObserver(IObserver& observer)
+ {
+ observers_.erase(&observer);
+ }
+ };
+
+}
diff -r 54c7284b0eff -r 5e642859267e Framework/Messages/IObserver.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Framework/Messages/IObserver.h Mon Jul 02 16:36:17 2018 +0200
@@ -0,0 +1,50 @@
+/**
+ * Stone of Orthanc
+ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
+ * Department, University Hospital of Liege, Belgium
+ * Copyright (C) 2017-2018 Osimis S.A., Belgium
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ **/
+
+
+#pragma once
+
+#include "MessageBroker.h"
+
+namespace OrthancStone {
+
+ class IObservable;
+ class IMessage;
+
+ class IObserver : public boost::noncopyable
+ {
+ MessageBroker& broker_;
+
+ public:
+ IObserver(MessageBroker& broker)
+ : broker_(broker)
+ {
+ broker_.Register(*this);
+ }
+
+ virtual ~IObserver()
+ {
+ broker_.Unregister(*this);
+ }
+
+ virtual void HandleMessage(IObservable& from, const IMessage& message) = 0;
+ };
+
+}
diff -r 54c7284b0eff -r 5e642859267e Framework/Messages/MessageBroker.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Framework/Messages/MessageBroker.cpp Mon Jul 02 16:36:17 2018 +0200
@@ -0,0 +1,48 @@
+/**
+ * Stone of Orthanc
+ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
+ * Department, University Hospital of Liege, Belgium
+ * Copyright (C) 2017-2018 Osimis S.A., Belgium
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ **/
+
+
+#include "MessageBroker.h"
+
+#include
+#include
+
+#include "IObserver.h"
+#include "MessageType.h"
+
+namespace OrthancStone {
+
+ void MessageBroker::Emit(IObservable& from, std::set observers, const IMessage& message)
+ {
+ std::vector activeObservers;
+ std::set_intersection(observers.begin(),
+ observers.end(),
+ activeObservers_.begin(),
+ activeObservers_.end(),
+ std::back_inserter(activeObservers)
+ );
+
+ for (std::vector::iterator observer = activeObservers.begin(); observer != activeObservers.end(); observer++)
+ {
+ (*observer)->HandleMessage(from, message);
+ }
+ }
+
+}
diff -r 54c7284b0eff -r 5e642859267e Framework/Messages/MessageBroker.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Framework/Messages/MessageBroker.h Mon Jul 02 16:36:17 2018 +0200
@@ -0,0 +1,61 @@
+/**
+ * Stone of Orthanc
+ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
+ * Department, University Hospital of Liege, Belgium
+ * Copyright (C) 2017-2018 Osimis S.A., Belgium
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ **/
+
+
+#pragma once
+
+#include "../StoneEnumerations.h"
+
+#include "boost/noncopyable.hpp"
+#include