Conscience Core
ServerEntities.h
Go to the documentation of this file.
1 #ifndef SERVERENTITIES_H
2 #define SERVERENTITIES_H
3 
5 #include "CscCommon.h"
7 #include <mutex>
8 #include <thread>
13 
14 using namespace conscience_server::communication;
16 using namespace conscience_core::communication;
17 using namespace conscience_core::core_objects;
18 using namespace conscience_core::ai;
21 
22 #define ENTITY_UDP_RESPONSE_PORT 1705
23 #define DEFAULT_UDP_LISTEN_PORT 1703
24 #define DEFAULT_TCP_LISTEN_PORT 1803
25 
26 using std::mutex, std::thread;
27 
29 // forward ref in order to optimize compilation
30 class UdpClient;
31 }
32 
34 
36 public:
37  string serialNumber;
38  string modelId;
40  optional<int> port;
41  string videoSource;
42 };
43 
45 public:
46  struct EntityPeerInfo {
47  string ip;
48  unsigned int port;
49 
50  operator string() const;
51  static EntityPeerInfo fromSerialized(const string &serializedInfo);
52  };
53 
57  ServerEntities(CscMessagingManager* messagingManager, CscVocalPhoneCallEmitter *phoneCallEmitter);
58  ~ServerEntities();
59 
64  ptr<CscEntityReflexion> startNewEntity(ptr<CscEntityReflexionParameters> entityParameters, optional<EntityPeerInfo> remoteEntityPeerInfo = {});
65 
66  void onEntityProfileReceived(const vector<string> &commandArguments, EntityPeerInfo entityPeerInfo);
67 
71  void onStatePlayed(const char *entitySerialNumber, double *values, unsigned long valuesSize, int duration, int delay, bool relative);
72 
73  bool isEntityRunningCommand(const string &entitySerialNumber, const string &commandPart) const;
74 
78  vector<const ServerEntitySummary *> getEntitiesSummary();
79 
80  vector<string> getEntitySerialNumbers();
81 
82  void restoreEntities();
83 
84 private:
85  void restoreEntitiesFromJson();
86 
87 
88  CscMessagingManager* messagingManager;
89  CscVocalPhoneCallEmitter *phoneCallEmitter;
90 
91  unique_ptr<CscLogger> logger = nullptr;
92  fs::path dataFilePath;
93  mutex persistEntitiesMutex;
94  mutex updateEntityMutex;
95  struct Entity {
96  ptr<CscEntityReflexion> entityReflexion;
97  optional<EntityPeerInfo> peerInfo;
98  UdpClient *udpClient = nullptr;
99  vector<string> currentCommands;
100 
101  Entity(ptr<CscEntityReflexion> entityReflexion, optional<EntityPeerInfo> peerInfo) : entityReflexion(entityReflexion), peerInfo(peerInfo) {
102  }
103  };
104 
105  map<string, Entity *> entitiesBySerialNumber;
106  map<string, int> registerClientPeriodMillisBySerialNumber;
107  const int registerClientIntervalTimeInMillis = 15000;
108  const int getCurrentLidarPeriodMillis = 200;
109  const int registerClientIntervalForLocalizationTimeInMillis = 250;
110  bool registerClientLoopRunning = false;
111  thread registerClientThread;
112 
113  void sendLiveEnvironmentUpdate(const string entitySerialNumber, const vector<ptr<const LiveEnvironmentDetectedObject>> &detectedObjects);
114 
115  ptr<CscEntityReflexion> updateEntity(
116  ptr<CscEntityReflexionParameters> entityParameters,
117  optional<EntityPeerInfo> remoteEntityPeerInfo,
118  bool persistInDataFile);
119 
120  void installEntityListeners(Entity *entity);
121  void persistEntities();
122 
123  void updateEntityCurrentCommands(const string &entitySerialNumber, function<void(vector<string> &commands)> update);
124 
129  int startEntityCurrentCommands(const string &entitySerialNumber);
130 
131  void addOnStatePlayedListener();
132 
133  const string followEntityId = "followEntity";
134 
135  void sendUdpMessageToEntity(const string &message, const string &serialNumber);
136  void registerClientThreadLoop();
137  void registerClientWithPeriodInMillis(int periodInMillis, string serialNumber);
138 
139  void onCommandExecutedOnEntity(ptr<CscEntityReflexion> entityReflexion, const CscCommand *command, const CscCommandExecutionResult *result);
140 };
141 }
142 
143 #endif
conscience_core::lidar::Entity
@ Entity
Definition: CscEntityPositionManager.h:27
conscience_core::core_objects
Definition: CscEntityReflexion.h:33
conscience_core::ai
Definition: alerts.cpp:12
conscience_server::entities::ServerEntitySummary::ip
optional< string > ip
Definition: ServerEntities.h:39
conscience_server::entities::ServerEntities
Definition: ServerEntities.h:44
Command.h
conscience_server::entities::ServerEntities::EntityPeerInfo::ip
string ip
Definition: ServerEntities.h:47
conscience_server::entities::ServerEntities::EntityPeerInfo::port
unsigned int port
Definition: ServerEntities.h:48
conscience_core::bridging::commands::result
Definition: CscCommandMetadataBuilder.h:26
CscMessagingManager.h
conscience_server::entities
Definition: ServerEntities.cpp:36
CscMessageEncryption.h
CscEntityReflexion.h
logger
static std::unique_ptr< CscLogger > logger
Definition: gltfHelpers.cpp:6
conscience_core::bridging::commands
Definition: cartographyCommands.cpp:4
conscience_server::entities::ServerEntitySummary::modelId
string modelId
Definition: ServerEntities.h:38
conscience_core::bridging::commands::CscCommand
Definition: Command.h:40
CommandExecutionResult.h
CscCommon.h
conscience_server::communication
Definition: CscVocalPhoneCallEmitter.cpp:17
conscience_server::entities::ServerEntitySummary::videoSource
string videoSource
Definition: ServerEntities.h:41
conscience_core::bridging::commands::result::CscCommandExecutionResult
Definition: CommandExecutionResult.h:44
conscience_server::entities::ServerEntities::EntityPeerInfo
Definition: ServerEntities.h:46
conscience_core::communication
Definition: CscEntityClient.h:6
conscience_core::communication::UdpClient
Definition: UdpClient.h:16
conscience_server::entities::ServerEntitySummary::port
optional< int > port
Definition: ServerEntities.h:40
conscience_server::communication::phone::CscVocalPhoneCallEmitter
Definition: CscVocalPhoneCallEmitter.h:17
CscVocalPhoneCallEmitter.h
conscience_server::entities::ServerEntitySummary
Definition: ServerEntities.h:35
conscience_core::communication::CscMessagingManager
Definition: CscMessagingManager.h:27
conscience_core::bridging::commands::environment_objects::optional< string >
const ptr< CscObjectModel > const string const CscPoint3d const CscPoint3d optional< string >
Definition: environmentObjectsCommands.h:373
ptr
std::shared_ptr< T > ptr
Definition: CscCommon.h:29
conscience_server::entities::ServerEntitySummary::serialNumber
string serialNumber
Definition: ServerEntities.h:37
conscience_server::communication::phone
Definition: CscVocalPhoneCallEmitter.cpp:17
conscience_core::bridging::commands::onCommandExecutedOnEntity
void onCommandExecutedOnEntity(const CscCommand *command, const string &entitySerialNumber, const CscCommandExecutionResult *result, CscEnvironmentSimulator &environmentSimulator)
Definition: CscCommandsProcessor.cpp:60