MeshProtocolSimulator  1.0.0
Emulator.h
Go to the documentation of this file.
1 
13 #pragma once
14 
15 
16 
17 #include "Emulator_helpers.h"
18 #include "JSON_helper.h"
19 
26 class Emulator {
27 public:
28 
32  Emulator();
33 
37  ~Emulator();
38 
48  bool Begin(std::string scenarioPath, std::string loggerPath, int autoPause = -1, bool logOnly_ = false, bool rawOutput_ = false);
49 
58  inline bool Begin(std::string loggerPath, bool autoPause = true, bool logOnly_ = false, bool rawOutput_ = false) {
59  return Begin("", loggerPath, autoPause, logOnly_, rawOutput_);
60  }
61 
69  inline bool Begin(bool autoPause = true, bool logOnly_ = false, bool rawOutput_ = false) {
70  return Begin("", "", autoPause, logOnly_, rawOutput_);
71  }
72 
76  void End();
77 
82  inline bool SimulationStarted() {
83  return beginCalled;
84  }
85 
89  void Pause();
90 
94  inline bool isPaused() {
95  return beginCalled && Paused;
96  }
97 
101  bool AutoPause = false;
102 
106  void Resume();
107 
113  bool ResumeUntil(std::chrono::nanoseconds time);
114 
118  std::chrono::seconds SimulationLimit = std::chrono::seconds::zero();
119 
123  void Handle();
124 
131  bool InvokeNetScan(MeshMAC currentNodeAddress, uint32_t timeout);
132 
139  bool InvokeNetScan(int currentNodeIndex, uint32_t timeout);
140 
147  bool InvokeConnect(MeshMAC currentNodeAddress, MeshMAC networkBSSID);
148 
155  bool InvokeConnect(int currentNodeIndex, MeshMAC networkBSSID);
156 
162  bool InvokeDisconnect(MeshMAC currentNodeAddress);
163 
169  bool InvokeDisconnect(int currentNodeIndex);
170 
177  bool InvokeNodeDisconnectRequest(MeshMAC gatewayNodeAddress, MeshMAC nodeToDisconnect);
178 
185  bool InvokeNodeDisconnectRequest(int gatewayNodeIndex, MeshMAC nodeToDisconnect);
186 
193  bool InvokeNetworkDrop(MeshMAC gatewayNodeAddress, bool forced);
194 
201  bool InvokeNetworkDrop(int gatewayNodeInde, bool forced);
202 
211  bool InvokeSend(MeshMAC senderNodeAddress, MeshMAC destNodeAddress, const char* message, uint8_t size);
212 
221  bool InvokeSend(int senderNodeIndex, int destNodeIndex, const char* message, uint8_t size);
222 
231  bool InvokeSend(MeshMAC senderNodeAddress, MeshMAC destNodeAddress, const uint8_t* message, uint16_t messageLength);
232 
241  bool InvokeSend(int senderNodeIndex, int destNodeIndex, const uint8_t* message, uint16_t messageLength);
242 
251  bool InvokePing(MeshMAC senderNodeAddress, MeshMAC destNodeAddress, uint32_t timeout, int16_t testDataLength = 0);
252 
261  bool InvokePing(int senderNodeIndex, int destNodeIndex, uint32_t timeout, int16_t testDataLength = 0);
262 
269  bool TablePrint(MeshMAC nodeAddress, TableType table);
270 
277  bool TablePrint(int index, TableType table);
278 
284  int indexOfNode(MeshNet* node);
285 
291  int indexOfNode(RFInterface* nodeInterface);
292 
298  int indexOfNode(MeshMAC mac);
299 
306  int indexOfNode(uint8_t address, MeshMAC bssid);
307 
311  std::mutex Mutex;
312 
316  std::mutex StreamMutex;
317 
338 
342  inline int GetConnectionsCount() {
343  return ConnectionsCount;
344  }
345 
351  return Connections;
352  }
353 
357  inline int GetNodesCount() {
358  return NodesCount;
359  }
360 
366  return nodeSimulators;
367  }
368 
373  std::chrono::seconds GetElapsedTime();
374 
378  inline std::chrono::nanoseconds GetMinSimulationTime() {
379  return minSimulationTime;
380  }
381 
385  inline std::chrono::nanoseconds GetMaxSimulationTime() {
386  return maxSimulationTime;
387  }
388 
392  inline bool isRawOutput() {
393  return RawOutput;
394  }
395 
399  inline bool isLogOnly() {
400  return logOnly;
401  }
402 
403 protected:
404 
409 
414 
418  int NodesCount = 0;
419 
424 
428  std::chrono::system_clock::time_point SimulationResumeTime;
429 
433  std::chrono::seconds ElapsedTimeUntilLastPause = std::chrono::seconds::zero();
434 
438  bool Paused = false;
439 
443  std::chrono::nanoseconds runUntil = std::chrono::nanoseconds::zero();
444 
448  std::chrono::nanoseconds minSimulationTime = std::chrono::nanoseconds::zero();
449 
453  std::chrono::nanoseconds maxSimulationTime = std::chrono::nanoseconds::zero();
454 
458  std::chrono::nanoseconds lastSentTime = std::chrono::nanoseconds::zero();
459 
463  bool RawOutput = false;
464 
468  bool logOnly = false;
469 
473  bool AbortThreads = false;
474 
479 
484 
485  friend NodeSimulator; //Friend class
486  friend Simulation_RFI; //Friend class
487 
488 private:
489 
493  bool beginCalled = false;
494 
495 };
Emulator::SimulationLimit
std::chrono::seconds SimulationLimit
Maximum simulation limit in seconds. After this time, simulation is aborted.
Definition: Emulator.h:118
Emulator::runUntil
std::chrono::nanoseconds runUntil
Time, the simulation will run until and after that time it is paused.
Definition: Emulator.h:443
Emulator::AutoPause
bool AutoPause
True to auto pause simulation after 1 second of inactivity.
Definition: Emulator.h:101
Emulator::End
void End()
Ends simulation. This has to be called when logging is enabled.
Definition: Emulator.cpp:168
Emulator::GetConnectionsPtr
const NodeConnections * GetConnectionsPtr()
Pointer to array with network connections. Connections can be set from scenario file or can be set to...
Definition: Emulator.h:350
TableType
TableType
This enum represents type of table of buffer used in MeshNet.
Definition: Emulator_helpers.h:33
Emulator::ConnectionsCount
int ConnectionsCount
Count of connections in network.
Definition: Emulator.h:408
NodeSimulator
Structure, that runs simulation for one node in network and contains some info about that node.
Definition: Emulator_helpers.h:420
Emulator_helpers.h
This file contains helper classes or structured for Emulator class.
Emulator::ElapsedTimeUntilLastPause
std::chrono::seconds ElapsedTimeUntilLastPause
Time, that elapsed until last pause except time, when simulation was paused.
Definition: Emulator.h:433
Emulator::Begin
bool Begin(std::string loggerPath, bool autoPause=true, bool logOnly_=false, bool rawOutput_=false)
Starts simulation.
Definition: Emulator.h:58
Emulator::InvokePing
bool InvokePing(MeshMAC senderNodeAddress, MeshMAC destNodeAddress, uint32_t timeout, int16_t testDataLength=0)
Invokes ping packet.
Definition: Emulator.cpp:395
Emulator::lastSentTime
std::chrono::nanoseconds lastSentTime
Time, when message was sent last.
Definition: Emulator.h:458
Emulator::InvokeNetworkDrop
bool InvokeNetworkDrop(MeshMAC gatewayNodeAddress, bool forced)
Invokes network drop. This can be called only by gateway node.
Definition: Emulator.cpp:351
Emulator::Emulator
Emulator()
Constructor.
Definition: Emulator.cpp:12
Emulator::DefaultNodeConnections
const static NodeConnections DefaultNodeConnections[9]
Default node connections, when connections are not specified in JSON scenario file....
Definition: Emulator.h:337
Emulator::InvokeNetScan
bool InvokeNetScan(MeshMAC currentNodeAddress, uint32_t timeout)
Invokes network scan on specified node.
Definition: Emulator.cpp:293
Emulator::RawOutput
bool RawOutput
True to print raw output for computer.
Definition: Emulator.h:463
Emulator::indexOfNode
int indexOfNode(MeshNet *node)
Gets index of node in nodeSimulators by MeshNet pointer.
Definition: Emulator.cpp:522
Emulator::AbortThreads
bool AbortThreads
True to abort all threads.
Definition: Emulator.h:473
Emulator::GetNodesCount
int GetNodesCount()
Count of nodes in network. This value is established when begin() is called.
Definition: Emulator.h:357
Emulator::Connections
const NodeConnections * Connections
Pointer to array with network connections.
Definition: Emulator.h:413
Emulator::GetMinSimulationTime
std::chrono::nanoseconds GetMinSimulationTime()
Minimum simulation time elapsed in nanoseconds.
Definition: Emulator.h:378
Emulator::Handle
void Handle()
Processes main simulation loop.
Definition: Emulator.cpp:195
Emulator::~Emulator
~Emulator()
Destructor.
Definition: Emulator.cpp:16
Emulator::Mutex
std::mutex Mutex
Global mutex for current class variables.
Definition: Emulator.h:311
Emulator::GetConnectionsCount
int GetConnectionsCount()
Count of connections between nodes in network.
Definition: Emulator.h:342
Emulator::maxSimulationTime
std::chrono::nanoseconds maxSimulationTime
Maximum simulation time elapsed in nanoseconds.
Definition: Emulator.h:453
Emulator::TablePrint
bool TablePrint(MeshMAC nodeAddress, TableType table)
Prints table of selected node.
Definition: Emulator.cpp:416
Emulator::Begin
bool Begin(std::string scenarioPath, std::string loggerPath, int autoPause=-1, bool logOnly_=false, bool rawOutput_=false)
Starts simulation.
Definition: Emulator.cpp:21
Emulator::GetMaxSimulationTime
std::chrono::nanoseconds GetMaxSimulationTime()
Maximum simulation time elapsed in nanoseconds.
Definition: Emulator.h:385
Emulator
This class emulates virtual wireless environment for MeshNet nodes (MNodes) with virtual radios....
Definition: Emulator.h:26
Emulator::ResumeUntil
bool ResumeUntil(std::chrono::nanoseconds time)
Resumes simulation until specified time.
Definition: Emulator.cpp:487
Emulator::GetElapsedTime
std::chrono::seconds GetElapsedTime()
Gets real time, that elapsed during simulation except moments when simulation was paused.
Definition: Emulator.cpp:513
Emulator::InvokeSend
bool InvokeSend(MeshMAC senderNodeAddress, MeshMAC destNodeAddress, const char *message, uint8_t size)
Invokes selected node to send message.
Definition: Emulator.cpp:365
Emulator::Resume
void Resume()
Resumes simulation.
Definition: Emulator.cpp:466
Emulator::NodesCount
int NodesCount
Count of nodes in network. This value is established when begin() is called.
Definition: Emulator.h:418
Emulator::InvokeConnect
bool InvokeConnect(MeshMAC currentNodeAddress, MeshMAC networkBSSID)
Invokes node connection to specified node.
Definition: Emulator.cpp:308
Emulator::isRawOutput
bool isRawOutput()
True if output to cout should be in raw for, which can be easily read by computer in another applicat...
Definition: Emulator.h:392
Emulator::logOnly
bool logOnly
True to redirect logs to file only.
Definition: Emulator.h:468
Emulator::InvokeDisconnect
bool InvokeDisconnect(MeshMAC currentNodeAddress)
Invokes node disconnection.
Definition: Emulator.cpp:322
Emulator::isLogOnly
bool isLogOnly()
True if output to console is disabled and only logs has to be done. This can be true only if logger i...
Definition: Emulator.h:399
Emulator::nodeSimulators
NodeSimulator * nodeSimulators
Array with node simulators for each node. This value is established when begin() is called using Conn...
Definition: Emulator.h:423
Emulator::isPaused
bool isPaused()
Returns true if simulation is paused.
Definition: Emulator.h:94
Emulator::minSimulationTime
std::chrono::nanoseconds minSimulationTime
Minimum simulation time elapsed in nanoseconds.
Definition: Emulator.h:448
Emulator::GetNodeSimulatorsPtr
NodeSimulator * GetNodeSimulatorsPtr()
Array with node simulators for each node. Simulators are created when begin() is called and destructe...
Definition: Emulator.h:365
JSONScenarioReader
Definition: JSON_helper.h:37
JSONLogsWriter
Definition: JSON_helper.h:280
Emulator::SimulationStarted
bool SimulationStarted()
Checks if simulation was started by calling begin().
Definition: Emulator.h:82
NodeConnections
This structure represents link connection between two nodes. Nodes are indentified by it's MeshMAC ad...
Definition: Emulator_helpers.h:47
Emulator::scenarioReader
JSONScenarioReader scenarioReader
JSON scenario reader.
Definition: Emulator.h:483
Emulator::InvokeNodeDisconnectRequest
bool InvokeNodeDisconnectRequest(MeshMAC gatewayNodeAddress, MeshMAC nodeToDisconnect)
Invokes node disconnection request. This can be called only by gateway node.
Definition: Emulator.cpp:337
Emulator::logger
JSONLogsWriter logger
Output logger.
Definition: Emulator.h:478
Emulator::Begin
bool Begin(bool autoPause=true, bool logOnly_=false, bool rawOutput_=false)
Starts simulation.
Definition: Emulator.h:69
Emulator::StreamMutex
std::mutex StreamMutex
Global mutex for stream.
Definition: Emulator.h:316
Emulator::Pause
void Pause()
Pauses simulation.
Definition: Emulator.cpp:444
Emulator::SimulationResumeTime
std::chrono::system_clock::time_point SimulationResumeTime
Time, when simulation was last resumed.
Definition: Emulator.h:428
Emulator::Paused
bool Paused
True to pause simulation or when simulation is paused.
Definition: Emulator.h:438