replicode
module_node.h
Go to the documentation of this file.
1 /*
2 * HUMANOBS - mBrane
3 *
4 * Eric Nivel
5 * Center for Analysis and Design of Intelligent Agents
6 * Reykjavik University, Menntavegur 1, 101 Reykjavik, Iceland
7 * http://cadia.ru.is
8 * Copyright(c)2012
9 *
10 * This software was developed by the above copyright holder as part of
11 * the HUMANOBS EU research project, in collaboration with the
12 * following parties:
13 *
14 * Autonomous Systems Laboratory
15 * Technical University of Madrid, Spain
16 * http://www.aslab.org/
17 *
18 * Communicative Machines
19 * Edinburgh, United Kingdom
20 * http://www.cmlabs.com/
21 *
22 * Istituto Dalle Molle di Studi sull'Intelligenza Artificiale
23 * University of Lugano and SUPSI, Switzerland
24 * http://www.idsia.ch/
25 *
26 * Institute of Cognitive Sciences and Technologies
27 * Consiglio Nazionale delle Ricerche, Italy
28 * http://www.istc.cnr.it/
29 *
30 * Dipartimento di Ingegneria Informatica
31 * University of Palermo, Italy
32 * http://roboticslab.dinfo.unipa.it/index.php/Main/HomePage
33 *
34 *
35 * --- HUMANOBS Open-Source BSD License, with CADIA Clause v 1.0 ---
36 *
37 * Redistribution and use in source and binary forms, with or without
38 * modification, is permitted provided that the following conditions
39 * are met:
40 *
41 * - Redistributions of source code must retain the above copyright
42 * and collaboration notice, this list of conditions and the
43 * following disclaimer.
44 *
45 * - Redistributions in binary form must reproduce the above copyright
46 * notice, this list of conditions and the following
47 * disclaimer in the documentation and/or other materials provided
48 * with the distribution.
49 *
50 * - Neither the name of its copyright holders nor the names of its
51 * contributors may be used to endorse or promote products
52 * derived from this software without specific prior written permission.
53 *
54 * - CADIA Clause: The license granted in and to the software under this
55 * agreement is a limited-use license. The software may not be used in
56 * furtherance of:
57 * (i) intentionally causing bodily injury or severe emotional distress
58 * to any person;
59 * (ii) invading the personal privacy or violating the human rights of
60 * any person; or
61 * (iii) committing or preparing for any act of war.
62 *
63 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
64 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
65 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
66 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
67 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
68 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
69 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
70 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
71 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
72 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
73 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
74 */
75 
76 #ifndef mBrane_sdk_module_node_h
77 #define mBrane_sdk_module_node_h
78 
79 #include "payload.h"
80 #include <iostream>
81 
82 namespace mBrane
83 {
84 namespace sdk
85 {
86 
87 namespace module
88 {
89 
90 class _Module;
91 
92 // Node API, as seen from the module
93 class mBrane_dll Node
94 {
95 private:
96  static Node *Singleton;
97 protected:
98  static std::ostream *Streams[3];
99  uint8_t _ID; // max: 0x7F
100  Node(uint8_t ID);
101  ~Node();
102 public:
103  static const uint8_t NoID = 0xFF;
104  typedef enum {
105  PRIMARY = 0,
106  SECONDARY = 1,
107  BOTH = 2,
108  LOCAL = 3,
109  EITHER = 4
110  } Network;
111  typedef enum {
112  EXECUTION = 0,
113  NETWORK = 1,
114  APPLICATION = 2
115  } TraceLevel;
116  static Node *Get();
117  static std::ostream &trace(TraceLevel l);
118  uint8_t id() const;
119  virtual const char *name() = 0;
120  virtual void send(const _Module *sender, _Payload *p, Network network = PRIMARY) = 0;
121  virtual void send(const _Module *sender, _Payload *message, uint8_t nodeID, Network network = PRIMARY) = 0;
122  virtual uint64_t time() const = 0; // in us since 01/01/70
123  virtual void newSpace(const _Module *sender, Network network = PRIMARY) = 0; // names are meaningless for dynamic instances
124  virtual void newModule(const _Module *sender, uint16_t CID, Network network = PRIMARY, const char *hostName = "local") = 0;
125  virtual void deleteSpace(uint16_t ID, Network network = PRIMARY) = 0;
126  virtual void deleteModule(uint16_t CID, uint16_t ID, Network network = PRIMARY) = 0;
127  virtual void activateModule(const _Module *sender, uint16_t module_cid, uint16_t module_id, uint16_t space_id, float activationLevel, Network network = PRIMARY) = 0;
128  virtual void activateSpace(const _Module *sender, uint16_t space_id, uint16_t target_sid, float activationLevel, Network network = PRIMARY) = 0;
129  virtual void setSpaceThreshold(const _Module *sender, uint16_t space_id, float threshold, Network network = PRIMARY) = 0;
130  virtual void subscribeMessage(const _Module *sender, uint16_t module_cid, uint16_t module_id, uint16_t space_id, uint16_t message_cid, Network network = PRIMARY) = 0;
131  virtual void unsubscribeMessage(const _Module *sender, uint16_t module_cid, uint16_t module_id, uint16_t space_id, uint16_t message_cid, Network network = PRIMARY) = 0;
132  virtual void subscribeStream(const _Module *sender, uint16_t module_cid, uint16_t module_id, uint16_t space_id, uint16_t stream_id, Network network = PRIMARY) = 0;
133  virtual void unsubscribeStream(const _Module *sender, uint16_t module_cid, uint16_t module_id, uint16_t space_id, uint16_t stream_id, Network network = PRIMARY) = 0;
134  virtual const char *getSpaceName(uint16_t hostID, uint16_t ID) = 0;
135  virtual const char *getModuleName(uint16_t CID) = 0;
136  virtual uint8_t getNodeID(const char *name) = 0;
137  // Interface for caching.
138  virtual void markUnused(_Payload *p) = 0;
139  virtual void addConstantObject(_Payload *c, const std::string &name) = 0;
140  virtual _Payload *getConstantObject(uint32_t OID) = 0;
141  virtual _Payload *getConstantObject(const std::string &name) = 0;
142  virtual void addLookup(uint8_t sourceNID, uint32_t OID) = 0;
143  virtual bool hasLookup(uint8_t destinationNID, uint32_t OID) = 0;
144  virtual void addSharedObject(_Payload *p) = 0;
145  virtual _Payload *getSharedObject(uint32_t OID) = 0;
146  virtual void consolidate(_Payload *p) = 0;
147 };
148 }
149 }
150 }
151 
152 
153 #endif
uint8_t _ID
Definition: module_node.h:99
static Node * Singleton
Definition: module_node.h:96
Definition: array.h:84
Definition: payload.h:122
Definition: module_node.h:93
Definition: module.h:99