source: src/CodePatterns/Observer/Relay.hpp@ 9b8fa4

Last change on this file since 9b8fa4 was 9b8fa4, checked in by Frederik Heber <heber@…>, 14 years ago

Huge update of file structure to place installation header files into right folder.

  • The problem ist that we desire use as include "CodePatterns/...". For this to work, especially with the new Observer subfolder structure, it has been necessary to place all header files away from their source files into a distinct folder called CodePatterns. This emulates the later, after make install present structure.
  • essentially all source and header files had to be changed to adapt the include.
  • all Makefile.am's had to be changed.
  • nobase_ ... was removed such that header files are installed flat and not creating their subfolder along the process.
  • We placed Observer into its own convenience library and own folder Observer away from Patterns.

Some other changes:

  • FIX: MemDebug.hpp inclusion has been removed in all stubs.
  • Property mode set to 100644
File size: 1.7 KB
Line 
1/*
2 * Relay.hpp
3 *
4 * Created on: Dec 1, 2011
5 * Author: heber
6 */
7
8#ifndef RELAY_HPP_
9#define RELAY_HPP_
10
11// include config.h
12#ifdef HAVE_CONFIG_H
13#include <config.h>
14#endif
15
16#include "CodePatterns/Observer/Observable.hpp"
17
18/**
19 * A Relay acts as a node in a many-to-one observation.
20 *
21 * All Observable::update() calls will pass through this relay. Hence, if an
22 * instance desires to observe all atoms and be notified of each single change,
23 * he would otherwise be forced to not only Observable:signon() to each and
24 * every one of them but also to keep track of all newly created ones.
25 *
26 * Instead he simply uses Relay::signOn() of the specific Relay he wishes
27 * to use (note Relay should are singleton of nature but are not required to
28 * inherit the Singleton pattern) and will get notified as if he were
29 * signOn()'ed to each atom because Observer::update() will get passed through
30 * the Relay. I.e. the given reference to the Observer points to the atom that
31 * initiated the update() call and not to the Relay.
32 */
33class Relay : public Observable {
34public:
35 Relay(std::string _name);
36 virtual ~Relay();
37
38 virtual void signOn(Observer *target, PriorityLevel priority = Observable::PriorityDefault) const;
39
40 virtual void signOff(Observer *target) const;
41
42 virtual void signOn(Observer *target, size_t channelno) const;
43
44 virtual void signOff(Observer *target, size_t channelno) const;
45
46protected:
47 virtual void update(Observable *publisher);
48 virtual void recieveNotification(Observable *publisher, Notification_ptr notification);
49 virtual void subjectKilled(Observable *publisher);
50
51 virtual void notifyAll();
52
53private:
54 //!> Current peer that called last update on us, to be passed on to Observers
55 Observable *Updater;
56};
57
58
59#endif /* RELAY_HPP_ */
Note: See TracBrowser for help on using the repository browser.