22#ifndef GZ_SIM_SYSTEMS_WEBSOCKETSERVER_HH_
23#define GZ_SIM_SYSTEMS_WEBSOCKETSERVER_HH_
37#include <gz/common/Util.hh>
38#include <libwebsockets.h>
47inline namespace GZ_SIM_VERSION_NAMESPACE {
173 class WebsocketServer
175 public ISystemConfigure
178 public: WebsocketServer() =
default;
181 public:
virtual ~WebsocketServer();
184 public:
void Configure(
const Entity &_entity,
186 EntityComponentManager &_ecm,
187 EventManager &_eventMgr)
final;
191 private:
void OnWebsocketSubscribedMessage(
const char *_data,
198 private:
void OnWebsocketSubscribedImageMessage(
199 const gz::msgs::Image &_msg,
205 public:
void OnConnect(
int _socketId);
209 public:
void OnDisconnect(
int _socketId);
214 public:
void OnMessage(
int _socketId,
const std::string _msg);
226 public:
bool UpdateMsgTypeSubscriptionCount(
const std::string &_topic,
227 int _socketId,
bool _subscribe);
232 private:
void OnAsset(
int _socketId,
238 private:
void OnRequest(
int _socketId,
243 private:
bool run =
true;
245 private:
struct lws_context *context =
nullptr;
248 private:
class Connection
250 public: std::chrono::system_clock::time_point creationTime;
255 public:
bool authorized{
false};
273 private:
void QueueMessage(Connection *_connection,
274 const char *_data,
const size_t _size);
303 public:
int messageCount{0};
307 public:
int maxConnections{-1};
318 public:
int queueSizePerConnection{-1};
322 private:
enum Operation
347 "sub",
"pub",
"topics",
"protos",
"asset",
"req"};