/* * IXWebSocketServer.h * Author: Benjamin Sergeant * Copyright (c) 2018 Machine Zone, Inc. All rights reserved. */ #pragma once #include // pair #include #include #include #include #include #include #include #include "IXWebSocket.h" namespace ix { using OnConnectionCallback = std::function)>; class WebSocketServer { public: WebSocketServer(int port = WebSocketServer::kDefaultPort, const std::string& host = WebSocketServer::kDefaultHost, int backlog = WebSocketServer::kDefaultTcpBacklog); virtual ~WebSocketServer(); void setOnConnectionCallback(const OnConnectionCallback& callback); void start(); void wait(); void stop(); std::pair listen(); // Get all the connected clients std::set> getClients(); private: // Member variables int _port; std::string _host; int _backlog; OnConnectionCallback _onConnectionCallback; // socket for accepting connections int _serverFd; std::mutex _clientsMutex; std::set> _clients; std::mutex _logMutex; std::atomic _stop; std::thread _thread; std::condition_variable _conditionVariable; std::mutex _conditionVariableMutex; const static int kDefaultPort; const static std::string kDefaultHost; const static int kDefaultTcpBacklog; // Methods void run(); void handleConnection(int fd); // Logging void logError(const std::string& str); void logInfo(const std::string& str); }; }