ANNA Suite  2020b
Multipurpose development suite for Telco applications
Transport.hpp
Go to the documentation of this file.
1 // ANNA - Anna is Not Nothingness Anymore //
2 // //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
4 // //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7 
8 
9 #ifndef anna_comm_Transport_hpp
10 #define anna_comm_Transport_hpp
11 
13 #include <anna/core/DataBlock.hpp>
14 
15 namespace anna {
16 
17 namespace comm {
18 
19 class Communicator;
20 class Message;
21 
44 class Transport {
45 
46  static const int MinOverQuotaSize = 512;
47 
48  int a_overQuotaSize;
49  Message* a_inputMessage;
50 
51  static Message* nullInputMessage() noexcept(false);
52 
53 public:
59  static const int DefaultOverQuotaSize = 2048;
60  )
62  static const int DefaultOverQuotaSize = 8192;
63  )
64 
68  bool enableTimeout() const { return a_enableTimeout; }
69 
76  void activateTimeout() { a_enableTimeout = true; }
77 
82  void deactivateTimeout() { a_enableTimeout = false; }
83 
84 
85  // Internal use: returns associated input message
86  Message* getInputMessage() noexcept(false) {
87  return (a_inputMessage == NULL) ? nullInputMessage() : a_inputMessage;
88  }
89 
94  int getOverQuotaSize() const { return a_overQuotaSize; }
95 
104  void setOverQuotaSize(const int overQuotaSize) { a_overQuotaSize = (overQuotaSize >= MinOverQuotaSize) ? overQuotaSize : MinOverQuotaSize; }
105 
122  virtual int calculeSize(const DataBlock& dataBlock) noexcept(false) = 0;
123 
138  virtual const Message* decode(const DataBlock& message) noexcept(false) = 0;
139 
151  virtual const DataBlock& code(Message& message) noexcept(false) = 0;
152 
157  virtual void clear() { a_forCode.clear(); }
158 
159 protected:
169  a_inputMessage(NULL),
170  a_forCode(true),
171  a_enableTimeout(false) {
172  a_overQuotaSize = DefaultOverQuotaSize;
173  }
174 
179  void setInputMessage(Message* inputMessage) { a_inputMessage = inputMessage; }
180 
181 private:
182 
183  bool a_enableTimeout;
184 };
185 
186 }
187 }
188 
189 #endif
bool enableTimeout() const
Definition: Transport.hpp:68
void setInputMessage(Message *inputMessage)
Definition: Transport.hpp:179
#define WHEN_MULTITHREAD(a)
Definition: defines.hpp:96
void setOverQuotaSize(const int overQuotaSize)
Definition: Transport.hpp:104
virtual int calculeSize(const DataBlock &dataBlock) noexcept(false)=0
virtual void clear()
Definition: Transport.hpp:157
DataBlock a_forCode
Definition: Transport.hpp:160
Definition: Transport.hpp:44
Message * getInputMessage() noexcept(false)
Definition: Transport.hpp:86
Definition: Message.hpp:26
int getOverQuotaSize() const
Definition: Transport.hpp:94
void clear() noexcept(false)
Definition: DataBlock.hpp:240
Definition: app.hpp:12
virtual const Message * decode(const DataBlock &message) noexcept(false)=0
void activateTimeout()
Definition: Transport.hpp:76
Transport()
Definition: Transport.hpp:168
void deactivateTimeout()
Definition: Transport.hpp:82
WHEN_SINGLETHREAD(static const int DefaultOverQuotaSize=2048;) WHEN_MULTITHREAD(static const int DefaultOverQuotaSize
Definition: DataBlock.hpp:24
virtual const DataBlock & code(Message &message) noexcept(false)=0